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 <EventLogSequenceNumber> Write(CommittedEvent @event, ConsentId consentId, ScopeId scope, CancellationToken cancellationToken) { _logger.WritingEventHorizonEvent( @event.EventLogSequenceNumber, @event.ExecutionContext.Tenant, @event.ExecutionContext.Microservice, scope); var writtenStreamPosition = await _eventsToStreamsWriter.Write( await _streams.GetEventLog(scope, cancellationToken).ConfigureAwait(false), _eventFilter, streamPosition => _eventConverter.ToEventLogEvent( new CommittedExternalEvent( streamPosition.Value, @event.Occurred, @event.EventSource, @event.ExecutionContext, @event.Type, false, @event.Content, @event.EventLogSequenceNumber, DateTimeOffset.UtcNow, consentId)), cancellationToken).ConfigureAwait(false); _streamWatcher.NotifyForEvent(scope, StreamId.EventLog, writtenStreamPosition); return(writtenStreamPosition.Value); }
/// <inheritdoc/> public async Task Write(CommittedEvent @event, ConsentId consentId, ScopeId scope, CancellationToken cancellationToken) { _logger.Trace( "Writing Event Horizon Event: {EventLogSequenceNumber} from Tenant: {Tenant} in Microservice {Microservice} to Scope: {Scope}", @event.EventLogSequenceNumber, @event.ExecutionContext.Tenant, @event.ExecutionContext.Microservice, scope); await _eventsToStreamsWriter.Write( await _streams.GetEventLog(scope, cancellationToken).ConfigureAwait(false), _eventFilter, streamPosition => _eventConverter.ToEventLogEvent( new CommittedExternalEvent( streamPosition.Value, @event.Occurred, @event.EventSource, @event.ExecutionContext, @event.Type, false, @event.Content, @event.EventLogSequenceNumber, DateTimeOffset.UtcNow, consentId)), cancellationToken).ConfigureAwait(false); }
Task <IMongoCollection <MongoDB.Events.Event> > GetEventLog(ScopeId scope, CancellationToken cancellationToken) => scope == ScopeId.Default ? Task.FromResult(_streams.DefaultEventLog) : _streams.GetEventLog(scope, cancellationToken);