import { ListFormWizardDto, WizardExportAnalysisDto, WizardDeleteResultDto, WizardFileInfoDto, WizardImportAnalysisDto, WizardImportApplyResultDto, WizardImportCompleteResultDto, WizardPermissionGroupDto, WizardSeedFileDto, } from '@/proxy/admin/wizard/models' import apiService from './api.service' export const postListFormWizard = (input: ListFormWizardDto) => apiService.fetchData({ method: 'POST', url: `/api/app/list-form-wizard`, data: input, }) /** Izin gruplarini iki dilli gorunen adlariyla getirir. */ export const getWizardPermissionGroups = () => apiService.fetchData({ method: 'GET', url: `/api/app/list-form-wizard/permission-groups`, }) export const getWizardFiles = () => apiService.fetchData({ method: 'GET', url: `/api/app/list-form-wizard/files`, }) export const getWizardFile = (fileName: string) => apiService.fetchData({ method: 'GET', url: `/api/app/list-form-wizard/file`, params: { fileName }, }) export const deleteWizardFile = (fileName: string) => apiService.fetchData({ method: 'DELETE', url: `/api/app/list-form-wizard/file`, params: { fileName }, }) /** * Indirmeden once arsivin tam icerigini ve cozulemeyen bagimliliklarini getirir; export ile * ayni toplamayi kullanir, dolayisiyla onizlemedeki liste indirilen zip ile birebir aynidir. */ export const getWizardExportAnalysis = (fileName: string) => apiService.fetchData({ method: 'GET', url: `/api/app/list-form-wizard/export-analysis`, params: { fileName }, }) /** * Wizard dosyasini ve bagimlilik kapanisindaki tum seed dosyalarini (data/crud/sql, alt formlar) * tek bir zip olarak indirir. Zip icindeki klasor duzeni seed kapsam klasoru ile aynidir; baska bir * ortamda dogrudan acilabilir. */ export const exportWizardFile = (fileName: string) => apiService.fetchData({ method: 'GET', url: `/api/app/list-form-wizard/export`, params: { fileName }, responseType: 'blob', }) /** Blob'u tarayicida indirme olarak tetikler. */ export const downloadBlob = (blob: Blob, fileName: string) => { const url = window.URL.createObjectURL(blob) const link = document.createElement('a') link.style.display = 'none' link.href = url link.download = fileName document.body.appendChild(link) link.click() document.body.removeChild(link) window.URL.revokeObjectURL(url) } /** * Zip'i sunucudaki gecici bir oturuma acar ve her dosyayi hedefteki karsiligiyla karsilastirir. * Hicbir hedef dosyaya dokunmaz; donen `importId` uygulama adimlarinda kullanilir. */ export const analyzeWizardImport = (file: File) => { const formData = new FormData() formData.append('file', file) formData.append('FileName', file.name) formData.append('ContentType', file.type || 'application/zip') formData.append('ContentLength', file.size.toString()) return apiService.fetchData({ method: 'POST', url: `/api/app/list-form-wizard/analyze-import`, data: formData as any, }) } /** Tek bir dosyayi hedefe yazar. `content` verilmezse zip'ten gelen icerik oldugu gibi yazilir. */ export const applyWizardImport = (importId: string, path: string, content?: string) => apiService.fetchData({ method: 'POST', url: `/api/app/list-form-wizard/apply-import`, data: { importId, path, content: content ?? null }, }) /** * Import oturumunu kapatir; staging ve yedek klasorleri silinir. Kapanistan once yazilan * `data/*.json` dosyalari veritabanina uygulanir ve sonucu doner. */ export const completeWizardImport = (importId: string) => apiService.fetchData({ method: 'POST', url: `/api/app/list-form-wizard/complete-import`, params: { importId }, }) /** O ana kadar yazilmis dosyalari geri alir ve oturumu kapatir. */ export const rollbackWizardImport = (importId: string) => apiService.fetchData({ method: 'POST', url: `/api/app/list-form-wizard/rollback-import`, params: { importId }, })