40 lines
1.8 KiB
C#
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);
|
|
} |