async Task <StreamFetcher <MongoDB.Events.Event> > CreateStreamFetcherForEventLog(ScopeId scopeId, CancellationToken cancellationToken) => new StreamFetcher <MongoDB.Events.Event>( await _streams.GetEventLog(scopeId, cancellationToken).ConfigureAwait(false), Builders <MongoDB.Events.Event> .Filter, _ => _.EventLogSequenceNumber, Builders <MongoDB.Events.Event> .Projection.Expression(_ => _eventConverter.ToRuntimeStreamEvent(_)), Builders <MongoDB.Events.Event> .Projection.Expression(_ => new Artifacts.Artifact(_.Metadata.TypeId, _.Metadata.TypeGeneration)));
/// <inheritdoc/> public async Task <CommittedEvents> FetchCommittedEvents(ScopeId scope, EventLogSequenceNumber from, int limit, CancellationToken cancellationToken) { try { var eventLog = await GetEventLog(scope, cancellationToken).ConfigureAwait(false); var events = await eventLog .Find(_eventFilter.Gte(e => e.EventLogSequenceNumber, from)) .Sort(Builders <MongoDB.Events.Event> .Sort.Ascending(_ => _.EventLogSequenceNumber)) .Limit(limit) .ToListAsync(cancellationToken).ConfigureAwait(false); return(new CommittedEvents( events.Select(_ => _eventConverter.ToRuntimeStreamEvent(_)) .Select(_ => _.Event) .ToList())); } catch (Exception ex) { throw new EventStoreUnavailable("Mongo wait queue is full", ex); } }