protected override Task Handle(AddOperacaoCommand command, CancellationToken cancellationToken)
        {
            var tipoOperacao = OperacaoTipo.Parse(command.TipoOperacao);

            var operacao = new Operacao(command.Id, command.Data, tipoOperacao, command.Ativo, command.Quantidade, command.Preco, command.Conta);

            _operacaoRepository.Add(operacao);

            return(Task.FromResult(0));
        }
Пример #2
0
        private void Validar(T entidade, OperacaoTipo operacao)
        {
            switch (operacao)
            {
            case OperacaoTipo.Adicao:
                this.ValidarAdicao(entidade);
                break;

            case OperacaoTipo.Atualizacao:
                this.ValidarAtualizacao(entidade);
                break;

            case OperacaoTipo.Delecao:
                this.ValidarDelecao(entidade);
                break;
            }
        }
        public async Task <Params.Operacao> EfetuaLancamento(Params.ContaCorrente contaOrigem, Params.ContaCorrente contaDestino, OperacaoTipo tipoOperacao, decimal valor)
        {
            Params.ContaCorrente origem  = new Params.ContaCorrente();
            Params.ContaCorrente destino = new Params.ContaCorrente();

            if (contaOrigem.Agencia == contaDestino.Agencia && contaOrigem.Conta == contaDestino.Conta)
            {
                throw new ArgumentException("Conta de origem e destino são as mesmas. Operação não realizada");
            }

            if (!await _contaService.ExisteSaldoParaTransacao(contaOrigem, valor))
            {
                throw new ArgumentException("Conta de origem não tem saldo suficiente para a transação. Operação não realizada");
            }

            if (tipoOperacao == OperacaoTipo.Credito)
            {
                origem = await _contaService.Credito(contaOrigem, valor);

                destino = await _contaService.Debito(contaDestino, valor);
            }

            if (tipoOperacao == OperacaoTipo.Debito)
            {
                origem = await _contaService.Debito(contaOrigem, valor);

                destino = await _contaService.Credito(contaDestino, valor);
            }

            var operacao = new Entities.Operacao
            {
                ContaOrigem          = Mapper.Map <Entities.ContaCorrente>(origem),
                ContaDestino         = Mapper.Map <Entities.ContaCorrente>(destino),
                DataRegistroOperacao = DateTime.Now,
                ValorTransacao       = valor,
                Tipo = tipoOperacao
            };

            await _lancamentoRepository.RegistrarLancamento(operacao);

            return(Mapper.Map <Params.Operacao>(operacao));
        }