public void Executar(TransferenciaRequest request) { var contaOrigem = _contaCorrenteRepositorio.Obter(request.ContaOrigem); if (contaOrigem == null) { throw new ContaCorrenteInvalidaException(request.ContaOrigem); } var contaDestino = _contaCorrenteRepositorio.Obter(request.ContaDestino); if (contaDestino == null) { throw new ContaCorrenteInvalidaException(request.ContaDestino); } var saldoContaOrigem = _contaCorrenteServico.ObterSaldo(contaOrigem.Conta); if (saldoContaOrigem < request.Valor) { throw new SaldoInsuficienteException(request.ContaOrigem, request.Valor); } contaOrigem.Debitar(request.Valor); contaDestino.Creditar(request.Valor); //contaCorrenteRepositorio.UnitOfWork.BeginTransaction(); _contaCorrenteRepositorio.Salvar(contaOrigem); _contaCorrenteRepositorio.Salvar(contaDestino); //contaCorrenteRepositorio.UnitOfWork.CommitTransaction(); }
public Valor ObterSaldo(int numeroConta) { var conta = _correnteRepositorio.Obter(numeroConta); var creditos = SomarLancamentos <Credito>(conta); var debitos = SomarLancamentos <Debito>(conta); return(creditos - debitos); }
public bool Transferir(TransferenciaSolicitacao transferencia) { var contaOrigem = _contaCorrenteRepositorio.Obter(transferencia.ContaOrigem); if (contaOrigem == null) { _notificacao.AddNotification(nameof(transferencia.ContaOrigem), "A conta origem não existe"); return(false); } var contaDestino = _contaCorrenteRepositorio.Obter(transferencia.ContaDestino); if (contaDestino == null) { _notificacao.AddNotification(nameof(transferencia.ContaDestino), "A conta destino não existe"); return(false); } return(_transacao.RealizarTransacao(TransferenciaSolicitacao.operacao, contaOrigem, transferencia.valor, contaDestino)); }
private ContaCorrente ValidarContaCorrente(ContaCorrente contaCorrente, string tipoConta = "origem") { var resultado = _contaCorrenteRepositorio.Obter(contaCorrente); if (resultado == null) { throw new ExcecaoDeDominio($"conta de {tipoConta} é inválida"); } return(resultado); }
public CadastrarContaCorrenteResult Executar(CadastrarContaCorrenteRequest request) { if (_contaCorrenteRepositorio.Obter(request.Conta) != null) { _notificationContext.AddNotification(nameof(request.Conta), "Conta já cadastrada"); return(new CadastrarContaCorrenteResult()); } ContaCorrente conta = new ContaCorrente(Guid.NewGuid(), request.Agencia, request.Conta); if (conta.Invalid) { _notificationContext.AddNotifications(conta.Notifications); return(new CadastrarContaCorrenteResult()); } _contaCorrenteRepositorio.Salvar(conta); return(CadastrarContaCorrenteResult.FromDomain(conta)); }
public ContaCorrenteSolicitacao Salvar(ContaCorrenteSolicitacao conta) { if (_contaCorrenteRepositorio.Obter(conta.Conta) != null) { _notificacao.AddNotification(nameof(conta.Conta), "Conta cadastrada"); return(new ContaCorrenteSolicitacao()); } ContaCorrente contaCorrente = new ContaCorrente(Guid.NewGuid(), conta.Conta, conta.Agencia, conta.Correntista, conta.Valor); if (contaCorrente.Invalid) { _notificacao.AddNotifications(contaCorrente.Notifications); return(new ContaCorrenteSolicitacao()); } _contaCorrenteRepositorio.Salvar(contaCorrente); return(conta); }