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);
        }