public async Task <ResponseResult> Handle(CriarPagamentoCommand request, CancellationToken cancellationToken) { request.Validate(); if (request.Notifications.Any()) { _response.AddNotifications(request.Notifications); return(_response); } var pedido = await _unitOfWork.Pedidos.ObterPorIdAsync(request.PedidoId); if (pedido == null) { _response.AddNotification(new Notification("pagamento", Erros.ErroPedido_NaoEncontrado)); return(_response); } if (pedido.Status != PedidoStatus.AguardandoPagamento) { _response.AddNotification(new Notification("pagamento", Erros.ErroPedido_PedidoNaoEstaAguardandoPgto)); return(_response); } var pagamento = PedidoPagamento.Criar( pedido, request.NumeroCartao, request.VencimentoCartao, request.CodigoSeguranca); if (!pagamento.ValidarCartao()) { _response.AddNotification(new Notification("pagamento", Erros.ErroPagamento_CartaoInvalido)); return(_response); } /******************/ /******************/ /* MOCK - Gateway de Pagamento*/ var token = await _gatewayPagamento.EnviarParaPagamento(pedido); pagamento.AdicionarToken(token); /******************/ pedido.AdicionarPagamento(pagamento); pedido.AtualizarStatus(PedidoStatus.ProcessandoPagamento); //publica o evento para o bus await _eventBus.Publish("pedido-atualizado-event", new PedidoAtualizadoEvent(pedido.Id, pedido.Status), pedido.Id.ToString()); await _unitOfWork.Pedidos.AdicionarPagamentoAsync(pagamento); await _unitOfWork.SaveAsync(); return(_response); }