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); }
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)); } }