Exemplo n.º 1
0
        public async Task <bool> CompleteCart(string sessionId, IConnectionFactory connectionFactory)
        {
            _logger.LogInformation($"CompleteCart: Beginning complete cart action for {sessionId}.");
            var cartItems = await _getCartItems.GetItemsInCart(sessionId);

            foreach (var cartItem in cartItems)
            {
                InventoryMessage inventoryMessage = new InventoryMessage
                {
                    Id = cartItem.Id,
                    StockAdjustment = cartItem.Count
                };

                using (var connection = connectionFactory.CreateConnection())
                    using (var channel = connection.CreateModel())
                    {
                        channel.QueueDeclare(queue: "cmd-inventory",
                                             durable: false,
                                             exclusive: false,
                                             autoDelete: false,
                                             arguments: null);

                        var body = JsonSerializer.SerializeToUtf8Bytes(inventoryMessage);

                        try
                        {
                            channel.BasicPublish(exchange: "",
                                                 routingKey: "cmd-inventory",
                                                 basicProperties: null,
                                                 body: body);
                        }
                        catch (RabbitMQClientException ex)
                        {
                            _logger.LogError($"CompleteCart: RabbitMQ error: {ex.Message}");
                            return(false);
                        }

                        _logger.LogInformation($"CompleteCart: Sent message to cmd-inventory to adjust stock for {inventoryMessage.Id} by {inventoryMessage.StockAdjustment}");
                    }

                _logger.LogInformation($"CompleteCart: Removing {inventoryMessage.Id} from cart {cartItem.SessionId}");
                await DeleteFromCart(cartItem.SessionId, cartItem.Id);
            }

            return(true);
        }
Exemplo n.º 2
0
 public async Task <IActionResult> GetItemsInCart([FromHeader(Name = "X-CarsUnlimited-SessionId")] string sessionId)
 {
     if (!string.IsNullOrWhiteSpace(sessionId))
     {
         Cart cart = new Cart
         {
             Items = await _getCartItems.GetItemsInCart(sessionId)
         };
         return(StatusCode(200, cart));
     }
     else
     {
         return(StatusCode(404));
     }
 }