예제 #1
0
        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;
            }
        }
예제 #2
0
        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());
        }