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)); }
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)); }