public ContaCorrente Adicionar(Lancamento request) { // Crio o objeto de response ContaCorrente contaCorrenteOrigem = new ContaCorrente(); ContaCorrente contaCorrenteDestino = new ContaCorrente(); // Validação de regras de negócio _OperacaoValidacao.ValidarOperacao(request); if (_OperacaoValidacao.Erros.Any()) { contaCorrenteOrigem.Erros = _OperacaoValidacao.Erros; return(contaCorrenteOrigem); } // Chama o Repositoy contaCorrenteOrigem.NumeroConta = request.ContaOrigem; contaCorrenteDestino.NumeroConta = request.ContaDestino; var contaOrigem = _OperacaoRepository.Obter(contaCorrenteOrigem); var contaDestino = _OperacaoRepository.Obter(contaCorrenteDestino); _OperacaoValidacao.ValidarConta(contaOrigem); if (_OperacaoValidacao.Erros.Any()) { contaCorrenteOrigem.Erros = _OperacaoValidacao.Erros; return(contaCorrenteOrigem); } _OperacaoValidacao.ValidarSaldoConta(request.Valor, contaOrigem.Saldo); if (_OperacaoValidacao.Erros.Any()) { contaCorrenteOrigem.Erros = _OperacaoValidacao.Erros; return(contaCorrenteOrigem); } //Efetivando a transacao _OperacaoRepository.Adicionar(request); contaCorrenteDestino.Saldo = contaCorrenteDestino.Saldo + request.Valor; contaCorrenteOrigem.Saldo = contaCorrenteOrigem.Saldo - request.Valor; //debito e crédito _OperacaoRepository.AtualizarConta(contaCorrenteDestino); _OperacaoRepository.AtualizarConta(contaCorrenteOrigem); // Retorna return(contaCorrenteOrigem); }
protected override Task ExecuteAsync(CancellationToken stoppingToken) { stoppingToken.ThrowIfCancellationRequested(); var consumer = new EventingBasicConsumer(_channel); consumer.Received += (ch, ea) => { // received message var content = JsonConvert.DeserializeObject <Operacao>(Encoding.UTF8.GetString(ea.Body)); // handle the received message operacaoRepository.Adicionar(content); _channel.BasicAck(ea.DeliveryTag, false); }; consumer.Shutdown += OnConsumerShutdown; consumer.Registered += OnConsumerRegistered; consumer.Unregistered += OnConsumerUnregistered; consumer.ConsumerCancelled += OnConsumerConsumerCancelled; _channel.BasicConsume(configuration["QueueOperacao"], false, consumer); return(Task.CompletedTask); }