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);
}