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; }
}