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 void RealizarTransferencia(ContaCorrente origem, decimal valor) { var origemBD = _contaCorrenteRepositorio.Recuperar(origem.Banco, origem.Agencia, origem.Numero); if (origemBD.Saldo < valor) { throw new Exception("Saldo insuficiente."); } origemBD.EnviarTransferencia(valor); _contaCorrenteRepositorio.Salvar(origemBD); }
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); }