cs-element
Version:
Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support
215 lines • 6.61 kB
TypeScript
/**
* Интерфейсы для системы миграций 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<string, any>;
transactionId?: string;
}
/**
* Результат выполнения миграции
*/
export interface MigrationResult {
success: boolean;
error?: string;
message?: string;
processedCount?: number;
executionTime?: number;
metadata?: Record<string, any>;
}
/**
* Интерфейс миграции
*/
export interface IMigration {
id: string;
version: string;
description: string;
type: MigrationType;
dependencies: string[];
up(context: MigrationContext): Promise<MigrationResult>;
down(context: MigrationContext): Promise<MigrationResult>;
canApply(context: MigrationContext): Promise<boolean>;
canRollback(context: MigrationContext): Promise<boolean>;
validate(context: MigrationContext): Promise<boolean>;
}
/**
* Запись о выполненной миграции
*/
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<string, string>;
transformers?: Record<string, (value: any) => any>;
defaultValues?: Record<string, any>;
fieldsToRemove?: string[];
}
/**
* Конфигурация миграции данных
*/
export interface DataMigrationConfig {
selector?: (element: ICSElement) => boolean;
transformer: (element: ICSElement) => Promise<ICSElement>;
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<MigrationRecord[]>;
getCurrentVersion(): Promise<string>;
createPlan(targetVersion: string): Promise<MigrationPlan>;
migrate(targetVersion?: string): Promise<MigrationResult[]>;
rollback(targetVersion?: string): Promise<MigrationResult[]>;
checkStatus(): Promise<{
currentVersion: string;
pendingMigrations: string[];
lastMigration?: MigrationRecord;
}>;
createSchemaMigration(config: SchemaMigrationConfig): IMigration;
createDataMigration(config: DataMigrationConfig & {
id: string;
version: string;
description: string;
}): IMigration;
validateIntegrity(): Promise<boolean>;
reset(): Promise<void>;
}
/**
* Фабрика миграций
*/
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<MigrationResult>;
down: (context: MigrationContext) => Promise<MigrationResult>;
canApply?: (context: MigrationContext) => Promise<boolean>;
canRollback?: (context: MigrationContext) => Promise<boolean>;
validate?: (context: MigrationContext) => Promise<boolean>;
}): IMigration;
}
/**
* Хранилище миграций
*/
export interface IMigrationStorage {
saveRecord(record: MigrationRecord): Promise<void>;
getRecord(migrationId: string): Promise<MigrationRecord | undefined>;
getAllRecords(): Promise<MigrationRecord[]>;
getRecordsByStatus(status: MigrationStatus): Promise<MigrationRecord[]>;
updateStatus(migrationId: string, status: MigrationStatus): Promise<void>;
deleteRecord(migrationId: string): Promise<void>;
clear(): Promise<void>;
}
/**
* События миграций
*/
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