Exemplo n.º 1
0
        public async Task <ISaidaResultado> executa(TranferenciaEntreContasEntrada entrada)
        {
            var contaOrigem = await _contaRepositoy.Busca(entrada.NumeroContaOrigem);

            var contaDestino = await _contaRepositoy.Busca(entrada.NumeroContaDestino);

            if (contaOrigem == null)
            {
                AddNotification("Tranfêrencia", "Conta Origem não existe.");
            }

            if (contaDestino == null)
            {
                AddNotification("Tranfêrencia", "Conta Origem não existe.");
            }

            if (entrada.Valor <= 0)
            {
                AddNotification("Tranfêrencia", "Valor tem que ser maior que zero.");
            }

            if (contaOrigem.Saldo < entrada.Valor)
            {
                AddNotification("Tranfêrencia", "Saldo insuficiente para transferência.");
            }

            if (Invalid)
            {
                return(await Task.FromResult(new SaidaResultado(false, "Por favor, corrija os campos abaixo", Notifications)));
            }

            contaOrigem.DebitaSaldo(entrada.Valor);
            var lancamentoDebito = new Lancamento(contaOrigem.Numero, Enums.ETipoLancamento.Debito, entrada.Valor);
            await _lancamentoRepositoy.Salva(lancamentoDebito);

            await _contaRepositoy.Atualiza(contaOrigem);

            contaDestino.CreditaSaldo(entrada.Valor);
            var lancamentoCredito = new Lancamento(contaDestino.Numero, Enums.ETipoLancamento.Credito, entrada.Valor);
            await _lancamentoRepositoy.Salva(lancamentoCredito);

            await _contaRepositoy.Atualiza(contaDestino);

            return(await Task.FromResult(new SaidaResultado(true, "Operação efetuada com sucesso.", Notifications)));
        }