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

105 lines
3.3 KiB
C#

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