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