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