/** * Интерфейсы для системы миграций CSElement * Поддерживает версионирование схем и автоматическое применение миграций */ import { ICSElement } from './interfaces'; import { TypedElementSchema } from './typed-elements-interfaces'; /** * Направление миграции */ export type MigrationDirection = 'up' | 'down'; /** * Статус миграции */ export type MigrationStatus = 'pending' | 'running' | 'completed' | 'failed' | 'rolled_back'; /** * Тип миграции */ export type MigrationType = 'schema' | 'data' | 'index' | 'constraint' | 'custom'; /** * Контекст выполнения миграции */ export interface MigrationContext { fromVersion: string; toVersion: string; direction: MigrationDirection; schemaName?: string; options?: Record; transactionId?: string; } /** * Результат выполнения миграции */ export interface MigrationResult { success: boolean; error?: string; message?: string; processedCount?: number; executionTime?: number; metadata?: Record; } /** * Интерфейс миграции */ export interface IMigration { id: string; version: string; description: string; type: MigrationType; dependencies: string[]; up(context: MigrationContext): Promise; down(context: MigrationContext): Promise; canApply(context: MigrationContext): Promise; canRollback(context: MigrationContext): Promise; validate(context: MigrationContext): Promise; } /** * Запись о выполненной миграции */ export interface MigrationRecord { migrationId: string; version: string; status: MigrationStatus; startedAt: Date; completedAt?: Date; executionTime?: number; result?: MigrationResult; context: MigrationContext; contentHash?: string; } /** * План миграции */ export interface MigrationPlan { migrations: IMigration[]; executionOrder: string[]; targetVersion: string; currentVersion: string; direction: MigrationDirection; estimatedTime?: number; warnings?: string[]; } /** * Конфигурация миграции схемы */ export interface SchemaMigrationConfig { schemaName: string; oldSchema: TypedElementSchema; newSchema: TypedElementSchema; fieldMapping?: Record; transformers?: Record any>; defaultValues?: Record; fieldsToRemove?: string[]; } /** * Конфигурация миграции данных */ export interface DataMigrationConfig { selector?: (element: ICSElement) => boolean; transformer: (element: ICSElement) => Promise; batchSize?: number; concurrency?: number; onError?: (error: Error, element: ICSElement) => 'skip' | 'retry' | 'abort'; } /** * Интерфейс менеджера миграций */ export interface IMigrationManager { registerMigration(migration: IMigration): void; getMigrations(): IMigration[]; getMigration(id: string): IMigration | undefined; getHistory(): Promise; getCurrentVersion(): Promise; createPlan(targetVersion: string): Promise; migrate(targetVersion?: string): Promise; rollback(targetVersion?: string): Promise; checkStatus(): Promise<{ currentVersion: string; pendingMigrations: string[]; lastMigration?: MigrationRecord; }>; createSchemaMigration(config: SchemaMigrationConfig): IMigration; createDataMigration(config: DataMigrationConfig & { id: string; version: string; description: string; }): IMigration; validateIntegrity(): Promise; reset(): Promise; } /** * Фабрика миграций */ export interface IMigrationFactory { createSchemaMigration(config: SchemaMigrationConfig & { id: string; version: string; description: string; }): IMigration; createDataMigration(config: DataMigrationConfig & { id: string; version: string; description: string; }): IMigration; createCustomMigration(config: { id: string; version: string; description: string; dependencies?: string[]; up: (context: MigrationContext) => Promise; down: (context: MigrationContext) => Promise; canApply?: (context: MigrationContext) => Promise; canRollback?: (context: MigrationContext) => Promise; validate?: (context: MigrationContext) => Promise; }): IMigration; } /** * Хранилище миграций */ export interface IMigrationStorage { saveRecord(record: MigrationRecord): Promise; getRecord(migrationId: string): Promise; getAllRecords(): Promise; getRecordsByStatus(status: MigrationStatus): Promise; updateStatus(migrationId: string, status: MigrationStatus): Promise; deleteRecord(migrationId: string): Promise; clear(): Promise; } /** * События миграций */ export interface MigrationEvents { 'migration:start': { migration: IMigration; context: MigrationContext; }; 'migration:complete': { migration: IMigration; result: MigrationResult; }; 'migration:error': { migration: IMigration; error: Error; }; 'migration:progress': { migration: IMigration; progress: number; message?: string; }; 'plan:start': { plan: MigrationPlan; }; 'plan:complete': { plan: MigrationPlan; results: MigrationResult[]; }; 'migration:warning': { migration: IMigration; warning: string; }; } /** * Утилиты для версий */ export interface IVersionUtils { compare(version1: string, version2: string): number; isValid(version: string): boolean; getNext(version: string, type?: 'major' | 'minor' | 'patch'): string; parse(version: string): { major: number; minor: number; patch: number; }; format(major: number, minor: number, patch: number): string; } //# sourceMappingURL=migration-interfaces.d.ts.map