Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 6
0
        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);
        }