import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm'; export enum AssetVersionChangeType { BASELINE = 'BASELINE', CREATED = 'CREATED', UPDATED = 'UPDATED', CONTEXT_CHANGED = 'CONTEXT_CHANGED', FUNCTION_CHANGED = 'FUNCTION_CHANGED', STATUS_CHANGED = 'STATUS_CHANGED', OPERATIONAL_STATUS_CHANGED = 'OPERATIONAL_STATUS_CHANGED', REGISTRY_UPDATED = 'REGISTRY_UPDATED', GEOMETRY_UPDATED = 'GEOMETRY_UPDATED', GEOMETRY_REMOVED = 'GEOMETRY_REMOVED', MEDIA_UPLOADED = 'MEDIA_UPLOADED', MEDIA_UPDATED = 'MEDIA_UPDATED', MEDIA_REMOVED = 'MEDIA_REMOVED', PROVENANCE_BASELINE = 'PROVENANCE_BASELINE', PROVENANCE_UPDATED = 'PROVENANCE_UPDATED', PROVENANCE_VERIFIED = 'PROVENANCE_VERIFIED', } @Entity({ name: 'asset_versions' }) @Index('idx_asset_versions_asset_number', ['assetId', 'versionNumber'], { unique: true, }) @Index('idx_asset_versions_occurred_at', ['occurredAt']) @Index('idx_asset_versions_change_type', ['changeType']) export class AssetVersion { @PrimaryGeneratedColumn('uuid') id!: string; @Column({ name: 'asset_id', type: 'uuid' }) assetId!: string; @Column({ name: 'version_number', type: 'integer' }) versionNumber!: number; @Column({ name: 'change_type', type: 'varchar', length: 32 }) changeType!: AssetVersionChangeType; @Column({ name: 'changed_fields', type: 'text', array: true, default: () => "'{}'" }) changedFields!: string[]; @Column({ type: 'jsonb' }) snapshot!: Record; @Column({ name: 'occurred_at', type: 'timestamptz', default: () => 'CURRENT_TIMESTAMP' }) occurredAt!: Date; @Column({ name: 'actor_user_id', type: 'uuid', nullable: true }) actorUserId!: string | null; @Column({ name: 'actor_username', type: 'varchar', length: 80, nullable: true }) actorUsername!: string | null; @Column({ type: 'varchar', length: 32 }) source!: string; @Column({ name: 'request_id', type: 'varchar', length: 128, nullable: true }) requestId!: string | null; }