// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace Squidex.Infrastructure.EventSourcing { public interface IEventStore { Task> QueryLatestAsync(string streamName, int take = int.MaxValue); Task> QueryAsync(string streamName, long streamPosition = 0); IAsyncEnumerable QueryAllReverseAsync(string? streamFilter = null, string? position = null, long take = long.MaxValue, CancellationToken ct = default); IAsyncEnumerable QueryAllAsync(string? streamFilter = null, string? position = null, long take = long.MaxValue, CancellationToken ct = default); Task AppendAsync(Guid commitId, string streamName, ICollection events); Task AppendAsync(Guid commitId, string streamName, long expectedVersion, ICollection events); Task DeleteStreamAsync(string streamName); IEventSubscription CreateSubscription(IEventSubscriber subscriber, string? streamFilter = null, string? position = null); async Task AppendUnsafeAsync(IEnumerable commits) { foreach (var commit in commits) { await AppendAsync(commit.Id, commit.StreamName, commit.Offset, commit.Events); } } async Task>> QueryManyAsync(IEnumerable streamNames) { var result = new Dictionary>(); foreach (var streamName in streamNames) { result[streamName] = await QueryAsync(streamName, 0); } return result; } } }