public async Task <IActionResult> Post([FromBody] CartaoParam cartao)
        {
            try
            {
                var resultado = await _pagamentoCommand.ProcessarPagamento(cartao);

                if (resultado.Count > 0)
                {
                    return(BadRequest(string.Format("Dados para pagamento incorreto: \r\n{0}", string.Join("\r\n", resultado))));
                }
                return(Ok("Pagamento realizado com sucesso!"));
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }
Exemplo n.º 2
0
        public async Task <List <string> > ProcessarPagamento(CartaoParam cartao)
        {
            var pagamento = cartao.ConvertTo <PagamentoEntity>();
            var erros     = pagamento.Validar();

            if (erros.Count > 0)
            {
                return(erros);
            }

            pagamento.StatusPagamento = StatusPagamentoEnum.Pendente;
            await _pagamentoRepository.AddUsingRef(pagamento);

            var confirmacaoPagamento = await _gatewayExternalService.EfetuaPagamento(pagamento);

            await _deliveryExternalService.SinalizaStatusPagamento(confirmacaoPagamento);

            var retornoPagamento = await _pagamentoRepository.GetByIDWithLoadRef(pagamento.Id.GetValueOrDefault());

            retornoPagamento.StatusPagamento = confirmacaoPagamento.StatusPagamento;
            await _pagamentoRepository.AddUsingRef(retornoPagamento);

            return(erros);
        }