public async Task <IActionResult> Products(int startPage = 0)
        {
            string sessionCookie = "BeachTowelShop-Session";

            if (!Request.Cookies.ContainsKey(sessionCookie))
            {
                await Set("BeachTowelShop-Session", Guid.NewGuid().ToString(), 100).ConfigureAwait(false);
            }
            var pageSize = 20;

            var fromPage = startPage * pageSize;

            ViewBag.NextPage     = startPage + 1;
            ViewBag.PreviousPage = startPage - 1;

            GalleryProductsViewModel productList;

            productList = new GalleryProductsViewModel();
            List <CategoryViewModel> categoryViewModelList;

            if (!_cache.TryGetValue("CategoryViewModel", out categoryViewModelList))
            {
                var allCategories = await __productService.GetAllCategories().ConfigureAwait(false);

                categoryViewModelList = _mapper.Map <List <CategoryViewModel> >(allCategories).OrderBy(a => a.Name).ToList();
                _cache.Set("CategoryViewModel", categoryViewModelList);
            }
            categoryViewModelList = _cache.Get("CategoryViewModel") as List <CategoryViewModel>;
            productList.AllCategories.AddRange(categoryViewModelList);
            List <GalleryProductViewModel> productViewModelList;

            if (!_cache.TryGetValue("GalleryProductViewModel", out productViewModelList))
            {
                var allProducts = await __productService.GetAllProducts().ConfigureAwait(false);

                productViewModelList = _mapper.Map <List <GalleryProductViewModel> >(allProducts);

                _cache.Set("GalleryProductViewModel", productViewModelList);
            }
            productViewModelList = _cache.Get("GalleryProductViewModel") as List <GalleryProductViewModel>;
            var lastPage = productViewModelList.Count / pageSize;

            if (fromPage >= lastPage)
            {
                ViewBag.NextPage     = lastPage;
                ViewBag.PreviousPage = lastPage - 1;
            }

            ViewBag.Action = "Products";

            productList.AllProducts = productViewModelList.Skip(fromPage).Take(pageSize).ToList();



            return(View(productList));
        }
        public async Task <IActionResult> GetItemsForCategory(string categoryid, int startPage = 0)
        {
            var pageSize = 20;

            var fromPage = startPage * pageSize;

            ViewBag.NextPage     = startPage + 1;
            ViewBag.PreviousPage = startPage - 1;
            GalleryProductsViewModel productList;


            productList = new GalleryProductsViewModel();
            List <CategoryViewModel> categoryViewModelList;

            if (!_cache.TryGetValue("CategoryViewModel", out categoryViewModelList))
            {
                var allCategories = await __productService.GetAllCategories().ConfigureAwait(false);

                categoryViewModelList = _mapper.Map <List <CategoryViewModel> >(allCategories).OrderBy(a => a.Name).ToList();
                _cache.Set("CategoryViewModel", categoryViewModelList);
            }
            categoryViewModelList = _cache.Get("CategoryViewModel") as List <CategoryViewModel>;
            productList.AllCategories.AddRange(categoryViewModelList);
            List <GalleryProductViewModel> productViewModelList;

            if (!_cache.TryGetValue($"GalleryProductViewModelFiler{categoryid}", out productViewModelList))
            {
                var allProducts = await __productService.GetAllProductsForCategory(categoryid).ConfigureAwait(false);

                productViewModelList = _mapper.Map <List <GalleryProductViewModel> >(allProducts);

                _cache.Set($"GalleryProductViewModelFilter{categoryid}", productViewModelList);
            }
            productViewModelList = _cache.Get($"GalleryProductViewModelFilter{categoryid}") as List <GalleryProductViewModel>;
            var lastPage = productViewModelList.Count / pageSize;

            if (fromPage >= lastPage)
            {
                ViewBag.NextPage     = lastPage;
                ViewBag.PreviousPage = lastPage - 1;
            }

            ViewBag.CategoryId      = $"{categoryid}";
            productList.AllProducts = productViewModelList.Skip(fromPage).Take(pageSize).ToList();
            ViewBag.Action          = "Sort";
            return(View("Products", productList));
        }