99 lines
3.8 KiB
C#
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);
|
|
}
|