/// <inheritdoc /> public async IAsyncEnumerable <TIdentity> AggregateIdsAsync <TIdentity, TAggregate>( AggregateConfiguration <TIdentity, TAggregate> configuration, [EnumeratorCancellation] CancellationToken cancellationToken = default ) where TAggregate : Aggregate <TIdentity, TAggregate> { var constructors = configuration.Constructors; foreach (var(eventType, _) in constructors) { await Task.Yield(); if (!_byEventType.TryGetValue(eventType, out var eventStream)) { continue; } foreach (var storedEvent in eventStream.Where(e => e.EventNumber == 0)) { var id = _streamNameResolver.ParseId(storedEvent.EventStreamId, configuration); yield return(id); } } }
ReadStreamEventsAsync <TIdentity, TAggregate>( AggregateConfiguration <TIdentity, TAggregate> configuration, long start, [EnumeratorCancellation] CancellationToken cancellationToken = default ) where TAggregate : Aggregate <TIdentity, TAggregate> { using var cursor = await _events .Find(e => e.Category == configuration.Name) .SortBy(e => e.Created) .ThenBy(e => e.Id) .Skip((int)start) .ToCursorAsync(cancellationToken); while (await cursor.MoveNextAsync(cancellationToken)) { foreach (var document in cursor.Current) { var id = _streamNameResolver.ParseId(document.Stream, configuration); var recordedEvent = new RecordedEvent <TIdentity, TAggregate>(document, _serializer, id); yield return(recordedEvent); } } }