namespace GB5Shared.DTO.Promotion { // ============================================================ // PromotionIngestResultDTO — output of PromotionIngestNodeExecutor, passed // through GOP's Approval gate unchanged (ApprovalNodeExecutor is a // pass-through — GopExecutionPipeline itself pauses on NodeType="Approval" // before ever reaching an executor), then consumed by // PromotionImportNodeExecutor once approved. // ============================================================ public class PromotionIngestResultDTO { public PromotionBundleDTO Bundle { get; set; } = new(); /// Set when MPROMOTIONASSETLINK already has a row for this /// (OriginEnvironmentCode, EntityTypeCode, OriginEntityId) triple — Import /// performs an update against this ID instead of a fresh insert. public int? ExistingDestinationId { get; set; } public bool IsUpdateToExistingAsset => ExistingDestinationId.HasValue; public PromotionValidationResultDTO Validation { get; set; } = new(); } }