Example #1
0
        public async Task <Response> Handle(PublishTransaction request, CancellationToken cancellationToken)
        {
            var @event = new TransactionEvent(request.AccountId, request.Date, request.Value, request.Type);
            await _publisher.PublishAsync(@event);

            return(new Response());
        }
        public async Task <Response> Handle(Transfer request, CancellationToken cancellationToken)
        {
            var validation = new Response();

            //Validar contas
            try
            {
                await _accountService.GetAccountByIDAsync(request.From);
            }
            catch (System.Net.Http.HttpRequestException)
            {
                validation.AddNotification("Transferência", "A conta de origem não existe!");
                return(validation);
            }

            try
            {
                await _accountService.GetAccountByIDAsync(request.To);
            }
            catch (System.Net.Http.HttpRequestException)
            {
                validation.AddNotification("Transferência", "A conta de destino não existe!");
                return(validation);
            }

            //Validar saldo da conta de destino
            var fromBalance = await _accountService.GetAccountBalanceByIDAsync(request.From);

            if (fromBalance < request.Value)
            {
                validation.AddNotification("Transferência", "O saldo da conta de origem não é o suficiente pra realizar a transferência");
                return(validation);
            }

            //Enviar evento de transferência entre contas
            await _publisher.PublishAsync(new TransactionEvent(request.From, DateTime.Now, -request.Value, ETransactionType.Transfer));

            await _publisher.PublishAsync(new TransactionEvent(request.To, DateTime.Now, request.Value, ETransactionType.Transfer));

            return(validation);
        }
Example #3
0
        public async Task <ServicesResult> PostRabbitMessageAsync(PostMessageRequest request)
        {
            var message = new TesteMessage
            {
                Campo = request.Campo
            };


            await _publisher.PublishAsync(message);

            return(Created(message.MessageId));
        }
Example #4
0
        public async Task PublisheAndConsumeDefault()
        {
            //Arrange
            var  subscriber         = GetService <IRabbitMQSubscriber>();
            bool publishWithSuccess = false;
            var  message            = new DefaultMessage
            {
                Campo = "PublisheAndConsumeDefault"
            };
            var options = RabbitMQExchangeOptions.Build <DefaultMessage>();

            //Act
            subscriber.StartConsume <DefaultMessage>((msg) =>
            {
                publishWithSuccess = msg.Campo == message.Campo;
                return(true);
            });
            await _publisher.PublishAsync(message);

            Thread.Sleep(2000);
            subscriber.Dispose();

            //Assert
            options.QueueName.ShouldNotBeNullOrWhiteSpace();

            var queueGenerated = await _rabbitExplorer.GetQueue(options.QueueName);

            queueGenerated.ShouldNotBeNull();
            queueGenerated.name.ShouldBe(options.QueueName);
            queueGenerated.durable.ShouldBe(options.Durable);
            publishWithSuccess.ShouldBeTrue();
        }