105 lines
3.3 KiB
C#
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);
|
|
}
|