public ActionResult getTopCategories()
        {
            List <TopCategory> topCategories = new List <TopCategory>();
            var catlist = db.catagories.ToList();

            foreach (var i in db.booking.GroupBy(e => e.CategoryId).Select(group => new
            {
                count = group.Count(),
                id = group.Key
            }).OrderByDescending(a => a.count))
            {
                TopCategory tcat = new TopCategory {
                    count = i.count, id = i.id
                };
                catagory cat = catlist.FirstOrDefault(e => e.cat_Id == tcat.id);
                tcat.catname = cat.cat_Name;
                topCategories.Add(tcat);
            }

            return(Ok(topCategories));
        }
        public IActionResult ProductsBySubCategory(string topCategoryNameUrl, string middleCategoryNameUrl, string subCategoryNameUrl, int?page)
        {
            var    locale  = Request.HttpContext.Features.Get <IRequestCultureFeature>();
            string culture = locale.RequestCulture.UICulture.ToString();

            try
            {
                int         currentPage = page ?? 1;
                TopCategory topCate     = _topRepo.GetTopCateByUrlTR(topCategoryNameUrl) ?? _topRepo.GetTopCateByUrlEN(topCategoryNameUrl);

                MiddleCategory midCate = _midRepo.GetMidCateByUrlTR(middleCategoryNameUrl, topCate.Id) ?? _midRepo.GetMidCateByUrlEN(middleCategoryNameUrl, topCate.Id);

                SubCategory subCate = _subRepo.GetSubCateByUrlTR(subCategoryNameUrl, midCate.Id, topCate.Id) ?? _subRepo.GetSubCateByUrlEN(subCategoryNameUrl, midCate.Id, topCate.Id);

                ViewBag.metaTitle = culture.Equals("tr") ? subCate.HeadTitleTR : culture.Equals("ru") ? subCate.HeadTitleRU : subCate.HeadTitleEN;
                ViewBag.metaDesc  = culture.Equals("tr") ? subCate.HeadDescriptionTR : culture.Equals("ru") ? subCate.HeadDescriptionRU : subCate.HeadDescriptionEN;

                int productCount = _productRepo.CountEntity(x => x.TopCategoryId == topCate.Id && x.MiddleCategoryId == midCate.Id && x.SubCategoryId == subCate.Id);
                if (productCount == 0)
                {
                    HttpContext.Session.SetString("alert", _localizer["Bu kategoride ürün bulunmamaktadır."]);
                    return(LocalRedirect("/"));
                }

                double division = Convert.ToDouble(productCount) / Convert.ToDouble(30);
                int    lastPage = Convert.ToInt32(Math.Ceiling(division));

                if (currentPage > lastPage || currentPage < 0)
                {
                    _errorRepo.CreateEntity(new ErrorLog
                    {
                        ErrorLocation = "ProductsBySubCategory",
                        Culture       = culture,
                        ErrorDetail   = $"Gitmek istenilen sayfa numarası hatalı. Hatalı sayfa numarası: {currentPage}",
                        ErrorUrl      = HttpContext.Request.Path
                    });
                    return(LocalRedirect("/Error/500"));
                }

                var products = _productRepo.GetProductsWithSubcateId(subCate.Id).AsQueryable();
                var sortVal  = HttpContext.Session.GetString("categorySort");
                if (sortVal != null)
                {
                    if (sortVal.Equals("0"))
                    {
                        ViewBag.selectedDefault = "selected";
                    }
                    else if (sortVal.Equals("1"))
                    {
                        products = culture.Equals("tr") ? products.OrderBy(x => x.NameTR) : culture.Equals("ru") ? products.OrderBy(x => x.NameRU) : products.OrderBy(x => x.NameEN);
                        ViewBag.selectedByProductName = "selected";
                    }
                    else if (sortVal.Equals("2"))
                    {
                        products = products.OrderBy(x => x.Brand.BrandName);
                        ViewBag.selectedByBrandName = "selected";
                    }
                    else if (sortVal.Equals("3"))
                    {
                        products = products.OrderByDescending(x => x.CreatedDate);
                        ViewBag.selectedByNew = "selected";
                    }
                    else if (sortVal.Equals("4"))
                    {
                        products = products.OrderByDescending(x => x.DiscountRate);
                        ViewBag.selectedBySale = "selected";
                    }
                }
                var targetProducts =
                    page == 1 ? products.Take(30)
                            : (page > 1 && page < lastPage) ? products.Skip((currentPage - 1) * 30).Take(30)
                            : page == lastPage?products.Skip((currentPage - 1) * 30).Take(productCount - ((currentPage - 1) * 30)) : null;

                if (targetProducts == null)
                {
                    _errorRepo.CreateEntity(new ErrorLog
                    {
                        ErrorLocation = "ProductsBySubCategory",
                        Culture       = culture,
                        ErrorDetail   = "targetProducts null döndü",
                        ErrorUrl      = HttpContext.Request.Path
                    });
                    return(LocalRedirect("/Error/500"));
                }

                ViewBag.topcategoryName = culture.Equals("tr") ? midCate.TopCategory.NameTR : culture.Equals("ru") ? midCate.TopCategory.NameRU : midCate.TopCategory.NameEN;

                ViewBag.topcategoryNameUrl = culture.Equals("tr") ? midCate.TopCategory.TopCategoryNameUrlTR : midCate.TopCategory.TopCategoryNameUrlEN;

                ViewBag.midcategoryName = culture.Equals("tr") ? midCate.NameTR : culture.Equals("ru") ? midCate.NameRU : midCate.NameEN;

                ViewBag.midcategoryNameUrl = culture.Equals("tr") ? midCate.MiddleCategoryNameUrlTR : midCate.MiddleCategoryNameUrlEN;

                //category sidebar componenti
                ViewBag.cateId             = subCate.Id;
                ViewBag.subcategoryName    = culture.Equals("tr") ? subCate.NameTR : culture.Equals("ru") ? subCate.NameRU : subCate.NameEN;
                ViewBag.subcategoryNameUrl = subCate.SubCategoryNameUrlTR;

                ViewBag.currentPage     = currentPage;
                ViewBag.paginationCount = lastPage;

                List <ProductDto> proDtos = new List <ProductDto>();

                foreach (var item in products)
                {
                    ProductDto dto = new ProductDto();
                    dto.MainPhotoFileName = item.MainPhotoFileName;
                    dto.PhotoAltTag       = culture.Equals("tr") ? item.PhotoAltTagTR : culture.Equals("ru") ? item.PhotoAltTagRU : item.PhotoAltTagEN;
                    dto.HasNewBadge       = item.HasNewBadge;
                    dto.IsFreeShipping    = item.IsFreeShipping;
                    dto.Name           = culture.Equals("tr") ? item.NameTR : culture.Equals("ru") ? item.NameRU : item.NameEN;
                    dto.Id             = item.Id;
                    dto.ProductNameUrl = culture.Equals("tr") ? item.ProductNameUrlTR : culture.Equals("ru") ? item.ProductNameUrlRU : item.ProductNameUrlEN;
                    dto.BrandName      = item.Brand.BrandName;
                    dto.BrandNameUrl   = item.Brand.BandNameUrl;

                    dto.ProductHref = culture.Equals("tr") ?
                                      $"/tr/urun-detay/{item.Brand.BandNameUrl}/{item.TopCategory.TopCategoryNameUrlTR}/{item.MiddleCategory.MiddleCategoryNameUrlTR}/{item.SubCategory.SubCategoryNameUrlTR}/{item.NameTR.ConvertToFriendlyUrl()}"
                            : culture.Equals("ru") ? $"/ru/product-detail/{item.Brand.BandNameUrl}/{item.TopCategory.TopCategoryNameUrlRU}/{item.MiddleCategory.MiddleCategoryNameUrlRU}/{item.SubCategory.SubCategoryNameUrlRU}/{item.NameEN.ConvertToFriendlyUrl()}"
                            : $"/en/product-detail/{item.Brand.BandNameUrl}/{item.TopCategory.TopCategoryNameUrlEN}/{item.MiddleCategory.MiddleCategoryNameUrlEN}/{item.SubCategory.SubCategoryNameUrlEN}/{item.NameEN.ConvertToFriendlyUrl()}";

                    proDtos.Add(dto);
                }

                //pagination numaralandırması
                List <int> pageNumbers1 = new List <int>();
                for (int i = 1; i <= 5; i++)
                {
                    if (currentPage - i > 0)
                    {
                        pageNumbers1.Add(currentPage - i);
                    }
                }
                int listCount = pageNumbers1.Count;
                for (int i = 0, j = 1; i < 10 - listCount; i++)
                {
                    if (currentPage + i <= lastPage)
                    {
                        pageNumbers1.Add(currentPage + i);
                    }
                }
                pageNumbers1.Sort();

                ViewBag.numbers = pageNumbers1;

                return(View(proDtos));
            }
            catch (Exception e)
            {
                _errorRepo.CreateEntity(new ErrorLog
                {
                    ErrorLocation = "ProductsBySubCategory",
                    Culture       = culture,
                    ErrorDetail   = e.Message + " , " + e.InnerException,
                    ErrorUrl      = HttpContext.Request.Path
                });
                HttpContext.Session.SetString("alert", _localizer["Hata oluştu ve kayıt altına alındı."]);
                return(LocalRedirect("/"));
            }
        }