using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace Svrnty.CQRS.Events.Abstractions.Subscriptions; /// /// Manages the lifecycle of persistent subscriptions. /// public interface ISubscriptionManager { /// /// Create a new subscription. /// Task CreateSubscriptionAsync( string subscriberId, string correlationId, HashSet? eventTypes = null, HashSet? terminalEventTypes = null, DeliveryMode deliveryMode = DeliveryMode.Immediate, DateTimeOffset? expiresAt = null, string? dataSourceId = null, CancellationToken cancellationToken = default); /// /// Get a subscription by ID. /// Task GetSubscriptionAsync( string subscriptionId, CancellationToken cancellationToken = default); /// /// Get all subscriptions for a subscriber. /// Task> GetSubscriberSubscriptionsAsync( string subscriberId, CancellationToken cancellationToken = default); /// /// Get all active subscriptions for a correlation ID. /// Task> GetActiveSubscriptionsByCorrelationAsync( string correlationId, CancellationToken cancellationToken = default); /// /// Mark an event as delivered to a subscription. /// Updates the LastDeliveredSequence and persists the change. /// Task MarkEventDeliveredAsync( string subscriptionId, long sequence, CancellationToken cancellationToken = default); /// /// Complete a subscription (terminal event received). /// Task CompleteSubscriptionAsync( string subscriptionId, CancellationToken cancellationToken = default); /// /// Cancel a subscription (user-initiated). /// Task CancelSubscriptionAsync( string subscriptionId, CancellationToken cancellationToken = default); /// /// Pause a subscription (temporarily stop event delivery). /// Task PauseSubscriptionAsync( string subscriptionId, CancellationToken cancellationToken = default); /// /// Resume a paused subscription. /// Task ResumeSubscriptionAsync( string subscriptionId, CancellationToken cancellationToken = default); /// /// Associate a subscription with a connection ID (client connected). /// Task AttachConnectionAsync( string subscriptionId, string connectionId, CancellationToken cancellationToken = default); /// /// Disassociate a subscription from a connection ID (client disconnected). /// Task DetachConnectionAsync( string subscriptionId, CancellationToken cancellationToken = default); /// /// Clean up expired subscriptions. /// Task CleanupExpiredSubscriptionsAsync( CancellationToken cancellationToken = default); }