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

99 lines
3.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace Svrnty.CQRS.Events.Abstractions.Subscriptions;
/// <summary>
/// Storage abstraction for persisting and retrieving persistent subscriptions.
/// </summary>
public interface IPersistentSubscriptionStore
{
/// <summary>
/// Create a new persistent subscription.
/// </summary>
/// <param name="subscription">The subscription to create.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>The created subscription.</returns>
Task<PersistentSubscription> CreateAsync(
PersistentSubscription subscription,
CancellationToken cancellationToken = default);
/// <summary>
/// Get a subscription by its ID.
/// </summary>
/// <param name="id">The subscription ID.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>The subscription, or null if not found.</returns>
Task<PersistentSubscription?> GetByIdAsync(
string id,
CancellationToken cancellationToken = default);
/// <summary>
/// Get all subscriptions for a specific subscriber.
/// </summary>
/// <param name="subscriberId">The subscriber ID.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>List of subscriptions.</returns>
Task<IReadOnlyList<PersistentSubscription>> GetBySubscriberIdAsync(
string subscriberId,
CancellationToken cancellationToken = default);
/// <summary>
/// Get all subscriptions for a specific correlation ID.
/// </summary>
/// <param name="correlationId">The correlation ID.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>List of subscriptions.</returns>
Task<IReadOnlyList<PersistentSubscription>> GetByCorrelationIdAsync(
string correlationId,
CancellationToken cancellationToken = default);
/// <summary>
/// Get all subscriptions with a specific status.
/// </summary>
/// <param name="status">The subscription status.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>List of subscriptions.</returns>
Task<IReadOnlyList<PersistentSubscription>> GetByStatusAsync(
SubscriptionStatus status,
CancellationToken cancellationToken = default);
/// <summary>
/// Get all subscriptions for a specific connection ID.
/// </summary>
/// <param name="connectionId">The connection ID.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>List of subscriptions.</returns>
Task<IReadOnlyList<PersistentSubscription>> GetByConnectionIdAsync(
string connectionId,
CancellationToken cancellationToken = default);
/// <summary>
/// Update an existing subscription.
/// </summary>
/// <param name="subscription">The subscription to update.</param>
/// <param name="cancellationToken">Cancellation token.</param>
Task UpdateAsync(
PersistentSubscription subscription,
CancellationToken cancellationToken = default);
/// <summary>
/// Delete a subscription.
/// </summary>
/// <param name="id">The subscription ID to delete.</param>
/// <param name="cancellationToken">Cancellation token.</param>
Task DeleteAsync(
string id,
CancellationToken cancellationToken = default);
/// <summary>
/// Get all expired subscriptions.
/// </summary>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>List of expired subscriptions.</returns>
Task<IReadOnlyList<PersistentSubscription>> GetExpiredSubscriptionsAsync(
CancellationToken cancellationToken = default);
}