using Nexus.Api.Data; using Nexus.Api.Models; namespace Nexus.Api.Repositories; public interface ITaskRepository { Task> GetAllAsync(CancellationToken ct = default); ValueTask GetByIdAsync(Guid id, CancellationToken ct = default); Task> GetPendingApprovalAsync(CancellationToken ct = default); Task AddAsync(WorkTask task, CancellationToken ct = default); Task TryResetStaleInProgressToBacklogAsync(Guid id, DateTimeOffset staleBefore, DateTimeOffset updatedAt, CancellationToken ct = default); Task UpdateAsync(WorkTask task, CancellationToken ct = default); Task DeleteAsync(WorkTask task, CancellationToken ct = default); Task CountAsync(CancellationToken ct = default); Task CountByStateAsync(string state, CancellationToken ct = default); Task GetLastBlockedAsync(CancellationToken ct = default); Task GetBoardPageAsync( int doneLimit, DateTimeOffset? doneBeforeUpdatedAt, Guid? doneBeforeId, CancellationToken ct = default); Task GetBoardCardAsync( Guid id, CancellationToken ct = default); } public sealed record TaskBoardQueryPage( IReadOnlyList ActiveTasks, IReadOnlyList DoneTasks, bool HasMoreDone, TaskBoardRevisionPoint? Revision); public sealed record TaskBoardRevisionPoint( DateTimeOffset UpdatedAt, Guid Id);