public async Task <ContaArgument> Criar(ContaArgument conta) { if (conta == null) { throw new ArgumentException("É necessário informar o nome do banco, agência, conta, dígito e o tipo de conta (corrente/poupança)."); } if (string.IsNullOrEmpty(conta.Banco)) { throw new ArgumentException("O nome do banco é requerido."); } if (conta.Agencia < 0 || conta.Agencia.ToString().Length != 4) { throw new ArgumentException("Número da agência esta inválido."); } if (conta.ContaNumero < 0 || conta.ContaNumero.ToString().Length > 8) { throw new ArgumentException("Número da conta esta inválido."); } if (conta.Digito < 0 || conta.Digito.ToString().Length != 1) { throw new ArgumentException("Número do digíto da conta esta inválido."); } if (string.IsNullOrEmpty(conta.Tipo.ToString())) { throw new ArgumentException("Deve ser informado o tipo de conta: Corrente ou Poupança."); } return(Mapper.Map <ContaArgument>(new Conta(conta.Banco, conta.Agencia, conta.ContaNumero, conta.Digito, conta.Tipo, conta.Saldo))); }
public async Task <ContaArgument> Debitar(ContaArgument conta, decimal valor) { if (valor < 0) { throw new ArgumentException("Não é permitido depósito com valor negativo."); } conta.Saldo = conta.Saldo - valor; return(conta); }
public async Task <OperacaoArgument> EfetuaLancamento(ContaArgument contaOrigem, ContaArgument contaDestino, TipoOperacao tipoOperacao, decimal valor) { ContaArgument origem = new ContaArgument(); ContaArgument destino = new ContaArgument(); if (contaOrigem.Agencia == contaDestino.Agencia && contaOrigem.ContaNumero == contaDestino.ContaNumero) { throw new ArgumentException("Agencia de origem não pode ser a mesma de destino"); } if (tipoOperacao == TipoOperacao.Credito) { origem = await _contaService.Creditar(contaOrigem, valor); destino = await _contaService.Debitar(contaDestino, valor); } if (tipoOperacao == TipoOperacao.Debito) { origem = await _contaService.Debitar(contaOrigem, valor); destino = await _contaService.Creditar(contaDestino, valor); } var operacao = new Operacao { ContaOrigem = Mapper.Map <Conta>(origem), ContaDestino = Mapper.Map <Conta>(destino), DataRegistroOperacao = DateTime.Now, Tipo = tipoOperacao }; await _lancamentoRepository.RegistraLancamento(operacao); return(Mapper.Map <OperacaoArgument>(operacao)); }
public MainTest() { try { Mapper.Initialize(cfg => { cfg.CreateMap <Conta, ContaArgument>(); cfg.CreateMap <Operacao, OperacaoArgument>(); }); } catch (InvalidOperationException) { //Mapper já inicializado!!! Segue a vida! } _lancamentoRepository = new LancamentoRepository(); _contaService = new ContaService(); _lancamentoService = new LancamentoService(_contaService, _lancamentoRepository); //CRIA AS CONTAS E GERA UM SALDO INICIAL PARA TESTE _dadosContaOrigem = CriaConta("Santander", 2300, 10000001, 1, TipoConta.Corrente, 1000); _dadosContaDestino = CriaConta("Santander", 2300, 20000002, 3, TipoConta.Corrente, 1500); }
public async Task <ContaArgument> SetaSaldoInicial(ContaArgument conta, decimal valor) { conta.Saldo = valor; return(conta); }