Exemplo n.º 1
0
        /// <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}");
            }
        }