using ScrapperAPI.Dtos; namespace ScrapperAPI.Interfaces; public interface IQueueRepository { Task EnqueueAsync(int sessionId, string url, CancellationToken ct); Task GetCountsAsync(int sessionId, CancellationToken ct); /// /// Pega 1 item pendente e muda para Processing atomica/seguramente. /// Retorna null se não houver itens pendentes. /// Task TryDequeueAsync(int sessionId, CancellationToken ct); Task MarkDoneAsync(int queueId, CancellationToken ct); Task MarkFailedAsync(int queueId, string error, CancellationToken ct); // Opcional: resetar stuck processing (se quiser depois) Task RequeueStuckProcessingAsync(int sessionId, TimeSpan olderThan, CancellationToken ct); Task RemovePendingByIdAsync(int sessionId, int queueId, CancellationToken ct); Task RemovePendingByUrlAsync(int sessionId, string url, CancellationToken ct); /// /// Lista IDs da fila por sessão e status (ex.: status=2 -> DONE). /// Task> ListQueueIdsAsync(int sessionId, IReadOnlyCollection? statuses, CancellationToken ct); }