Ejemplo n.º 1
0
        public async Task <ResponseMessage> CapturarPagamento(Guid pedidoId)
        {
            var transacoes = await _pagamentoRepository.ObterTransacoesPorPedidoId(pedidoId);

            var transacaoAutorizada = transacoes?.FirstOrDefault(t => t.Status == StatusTransacao.Autorizado);
            var validationResult    = new ValidationResult();

            if (transacaoAutorizada == null)
            {
                throw new DomainException($"Transação não encontrada para o pedido {pedidoId}");
            }

            var transacao = await _pagamentoFacade.CapturarPagamento(transacaoAutorizada);

            if (transacao.Status != StatusTransacao.Pago)
            {
                validationResult.Errors.Add(new ValidationFailure("Pagamento", $"Não foi possível capturar o pagamento do pedido {pedidoId}"));
            }

            transacao.PagamentoId = transacaoAutorizada.PagamentoId;
            _pagamentoRepository.AdicionarTransacao(transacao);

            if (!await _pagamentoRepository.UnitOfWork.Commit())
            {
                validationResult.Errors.Add(new ValidationFailure("Pagamento", $"Não foi possivel persisitr a captura do pagamento do pedido {pedidoId}"));

                return(new ResponseMessage(validationResult));
            }

            return(new ResponseMessage(validationResult));
        }