예제 #1
0
        public void Execute(TransacaoDto transacao)
        {
            var conta = _contaRepository.ObterPorId(transacao.IdConta);

            if (conta == null)
            {
                throw new Exception("Conta não encontrada.");
            }

            if (!conta.TemSaldoSuficiente(transacao.Valor))
            {
                throw new Exception("Saldo da conta insuficiente.");
            }

            conta.Saldo -= transacao.Valor;

            _contaRepository.Update(conta);

            _transacaoRepository.Add(new Transacao
            {
                Tipo      = transacao.Tipo,
                Valor     = transacao.Valor,
                Data      = DateTime.Now,
                Descricao = transacao.Descricao,
                Conta     = conta
            });
        }
예제 #2
0
        public async Task <IActionResult> Post(TransacaoDto model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(new ApiResult(false, "Model inválida.", model)));
                }

                await _transacaoAppService.CreateTransactionDebitAndCredit(model);

                return(Ok(new ApiResult(model)));
            }
            catch (TransacaoException tex)
            {
                return(BadRequest(new ApiResult(false, tex.Message, model)));
            }
            catch (Exception ex)
            {
                return(BadRequest(new ApiResult(false, ex.InnerException.Message, model)));
            }
        }
예제 #3
0
        public void Deve_gerar_excecao_ao_efetuar_debito_em_uma_conta_corrente_com_saldo_insuficiente()
        {
            var resquest = new TransacaoDto
            {
                IdConta   = 1,
                Valor     = 150,
                Descricao = "Retirada",
                Tipo      = TipoTransacao.Retirada
            };

            var transacaoRepositoryMock = MockTransacaoRepository();
            var contaRepositoryMock     = MockContaRepository(_contaMock);

            var sut = new EfetuarDebitoUseCase
                      (
                transacaoRepositoryMock.Object,
                contaRepositoryMock.Object
                      );

            Action aceitarAction = () => sut.Execute(resquest);

            aceitarAction.Should().Throw <Exception>().WithMessage("Saldo da conta insuficiente.");
        }
예제 #4
0
        public async Task CreateTransactionDebitAndCredit(TransacaoDto transaction)
        {
            await this.CreateTransactionCredit(transaction.IdContaCorrenteDestino, transaction.Valor);

            await this.CreateTransactionDebit(transaction.IdContaCorrenteOrigem, transaction.Valor);
        }
예제 #5
0
 public async Task CreateTransactionDebitAndCredit(TransacaoDto transaction)
 {
     await _transacaoService.CreateTransactionDebitAndCredit(transaction);
 }