public ContaCorrente(Guid clienteId, NumeroAgencia numeroAgencia, NumeroConta numeroConta, DigitoConta digitoConta) { this.Id = Guid.NewGuid(); this.ClienteId = clienteId; this.NumeroAgencia = numeroAgencia; this.NumeroConta = numeroConta; this.DigitoConta = digitoConta; this.transacoes = new LancamentoCollection(); }
public static ContaCorrente Carregar(Guid id, Guid clienteId, NumeroAgencia numeroAgencia, NumeroConta numeroConta, DigitoConta digitoConta, LancamentoCollection transacoes) { var conta = new ContaCorrente(); conta.NumeroAgencia = numeroAgencia; conta.NumeroConta = numeroConta; conta.DigitoConta = digitoConta; conta.Id = id; conta.ClienteId = clienteId; conta.transacoes = transacoes; return(conta); }
public async Task <TransferirResult> Execute(NumeroAgencia numeroAgenciaOrigem, NumeroConta numeroContaOrigem, DigitoConta digitoContaOrigem, NumeroAgencia numeroAgenciaDestino, NumeroConta numeroContaDestino, DigitoConta digitoContaDestino, Valor valor) { if (valor <= 0) { throw new ValorInvalidoException(); } var contaDebito = await this.contaRepository.Obter(numeroAgenciaOrigem, numeroContaOrigem, digitoContaOrigem); if (contaDebito == null) { throw new ContaNaoEncontradaException(numeroAgenciaOrigem, numeroContaOrigem, digitoContaOrigem); } if (contaDebito.ClienteId != usuarioAutenticado.Id) { throw new UsuarioLogadoNaoEhDonoDaContaException(contaDebito.Id); } var contaCredito = await this.contaRepository.Obter(numeroAgenciaDestino, numeroContaDestino, digitoContaDestino); if (contaCredito == null) { throw new ContaNaoEncontradaException(numeroAgenciaDestino, numeroContaDestino, digitoContaDestino); } if (contaCredito.Id == contaDebito.Id) { throw new ContaCreditoIgualContaDebitoException(); } contaDebito.Debitar(valor); Guid transacaoId = Guid.NewGuid(); Debito debito = contaDebito.ObterUltimaTransacao() as Debito; debito.AtrelarTransacao(transacaoId); await this.contaRepository.SalvarTransacao(contaDebito, debito); contaCredito.Creditar(valor); Credito credito = contaCredito.ObterUltimaTransacao() as Credito; credito.AtrelarTransacao(debito.TransacaoId); await this.contaRepository.SalvarTransacao(contaCredito, credito); return(new TransferirResult(valor, transacaoId, credito.DataTransacao, contaCredito, contaDebito)); }
public void NaoDeveConseguirCriarUmNumeroAgenciaCasoOValorInformadoForNullOuBranco() { NumeroAgenciaNaoInformadoException ex = Assert.Throws <NumeroAgenciaNaoInformadoException>(() => { NumeroAgencia numeroAgencia = new NumeroAgencia(null); }); Assert.Equal("Número da agência é obrigatório.", ex.Message); ex = Assert.Throws <NumeroAgenciaNaoInformadoException>(() => { NumeroAgencia numeroAgencia = new NumeroAgencia(String.Empty); }); Assert.Equal("Número da agência é obrigatório.", ex.Message); }
private void AbrirConta(Context context, Guid clienteId, Guid contaId, Cpf cpf, Nome nome, Senha senha, NumeroAgencia numeroAgencia, NumeroConta numeroConta, DigitoConta digitoConta, Valor saldoInicial) { context.Clientes.Add(new Cliente() { Cpf = cpf, Nome = nome, Senha = new SenhaCriptografada(senha), Id = clienteId }); context.Contas.Add(new ContaCorrente() { ClienteId = clienteId, DigitoConta = digitoConta, Id = contaId, NumeroAgencia = numeroAgencia, NumeroConta = numeroConta }); context.Creditos.Add(new Credito() { ContaId = contaId, DataTransacao = DateTime.UtcNow, TransacaoId = Guid.NewGuid(), Id = Guid.NewGuid(), Valor = saldoInicial }); }
public async Task <AbrirContaResult> Execute(Nome nomeCliente, Cpf cpfCliente, NumeroAgencia numeroAgencia) { Cliente cliente = await this.clienteRepository.ObterPorCpf(cpfCliente); if (cliente != null) { throw new ClienteJaPossuiContaException(cliente.Nome); } cliente = new Cliente(nomeCliente, cpfCliente); await this.clienteRepository.Salvar(cliente); NumeroConta numeroConta = DateTime.Now.Ticks.ToString(); //geração de um novo número de conta DigitoConta digitoConta = (new Random()).Next(1, 9).ToString(); //geração do digito verificador ContaCorrente conta = new ContaCorrente(cliente.Id, numeroAgencia, numeroConta, digitoConta); await this.contaRepository.Salvar(conta); return(new AbrirContaResult() { Cliente = cliente, Conta = conta }); }
public void DeveConseguirCriarUmNumerAgencia() { NumeroAgencia numeroAgencia = new NumeroAgencia("123"); Assert.Equal("123", numeroAgencia.ToString()); }