using SwDAL.DTO.Tag; using SwDAL.Enums; namespace SwDAL.DTO.ChangeRequest; public class ChangeRequestDTO { public int ChangeRequestId { get; set; } public string Title { get; set; } = string.Empty; public string? Description { get; set; } public string? Sql { get; set; } public int ClientDatabaseId { get; set; } public string ClientDatabaseCode { get; set; } public string ClientDatabaseName { get; set; } public ChangeRequestStatus CrStatus { get; set; } = ChangeRequestStatus.Draft; /// Background-execution state (tracker §37/§43) — NotQueued for every ordinary /// synchronous Execute() call; only Queued/Running/Done/Failed once QueueExecutionAsync has /// been used. Independent of CrStatus. public ChangeRequestExecutionStatus ExecutionStatus { get; set; } = ChangeRequestExecutionStatus.NotQueued; public ChangeRequestQueryType QueryType { get; set; } = ChangeRequestQueryType.Other; public ChangeRequestCategory Category { get; set; } = ChangeRequestCategory.Feature; public string? TicketReference { get; set; } public string? RollbackPlan { get; set; } public string? ImpactAnalysis { get; set; } /// Only meaningful when Category == ClientProvisioning: how the physical database /// should be created. Null for every other category. public ProvisioningMode? ProvisioningMode { get; set; } /// ProvisioningMode.FromSnapshot only — which template backup to restore from. public string? TemplateBackupRef { get; set; } /// ProvisioningMode.FromScripts only — the UpgradePackage containing every /// foundational Approved script for this client's DbModelId, applied to the freshly-created /// empty database via the existing, unmodified ProvisioningBLL.ProvisionClientDatabase. public int? BaselineUpgradePackageId { get; set; } public int ReviewerById { get; set; } = -1; public DateTime? ReviewedOn { get; set; } public string? ReviewComment { get; set; } public int ExecutedById { get; set; } = -1; public DateTime? ExecutedOn { get; set; } /// Tracker §37 Decision 2 — real-time DDL execution progress, populated by /// ChangeRequestBLL.GetById ONLY for Category == ClientProvisioning (a live query against /// SW.LSWDDLEXECUTION, not a stored column). Null for every other CR category/query path. public int? ScriptsDone { get; set; } public int? ScriptsTotal { get; set; } public int TenantId { get; set; } public int Version { get; set; } public byte Status { get; set; } public int CreatedById { get; set; } public DateTime CreatedOn { get; set; } public int ModifiedById { get; set; } public DateTime ModifiedOn { get; set; } public List Timeline { get; set; } = []; public List Tags { get; set; } = []; } public class ChangeRequestTimelineDTO { public int TimelineId { get; set; } public int ChangeRequestId { get; set; } public CrTimelineEventType EventType { get; set; } public string? EventComment { get; set; } public int PerformedById { get; set; } public DateTime PerformedOn { get; set; } } public class ChangeRequestListDTO { public int ChangeRequestId { get; set; } public string Title { get; set; } = string.Empty; public ChangeRequestStatus CrStatus { get; set; } public ChangeRequestQueryType QueryType { get; set; } public ChangeRequestCategory Category { get; set; } public string? TicketReference { get; set; } public int ClientDatabaseId { get; set; } public DateTime CreatedOn { get; set; } } public class ChangeRequestListCriteria { public ChangeRequestStatus? CrStatus { get; set; } public ChangeRequestQueryType? QueryType { get; set; } public ChangeRequestCategory? Category { get; set; } public int? ClientDatabaseId { get; set; } public string? SearchText { get; set; } }