sozsoft-platform/ui/src/services/wizard.service.ts
2026-09-18 12:12:38 +03:00

128 lines
4.1 KiB
TypeScript

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<WizardPermissionGroupDto[]>({
method: 'GET',
url: `/api/app/list-form-wizard/permission-groups`,
})
export const getWizardFiles = () =>
apiService.fetchData<WizardFileInfoDto[]>({
method: 'GET',
url: `/api/app/list-form-wizard/files`,
})
export const getWizardFile = (fileName: string) =>
apiService.fetchData<WizardSeedFileDto>({
method: 'GET',
url: `/api/app/list-form-wizard/file`,
params: { fileName },
})
export const deleteWizardFile = (fileName: string) =>
apiService.fetchData<WizardDeleteResultDto>({
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<WizardExportAnalysisDto>({
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<Blob>({
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<WizardImportAnalysisDto>({
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<WizardImportApplyResultDto>({
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<WizardImportCompleteResultDto>({
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 },
})