using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace FrameworkBLL.Promotion { public class PromotionExchangePendingPackageDTO { public int PackageId { get; set; } public string OriginEnvironmentCode { get; set; } = string.Empty; public int PackageSizeBytes { get; set; } public DateTime UploadedOn { get; set; } } // Thin HTTP wrapper around the separate PromotionExchange module's own endpoints (a different // process/host entirely -- Tier 2 store-and-forward, see the plan's Transport section). Never // throws on a transport failure -- Exchange reachability is inherently best-effort (that's the // whole point of also having Tier 1 manual carry), so every method returns null/empty on error // rather than propagating, matching JobEngineScheduleClient's established "non-fatal by design" // convention for this kind of optional cross-module HTTP call. public interface IPromotionExchangeClient { Task UploadAsync(byte[] packageBytes, string destinationEnvironmentCode, CancellationToken ct); Task> ListPendingAsync(CancellationToken ct); Task DownloadAsync(int packageId, CancellationToken ct); } }