1
0
voyager-api/ScrapperAPI/Interfaces/IQueueRepository.cs

40 lines
1.8 KiB
C#

using ScrapperAPI.Dtos;
namespace ScrapperAPI.Interfaces;
public interface IQueueRepository
{
Task<int> EnqueueAsync(int sessionId, string url, CancellationToken ct);
Task<QueueCounts> GetCountsAsync(int sessionId, CancellationToken ct);
/// <summary>
/// Pega 1 item pendente e faz "lease" atomico (Processing) para um worker.
/// Retorna null se não houver itens disponíveis.
/// </summary>
Task<QueueItem?> TryDequeueAsync(int sessionId, string workerId, TimeSpan leaseFor, CancellationToken ct);
/// <summary>
/// Pega um lote de itens pendentes e faz "lease" atomico (Processing) para um worker.
/// Itens com lease expirado também podem ser reprocessados.
/// </summary>
Task<IReadOnlyList<QueueItem>> LeaseBatchAsync(int sessionId, string workerId, int take, TimeSpan leaseFor, CancellationToken ct);
/// <summary>
/// Renova o lease de um item (se ele ainda pertence ao mesmo worker).
/// </summary>
Task<bool> RenewLeaseAsync(int queueId, string workerId, TimeSpan leaseFor, CancellationToken ct);
Task<bool> MarkDoneAsync(int queueId, string workerId, CancellationToken ct);
Task<bool> MarkFailedAsync(int queueId, string workerId, string error, CancellationToken ct);
// Opcional: resetar stuck processing (se quiser depois)
Task<int> RequeueStuckProcessingAsync(int sessionId, TimeSpan olderThan, CancellationToken ct);
Task<bool> RemovePendingByIdAsync(int sessionId, int queueId, CancellationToken ct);
Task<int> RemovePendingByUrlAsync(int sessionId, string url, CancellationToken ct);
/// <summary>
/// Lista IDs da fila por sessão e status (ex.: status=2 -> DONE).
/// </summary>
Task<IReadOnlyList<int>> ListQueueIdsAsync(int sessionId, IReadOnlyCollection<short>? statuses, CancellationToken ct);
}