/// <inheritdoc /> public async Task <ProcessResponse> Execute(ProcessRequest <TState> request, ProcessMiddlewareDelegate next, CancellationToken token) { var response = await next(); var correlationId = request.State is IIntegrationEvent @event ? @event.CorrelationId : Unified.NewCode(); var processMessages = response.ProcessMessages .Select(m => { m.Message.CorrelationId = correlationId; EnrichWithUserId(m.Message, options.ActorId); EnrichWithRoles(m.Message, "[]"); var principal = new Principal { IdentityId = options.ActorId, UserId = options.ActorId, IsProcessManager = true, }; m.Message.Actor = principal.AsActor(); if (m.Message is Command cmd) { cmd.Principal = principal; } return(new ProcessMessage(m.Message, m.IsPublished)); }) .ToArray(); return(new ProcessResponse(response.Id, processMessages, response.IsPersisted)); }
/// <summary> /// Creates integration event from command context. /// </summary> /// <typeparam name="TIntegrationEvent">Type of the integration event.</typeparam> /// <returns>Integration event.</returns> public TIntegrationEvent CreateIntegrationEvent <TIntegrationEvent>() where TIntegrationEvent : IntegrationEvent, new() { var @event = new TIntegrationEvent { Id = Unified.NewCode(), AggregateRootId = AggregateRootId, CorrelationId = CorrelationId, Actor = Principal.AsActor(), Version = ExpectedVersion, SourceId = SourceId }; foreach (var pair in Metadata) { @event.Metadata[pair.Key] = pair.Value; } return(@event); }