sozsoft-platform/ui/src/proxy/admin/wizard/models.ts

372 lines
10 KiB
TypeScript
Raw Normal View History

import { ColumnFormatEditDto } from '@/proxy/admin/list-form-field/models'
import {
2026-07-28 18:36:37 +00:00
GanttOptionDto,
GridOptionsEditDto,
2026-07-28 18:36:37 +00:00
SchedulerOptionDto,
SubFormDto,
2026-07-28 18:36:37 +00:00
TodoOptionDto,
TreeOptionDto,
WidgetEditDto,
2026-07-28 18:36:37 +00:00
WorkflowDto,
2026-07-16 14:01:18 +00:00
SelectCommandTypeEnum,
} from '@/proxy/form/models'
import { ListViewLayoutType } from '@/views/admin/listForm/edit/types'
2026-05-03 09:52:22 +00:00
export interface ListFormWizardColumnItemDto {
2026-07-17 20:23:43 +00:00
fieldName: string
2026-05-03 09:52:22 +00:00
editorType: string
editorOptions: string
editorScript: string
colSpan: number
isRequired: boolean
includeInEditingForm: boolean
2026-05-03 09:52:22 +00:00
dbSourceType: number
}
export interface ListFormWizardColumnGroupDto {
caption: string
colCount: number
items: ListFormWizardColumnItemDto[]
}
/** Wizard'ın yol ayrımı; backend `WizardComponentKindEnum` ile birebir eşleşir. */
export enum WizardComponentKindEnum {
List = 0,
Custom = 1,
}
2026-05-03 09:52:22 +00:00
export interface ListFormWizardDto {
componentKind: WizardComponentKindEnum
/**
* Düzenleme modunda, yerine geçilecek seed dosyasının adı. Doluysa sunucu önce bu dosyayı
* ve ürettiği kayıtları siler, sonra yenisini üretir; istek güncelleme yetkisiyle çalışır.
*/
editFileName?: string
2026-05-03 09:52:22 +00:00
wizardName: string
/**
* Wizard'ın ilk deploy edildiği an. Dosya adı tarih taşımadığı için seeder dosyaları bu
* damgaya göre sıralar; sunucu üretir, istemci göndermez.
*/
seededAt?: string
2026-05-03 09:52:22 +00:00
listFormCode: string
menuCode: string
menuOrder: number
2026-08-24 12:00:31 +00:00
/**
* Wizard menüye eklensin mi. False ise menü kaydı hiç üretilmez; ListForm, permission ve
* dil anahtarları yine üretilir (SubGrid gibi başka bir ekranın parçası olarak kullanılır).
*/
createMenu: boolean
customComponentName: string
/** Menünün açtığı adres; Custom yolunda seçilen bileşenin rota yolu. */
menuUrl: string
2026-05-03 09:52:22 +00:00
isTenant: boolean
isBranch: boolean
isOrganizationUnit: boolean
allowAdding: boolean
allowUpdating: boolean
allowDeleting: boolean
confirmDelete: boolean
allowDetail: boolean
defaultLayout: ListViewLayoutType
grid: boolean
2026-07-16 08:19:17 +00:00
card: boolean
2026-05-03 09:52:22 +00:00
pivot: boolean
tree: boolean
chart: boolean
gantt: boolean
scheduler: boolean
2026-07-16 14:01:18 +00:00
todo: boolean
2026-05-03 09:52:22 +00:00
menuEn: string
menuTr: string
titleEn: string
titleTr: string
descEn: string
descTr: string
menuParentEn: string
menuParentTr: string
2026-05-03 09:52:22 +00:00
permissionGroupName: string
/** Izin grubunun Ingilizce gorunen adi; grup adiyla ayni olan dil anahtarina yazilir. */
permissionGroupEn: string
/** Izin grubunun Turkce gorunen adi. */
permissionGroupTr: string
2026-05-03 09:52:22 +00:00
menuParentCode: string
menuParentModuleId?: string
2026-06-06 15:22:14 +00:00
menuParentIcon?: string
2026-05-03 09:52:22 +00:00
menuIcon: string
dataSourceCode: string
dataSourceConnectionString: string
selectCommandType: SelectCommandTypeEnum
selectCommand: string
keyFieldName: string
keyFieldDbSourceType: number
2026-07-28 18:36:37 +00:00
treeOptionDto: TreeOptionDto
ganttOptionDto: GanttOptionDto
schedulerOptionDto: SchedulerOptionDto
todoOptionDto: TodoOptionDto
workflowDto: WorkflowDto
2026-07-16 14:01:18 +00:00
2026-05-03 09:52:22 +00:00
groups?: ListFormWizardColumnGroupDto[]
subForms?: SubFormDto[]
widgets?: WidgetEditDto[]
2026-05-03 09:52:22 +00:00
}
/** Izin grubu secim listesi ogesi; gorunen adlar grup adiyla ayni olan dil anahtarindan gelir. */
export interface WizardPermissionGroupDto {
name: string
displayNameEn: string
displayNameTr: string
}
2026-05-03 09:52:22 +00:00
export interface WizardFileInfoDto {
fileName: string
wizardName: string
listFormCode: string
2026-05-03 12:24:46 +00:00
defaultLayout: string
menuIcon: string
2026-05-03 09:52:22 +00:00
createdAt: string
hasInsertedRecords: boolean
componentKind: WizardComponentKindEnum
customComponentName: string
menuUrl: string
/** Üst menü zinciri (kökten), menülerin dil anahtarları. */
menuPath: string[]
/** Doğrudan bağlı diğer wizard dosyaları: alt formlar / component bağımlılıkları. */
dependencies: string[]
2026-05-03 09:52:22 +00:00
}
2026-09-18 09:12:38 +00:00
export enum WizardRecordTypeEnum {
SeedFile = 0,
ListForm = 1,
ListFormField = 2,
Workflow = 3,
PermissionGrant = 4,
Permission = 5,
PermissionGroup = 6,
Menu = 7,
Module = 8,
DataSource = 9,
LanguageKey = 10,
CustomEndpoint = 20,
BackgroundWorker = 21,
IntranetWidget = 22,
Tenant = 23,
}
export enum WizardDeleteStatusEnum {
Deleted = 0,
Kept = 1,
NotFound = 2,
}
export enum WizardDeleteReasonEnum {
None = 0,
InUse = 1,
Redeploy = 2,
}
export interface WizardRecordRefDto {
recordType: WizardRecordTypeEnum
name: string
}
export interface WizardDeleteLogItemDto {
recordType: WizardRecordTypeEnum
name: string
status: WizardDeleteStatusEnum
reason: WizardDeleteReasonEnum
usedBy: WizardRecordRefDto[]
}
/** Silinen, korunan ve bulunamayan her kayıt tek tek listelenir. */
export interface WizardDeleteResultDto {
fileName: string
wizardName: string
items: WizardDeleteLogItemDto[]
}
2026-05-03 09:52:22 +00:00
export interface WizardInsertedRecordsDto {
languageKeys: string[]
permissionGroupNames: string[]
permissionNames: string[]
menuCodes: string[]
dataSourceCodes: string[]
2026-09-18 09:12:38 +00:00
moduleIds: string[]
2026-05-03 09:52:22 +00:00
}
export interface WizardSeedFileItemDto {
2026-07-17 20:23:43 +00:00
fieldName: string
2026-05-03 09:52:22 +00:00
editorType: string
editorOptions: string
editorScript: string
colSpan: number
isRequired: boolean
includeInEditingForm?: boolean
2026-05-03 09:52:22 +00:00
dbSourceType: number
turkishCaption?: string
englishCaption?: string
captionName?: string
lookupDataSourceType?: number
valueExpr?: string
displayExpr?: string
lookupQuery?: string
}
export interface WizardSeedFileGroupDto {
caption: string
colCount: number
items: WizardSeedFileItemDto[]
}
export interface WizardSeedFileWizardDto extends Omit<ListFormWizardDto, 'groups'> {
groups?: WizardSeedFileGroupDto[]
}
export interface WizardSeedFileDto {
wizard: WizardSeedFileWizardDto
/** Wizard'ın ürettiği ekranın ListForm sözleşmesi; tasarımcıdaki değişiklikler buraya yazılır. */
listForm?: GridOptionsEditDto
/** Ekranın alanları; ListForm detayındaki alan tanımlarıyla aynı sözleşme. */
fields?: ColumnFormatEditDto[]
2026-05-03 09:52:22 +00:00
isDeletedField: boolean
isCreatedField: boolean
insertedRecords: WizardInsertedRecordsDto
}
/** Import edilen dosyanin hedefteki karsiligiyla karsilastirma sonucu; backend enum'u ile birebir. */
export enum WizardImportEntryStatusEnum {
New = 0,
Identical = 1,
Conflict = 2,
}
export interface WizardImportEntryDto {
/** Kapsam klasorune goreli yol, ornegin `crud/Orders.json`. */
path: string
folder: string
fileName: string
status: WizardImportEntryStatusEnum
incomingSize: number
existingSize: number
/** Yalnizca Conflict durumunda doludur. */
incomingContent?: string
/** Yalnizca Conflict durumunda doludur. */
existingContent?: string
}
export interface WizardImportAnalysisDto {
importId: string
/** Dosyalarin yazilacagi kapsam klasoru (`host` ya da `tenants/{tenantId}`). */
scopeFolder: string
entries: WizardImportEntryDto[]
warnings: string[]
/** Zip icerigi ile hedef ortam karsilastirildiginda bulunan tutarsizliklar. */
issues: WizardImportIssueDto[]
/** Engelleyici bulgu varsa import baslatilamaz; sunucu da yazma ucunu reddeder. */
hasBlockingIssues: boolean
/** Sema islerinin (script, kolon ekleme, tablo tasarimcisi) hedef aldigi veri kaynagi. */
dataSourceCode: string
}
/** Import analizinde bulunan bir tutarsizligin agirligi; backend enum'u ile birebir. */
export enum WizardImportIssueSeverityEnum {
Error = 0,
Warning = 1,
}
/** Import analizinde bulunan tek bir tutarsizlik. */
export interface WizardImportIssueDto {
severity: WizardImportIssueSeverityEnum
/** Bulgunun ilgili oldugu kapsam-goreli yol; genel bir bulguda bostur. */
path?: string
message: string
/**
* Bulgunun karsiligi olan SQL cumlesi. Eksik kolon uyarilarinda kapanista calistirilacak
* cumledir; engelleyici bulgularda kullanicinin elle uygulayacagi cumledir.
*/
statement?: string
/** Bulgu bir tablo semasiyla ilgiliyse tablonun adi; tablo tasarimcisi bununla acilir. */
tableName?: string
/** Tablo semasi; script'te sema oneki yoksa bostur. */
schemaName?: string
/** Tablo hedefte hic yoksa true; tasarimci olusturma modunda acilir. */
tableMissing?: boolean
/**
* Bulgu arsivin kendi eksikliginden/bozulmasindan kaynaklaniyorsa true. Hedef ortamda
* giderilemez; tek cozum kaynak ortamda export'u tekrarlamaktir.
*/
requiresReexport?: boolean
}
/**
* Import kapanisinin sonucu. Yazilan dosyalar bagimlilik sirasiyla veritabanina uygulanir:
* once SQL nesneleri, sonra CRUD tanimlari, en son veri satirlari.
*/
export interface WizardImportCompleteResultDto {
/** Calistirilan SQL nesne scriptleri; veri satirlarindan once uygulanir. */
appliedSql: WizardImportStepResultDto[]
/**
* Hedefte eksik olup eklenen kolonlar. Script'in CREATE blogu var olan bir tabloda calismadigi
* icin yeni kolonlar buradan gelir; var olan bir kolon degistirilmez, hicbir kolon dusurulmez.
*/
appliedSchema: WizardImportStepResultDto[]
/** Veritabanina uygulanan CRUD endpoint dosyalari. */
appliedCrud: WizardImportStepResultDto[]
appliedData: WizardImportSeedApplyResultDto[]
/** Kurulan ekran tanimlari; import bitince ekran calisir, migrate beklemez. */
appliedWizards: WizardImportStepResultDto[]
}
/** Import kapanisindaki tek bir adimin sonucu (SQL scripti ya da CRUD dosyasi). */
export interface WizardImportStepResultDto {
path: string
/** Adim basariliysa yapilan isi ozetleyen kisa metin. */
detail?: string
/** Adim basarisizsa nedeni. */
error?: string
}
/** Tek bir veri seed dosyasinin veritabanina uygulanma sonucu. */
export interface WizardImportSeedApplyResultDto {
/** Kapsam klasorune goreli yol. */
path: string
/** Veritabanina eklenen satir sayisi. */
insertedRowCount: number
/** Zaten var oldugu icin dosyadaki degerlerle guncellenen satir sayisi. */
updatedRowCount: number
/** Anahtari olmadigi icin guncellenemeyen, dokunulmayan satir sayisi. */
skippedRowCount: number
/** Dosya uygulanamadiysa nedeni; basarili durumda bostur. */
error?: string
}
export interface WizardImportApplyResultDto {
path: string
overwritten: boolean
size: number
}
/** Export zip'ine girecek tek bir seed dosyasi. */
export interface WizardExportEntryDto {
/** Kapsam klasorune goreli yol, ornegin `sql/object/Prj_T_Task.sql`. */
path: string
/** Dosyanin arsive neden girdigi (wizard'in kendisi, alt form, lookup, veri...). */
reason: string
}
/** Indirmeden once gosterilen export onizlemesi. */
export interface WizardExportAnalysisDto {
fileName: string
archiveName: string
scopeFolder: string
entries: WizardExportEntryDto[]
/** Bagimlilik olarak bulunan ama diskte karsiligi olmayan dosyalar. */
warnings: string[]
}