using GB5Shared.ListQuery; namespace SwDAL.DTO.MetadataSync; // ── Main entity DTO ──────────────────────────────────────────────────────── public class MetadataSyncDTO { public int MetaVersionId { get; set; } public int DbModelId { get; set; } public string? DbModelName { get; set; } // read-only JOIN public string VersionLabel { get; set; } = string.Empty; public byte MetaStatus { get; set; } // 0=Draft, 1=Testing, 2=Released, 3=Deprecated public string? SnapshotJson { get; set; } public string? Description { get; set; } // Standard M-table fields public short Version { get; set; } public byte Status { get; set; } = 1; public short SortOrder { get; set; } = 9999; public int CreatedById { get; set; } public DateTime CreatedOn { get; set; } public int ModifiedById { get; set; } public DateTime ModifiedOn { get; set; } public byte SourceType { get; set; } = 5; public int TenantId { get; set; } } // ── MetadataChange detail DTO ────────────────────────────────────────────── public class MetadataChangeDTO { public int MetaVersionId { get; set; } public string TableName { get; set; } = string.Empty; public string ColumnName { get; set; } = string.Empty; public string ChangeType { get; set; } = string.Empty; public string? OldValue { get; set; } public string? NewValue { get; set; } public int TenantId { get; set; } } // ── Composite response ───────────────────────────────────────────────────── public class MetadataVersionWithChangesDTO { public MetadataSyncDTO Version { get; set; } = null!; public IEnumerable Changes { get; set; } = Enumerable.Empty(); } // ── Picklist DTO ─────────────────────────────────────────────────────────── public class MetadataSyncPickListDTO { public int MetaVersionId { get; set; } public string VersionLabel { get; set; } = string.Empty; } // ── List infrastructure ──────────────────────────────────────────────────── public sealed class MetadataSyncListCriteria : ICriteria { [CriteriaField("ouid")] public int? OUId { get; set; } [CriteriaField("dbmodelid")] public int? DbModelId { get; set; } [CriteriaField("metastatus")] public byte? MetaStatus { get; set; } [CriteriaField("searchtext")] public string? SearchText { get; set; } [CriteriaField("sortby")] public string? SortBy { get; set; } [CriteriaField("sortdesc")] public bool SortDesc { get; set; } [CriteriaField("pagesize")] public int PageSize { get; set; } = 100; [CriteriaField("pageoffset")] public int PageOffset { get; set; } = 0; } public sealed record MetadataSyncListQuery(MetadataSyncListCriteria Criteria) : IListQuery; public sealed class MetadataSyncListDTO { public int MetaVersionId { get; set; } public string VersionLabel { get; set; } = string.Empty; public byte MetaStatus { get; set; } public int DbModelId { get; set; } public int TotalCount { get; set; } }