/// <summary> /// Add product in cart /// </summary> /// <param name="product">Product to be added in cart</param> /// <returns>Total cost of the Product(s)</returns> public double Add(IProduct product) { var productCartItem = _cart.FirstOrDefault(x => x.Product.Id == product.Id); if (productCartItem == null) { var cartItem = new CartItem() { Product = product }; _cart.Add(cartItem); productCartItem = cartItem; } var discounts = _discountDb.GetProductDiscounts(productCartItem.Product); productCartItem.Count = productCartItem.Count + 1; var productTotalPrice = 0.0; if (discounts != null && discounts.Count > 0) { foreach (var discount in discounts) { productTotalPrice = productTotalPrice + discount.Apply(_cart); } } else { productTotalPrice = productCartItem.TotalPrice + product.Price; } productCartItem.TotalPrice = productTotalPrice; return(productTotalPrice); }