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 }); }
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))); } }
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."); }
public async Task CreateTransactionDebitAndCredit(TransacaoDto transaction) { await this.CreateTransactionCredit(transaction.IdContaCorrenteDestino, transaction.Valor); await this.CreateTransactionDebit(transaction.IdContaCorrenteOrigem, transaction.Valor); }
public async Task CreateTransactionDebitAndCredit(TransacaoDto transaction) { await _transacaoService.CreateTransactionDebitAndCredit(transaction); }