70 lines
3.1 KiB
C#
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);
|
|
}
|