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