/// <summary> /// Verifies that the CurrentStore can fulfill the product request and then adds it to the Cart. /// </summary> /// <param name="productId"></param> /// <param name="quantity"></param> public void AddProductToCart(int productId, int quantity) { List <Product> availableProducts = CurrentStore.GetAvailableProducts(); if (productId > availableProducts.Count || productId < 0) { throw new Exception("Invalid product id"); } Product product = availableProducts[productId]; OrderDetails cartItem; if (!_cart.Exists(item => item.Product.ProductId == product.ProductId)) { cartItem = new OrderDetails { Product = product, Quantity = quantity }; _cart.Add(cartItem); } else { cartItem = _cart.Find(item => item.Product.ProductId == product.ProductId); cartItem.Quantity += quantity; } if (!CurrentStore.CanFulfillProductQty(cartItem)) { cartItem.Quantity -= quantity; if (cartItem.Quantity == 0) { _cart.Remove(cartItem); } throw new Exception($"Inventory cannot fulfill quantity: {product.Name} x {quantity}"); } }