public async Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next) { try { var result = await next(); await _eventBus.Publish(result); return(result); } catch (Exception e) { await _eventBus.Publish(CommandResultEvent.CreateAppCommandResult(request, StatusCode.Error, _dateTimeProvider.GetUtcNow(), e.Message)); throw; } }
public async Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next) { var context = new ValidationContext <TRequest>(request); var failures = _validators .Select(v => v.Validate(context)) .SelectMany(result => result.Errors) .Where(f => f != null) .ToList(); if (failures.Any() && request is ICommand command) { await _eventBus.Publish(CommandResultEvent.CreateAppCommandResult(command, StatusCode.ValidationError, _dateTimeProvider.GetUtcNow(), JsonSerializer.Serialize(failures))); } if (failures.Any()) { throw new ValidationException(failures); } return(await next()); }