Exemple #1
0
        public async void PublisherNewOrder()
        {
            if (_lastTask != null && !_lastTask.IsCompleted)
            {
                return;
            }

            var config      = _configuration.GetSection("serviceBus").Get <ServiceBusConfiguration>();
            var topicClient = new TopicClient(config.ConnectionString, Topic);

            var order = new OrderChangedMessage
            {
                OrderId = Guid.NewGuid(),
                StoreId = Guid.Parse(StoreId),
                State   = (GeekBurger.Orders.Contract.Enums.OrderState) new Random().Next(1, 3)
            };

            _lastTask = SendMessagesAsync(topicClient, GetMessage(order));

            _orderChanged.PublisherStartNewOrder(order);

            await _lastTask;

            var   closeTask = topicClient.CloseAsync();
            await closeTask;

            HandleException(closeTask);
        }
Exemple #2
0
 public void RemoveToMessageList(OrderChangedMessage order)
 {
     if (!_orders.Exists(x => x.Equals(order.OrderId.ToString())))
     {
         _orders.Remove(order.StoreId.ToString());
     }
 }
Exemple #3
0
 public void AddToMessageList(OrderChangedMessage order)
 {
     if (!_orders.Exists(x => x.Equals(order.OrderId)))
     {
         _orders.Add(order.OrderId.ToString());
     }
 }
Exemple #4
0
        public Message GetMessage(OrderChangedMessage orderChanged)
        {
            var orderFinishedSerialized = JsonConvert.SerializeObject(orderChanged);
            var orderFinishedByteArray  = Encoding.UTF8.GetBytes(orderFinishedSerialized);

            return(new Message
            {
                Body = orderFinishedByteArray,
                MessageId = Guid.NewGuid().ToString(),
                Label = orderChanged.OrderId.ToString()
            });
        }
 public async Task SaveSale(OrderChangedMessage order)
 {
     if (order.State == Orders.Contract.Enums.OrderState.Paid)
     {
         var sales = new Sales
         {
             Date    = DateTime.Now,
             Price   = order.Value,
             SaleId  = order.OrderId,
             StoreId = order.StoreId
         };
         await _salesRepository.Add(sales);
     }
 }
        protected override Message GetMessage(Order order)
        {
            decimal.TryParse(order.Total, out decimal valor);
            var productChanged = new OrderChangedMessage
            {
                OrderId = order.OrderId,
                State   = (OrderState)order.State,
                StoreId = order.StoreId,
                Value   = valor
            };
            var productChangedSerialized = JsonConvert.SerializeObject(productChanged);
            var productChangedByteArray  = Encoding.UTF8.GetBytes(productChangedSerialized);

            return(new Message
            {
                Body = productChangedByteArray,
                MessageId = Guid.NewGuid().ToString(),
                Label = productChanged.OrderId.ToString()
            });
        }
Exemple #7
0
        private Task Handle(Message message, CancellationToken arg2)
        {
            var messageString = "";

            if (message.Body != null)
            {
                messageString = Encoding.UTF8.GetString(message.Body);
            }

            //TODO: be more generic
            OrderChangedMessage orderChanged = null;

            if (message.Label == "orderchanged")
            {
                orderChanged = JsonConvert.DeserializeObject <List <OrderChangedMessage> >(messageString);
            }
            //if (message.Label == "userwithlessoffer")
            //    orderChanged = JsonConvert.DeserializeObject<List<GeekBurger.Orders.Contract.Messages.>>(messageString);

            _salesService.SaveSale(orderChanged);
            return(Task.CompletedTask);
        }
        private static Task Handle(Message message, CancellationToken arg2)
        {
            var newOrderString = Encoding.UTF8.GetString(message.Body);
            var newOrder       = JsonConvert.DeserializeObject <OrderChangedMessage>(newOrderString);

            OrderChangedMessage orderReadyMessage = new OrderChangedMessage
            {
                OrderId = new Guid(message.Label),
                State   = (OrderState)ProductionState.Ready,
                Value   = newOrder.Value,
                StoreId = newOrder.StoreId
            };

            Random readyTime = new Random();
            int    seconds   = readyTime.Next(5 * 1000, 21 * 1000);

            Thread.Sleep(seconds);

            // TODO: persisitir a informação de READY para validação após o pagamento do pedido

            return(Task.CompletedTask);
        }
Exemple #9
0
        public async void PublisherStartNewOrder(OrderChangedMessage order)
        {
            if (_lastTask != null && !_lastTask.IsCompleted)
            {
                return;
            }

            var config      = _configuration.GetSection("serviceBus").Get <ServiceBusConfiguration>();
            var topicClient = new TopicClient(config.ConnectionString, Topic);

            _lastTask = SendMessagesAsync(topicClient, GetMessage(order));

            await _lastTask;

            var   closeTask = topicClient.CloseAsync();
            await closeTask;

            if (HandleException(closeTask))
            {
                AddToMessageList(order);
            }
        }
Exemple #10
0
        private static Task Handle(Message message, CancellationToken arg2)
        {
            var orderChangedString = Encoding.UTF8.GetString(message.Body);
            var orderChanged       = JsonConvert.DeserializeObject <OrderChangedMessage>(orderChangedString);

            if (orderChanged.State == OrderState.Paid)
            {
                OrderChangedMessage orderFinishedMessage = new OrderChangedMessage
                {
                    OrderId = new Guid(message.Label),
                    State   = (OrderState)ProductionState.Finished,
                    Value   = orderChanged.Value,
                    StoreId = orderChanged.StoreId
                };

                // TODO: atribuir como status concluído apenas se o status de produção for READY

                _orderChangedService.AddToMessageList(orderFinishedMessage);
                _orderChangedService.SendMessagesAsync();
            }

            return(Task.CompletedTask);
        }
Exemple #11
0
        public async void PublisherFinishedOrder(OrderChangedMessage order)
        {
            if (_lastTask != null && !_lastTask.IsCompleted)
            {
                return;
            }

            var config      = _configuration.GetSection("serviceBus").Get <ServiceBusConfiguration>();
            var topicClient = new TopicClient(config.ConnectionString, Topic);

            order.State = GeekBurger.Orders.Contract.Enums.OrderState.Finished;

            _lastTask = SendMessagesAsync(topicClient, GetMessage(order));

            await _lastTask;

            var   closeTask = topicClient.CloseAsync();
            await closeTask;

            if (HandleException(closeTask))
            {
                RemoveToMessageList(order);
            }
        }
Exemple #12
0
 public void AddToMessageList(OrderChangedMessage orderChanged)
 {
     _messages.Add(this.GetMessage(orderChanged));
 }
 public IActionResult PublisherFinishedOrder([FromBody] OrderChangedMessage order)
 {
     _orderChanged.PublisherFinishedOrder(order);
     return(Ok());
 }
 public IActionResult PublisherTopicStartNewOrders([FromBody] OrderChangedMessage order)
 {
     _orderChanged.PublisherStartNewOrder(order);
     return(Ok());
 }