Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }