public async Task <IActionResult> RealizarPagamento([FromBody] PedidoModel pedidoModel) { using (var unitOfWork = _unitOfWorkFactory.CriarParaTenant(_contexto.CodigoTenant)) { var clientesRepositorio = new ClientesRepositorio(unitOfWork); var pedidosRepositorio = new PedidosRepositorio(unitOfWork); var cliente = await clientesRepositorio.ObterAsync(pedidoModel.CodigoCliente); var pedido = Pedido.Criar(cliente, pedidoModel.Dividas, pedidoModel.DadosPagamento); var pagamento = await _servicoPagamento.PagarAsync(pedido); if (!pagamento.Aprovado) { return(BadRequest(pagamento.NegadoPor)); } pedido.RealizarPagamento(pagamento); await _servicoEmail.EnviarObrigadoPeloPagamentoAsync(pedido); await _regrasPosPagamento.ExecutarRegrasPosPagamentoAsync(pedido); await pedidosRepositorio.IncluirAsync(pedido); await unitOfWork.CommitAsync(); return(Ok(pagamento)); } }