using Data.SeaHavenIndustries; namespace SeaHaven.DataServices.Interfaces { public interface IUpliftDataService { Task<(int TotalCount, IReadOnlyList Items)> GetPagedAsync( string? status, int? tier, int page, int pageSize, CancellationToken cancellationToken); Task> GetForDispatchAsync(int dispatchId, CancellationToken cancellationToken); Task> GetForVendorDispatchAsync(int dispatchId, CancellationToken cancellationToken); Task GetByIdAsync(int id, CancellationToken cancellationToken); Task GetByIdAndDispatchAsync(int requestId, int dispatchId, CancellationToken cancellationToken); // SH-101: server-side join of an uplift request with its linked evidence document. // Returns null when the request, the linked evidence, or the dispatch linkage is absent. Task GetEvidenceForInternalDownloadAsync(int upliftRequestId, CancellationToken cancellationToken); Task HasPendingAsync(int dispatchId, CancellationToken cancellationToken); // SH-101: active = Pending or ChangesRequested (the only states that block a new request). Task HasActiveAsync(int dispatchId, CancellationToken cancellationToken); Task GetActiveRequestAsync(int dispatchId, CancellationToken cancellationToken); Task GetByRequestKeyAsync(int dispatchId, string requestKey, CancellationToken cancellationToken); Task> GetDueForExpiryAsync(DateTime utcNow, int count, CancellationToken cancellationToken); Task> GetDueForInitialNotificationAsync(int count, CancellationToken cancellationToken); Task> GetDueForEscalationAsync(int count, CancellationToken cancellationToken); Task StageAsync(DispatchUpliftRequest request, CancellationToken cancellationToken); Task SaveChangesAsync(CancellationToken cancellationToken); } }