dotnet-cqrs/Svrnty.CQRS.Events.Abstractions/Subscriptions/ISubscriptionStore.cs

70 lines
3.1 KiB
C#

using System;
using Svrnty.CQRS.Events.Abstractions.Subscriptions;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Svrnty.CQRS.Events.Abstractions.Models;
namespace Svrnty.CQRS.Events.Abstractions.Subscriptions;
/// <summary>
/// Storage abstraction for persisting and retrieving event subscriptions.
/// Implementations can use any storage mechanism (SQL, NoSQL, in-memory, etc.).
/// </summary>
public interface ISubscriptionStore
{
/// <summary>
/// Create a new subscription.
/// </summary>
/// <param name="subscription">The subscription to create.</param>
/// <param name="cancellationToken">Cancellation token.</param>
Task CreateAsync(EventSubscription subscription, CancellationToken cancellationToken = default);
/// <summary>
/// Get a subscription by its ID.
/// </summary>
/// <param name="subscriptionId">The subscription ID.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>The subscription, or null if not found.</returns>
Task<EventSubscription?> GetByIdAsync(string subscriptionId, CancellationToken cancellationToken = default);
/// <summary>
/// Get all active subscriptions for a specific subscriber.
/// </summary>
/// <param name="subscriberId">The subscriber ID.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>List of subscriptions.</returns>
Task<List<EventSubscription>> GetBySubscriberIdAsync(string subscriberId, CancellationToken cancellationToken = default);
/// <summary>
/// Find all active subscriptions for a specific correlation ID.
/// Used to determine which subscribers should receive an event.
/// </summary>
/// <param name="correlationId">The correlation ID.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>List of active subscriptions.</returns>
Task<List<EventSubscription>> FindByCorrelationIdAsync(string correlationId, CancellationToken cancellationToken = default);
/// <summary>
/// Update an existing subscription (e.g., to update LastDeliveredSequence or Status).
/// </summary>
/// <param name="subscription">The subscription to update.</param>
/// <param name="cancellationToken">Cancellation token.</param>
Task UpdateAsync(EventSubscription subscription, CancellationToken cancellationToken = default);
/// <summary>
/// Delete a subscription.
/// </summary>
/// <param name="subscriptionId">The subscription ID to delete.</param>
/// <param name="cancellationToken">Cancellation token.</param>
Task DeleteAsync(string subscriptionId, CancellationToken cancellationToken = default);
/// <summary>
/// Delete expired or completed subscriptions older than the specified date.
/// </summary>
/// <param name="olderThan">Delete subscriptions completed/expired before this date.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>Number of subscriptions deleted.</returns>
Task<int> DeleteOldSubscriptionsAsync(DateTimeOffset olderThan, CancellationToken cancellationToken = default);
}