static public BindedProductViewModel MapSingleBindedProduct(CProduct product)
        {
            var viewProduct = new BindedProductViewModel
            {
                UniqueID = product.UniqueID,
                Name     = product.Name,
                Category = product.Category,
                Price    = product.Price,
                Quantity = product.Quantity,
            };

            return(viewProduct);
        }
        public ActionResult AddToCart(string id, BindedProductViewModel bindedProduct)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    ModelState.AddModelError("", "invalid input format");
                    return(View(bindedProduct));
                }

                // handle concurrency
                CProduct foundProduct = _storeRepo.GetOneProduct(id);
                if (foundProduct == null)
                {
                    ModelState.AddModelError("", "This product has just been deleted");
                    return(View(bindedProduct));
                }
                CProduct cProduct = new CProduct(foundProduct.UniqueID, foundProduct.Name, foundProduct.Category, foundProduct.Price,
                                                 bindedProduct.Quantity);

                // use tempdata to store products in a cart
                // do not know how to return a serialized string directly, use a local text file for now
                string          path    = "../../SimplyWriteData.json";
                JsonFilePersist persist = new JsonFilePersist(path);
                string          json    = "";
                if (TempData.ContainsKey("Cart"))
                {
                    json = TempData.Peek("Cart").ToString();
                }

                List <CProduct> products = persist.ReadProductsTempData(json);
                if (products == null)
                {
                    products = new List <CProduct>();
                }
                products.Add(cProduct);
                string cart = persist.WriteProductsTempData(products);
                TempData["Cart"] = cart;
                TempData.Keep("Cart");
                // route parameter is an object
                return(RedirectToAction("Select", "Store", new StoreViewModel {
                    Storeloc = TempData.Peek("storeLoc").ToString()
                }));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "error while tring to add a product");
                ModelState.AddModelError("", "failed to create a product");
                return(View(bindedProduct));
            }
        }
        public ActionResult Edit(string id, BindedProductViewModel viewDP)
        {
            string          path     = "../../SimplyWriteData.json";
            JsonFilePersist persist  = new JsonFilePersist(path);
            List <CProduct> products = persist.ReadProductsTempData(TempData.Peek("Cart").ToString());

            if (products == null)
            {
                return(RedirectToAction("CheckCart"));
            }
            foreach (var product in products)
            {
                if (product.UniqueID == id)
                {
                    product.Quantity = viewDP.Quantity;
                    break;
                }
            }
            string cart = persist.WriteProductsTempData(products);

            TempData["Cart"] = cart;
            TempData.Keep("Cart");
            return(RedirectToAction("CheckCart"));
        }