public async Task <IActionResult> Get([FromQuery] PaginationModel pagination, [FromQuery] string categoriesString, [FromQuery] string subcategoriesString, [FromQuery] bool includeBlocked = false) { if (categoriesString == null) { categoriesString = ""; } if (subcategoriesString == null) { subcategoriesString = ""; } if (pagination.FilterElement == null) { pagination.FilterElement = ""; } if (pagination.FilterValue == null) { pagination.FilterValue = ""; } if (pagination.SortElement == null) { pagination.SortElement = ""; } ICollection <string> categories = categoriesString.Split(new[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries); ICollection <string> subcategories = subcategoriesString.Split(new[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries); return(await this.Execute(false, false, async() => { ProductDetailsListPaginatedModel result = await products.GetAll(pagination, categories, subcategories, includeBlocked); return this.Ok(result); })); }
//Get details for a range of products - filtered, sorted and paginated public async Task <ProductDetailsListPaginatedModel> GetAll(PaginationModel pagination, ICollection <string> categories, ICollection <string> subcategories, bool includeBlocked) { ICollection <ProductDetailsModel> products = db.Products .ProjectTo <ProductDetailsModel>() .ToList(); foreach (var product in products) { product.PromoDiscountsIds = await this.GetAssociatedPromoDiscuntsIds(product.Id); } foreach (var product in products) { product.Categories = await this.GetAssociatedCategoryIds(product.Id); } foreach (var product in products) { product.Subcategories = await this.GetAssociatedSubcategoryIds(product.Id); } foreach (ProductDetailsModel product in products) { product.Discount = await this.CalculateDiscount(product.Id); } if (!string.IsNullOrEmpty(pagination.FilterElement)) { products = await this.FilterElements(products, pagination.FilterElement, pagination.FilterValue); } if (categories != null && categories.Count > 0) { products = await this.FilterCategories(products, categories); } if (subcategories != null && subcategories.Count > 0) { products = await this.FilterSubcategories(products, subcategories); } if (!string.IsNullOrEmpty(pagination.SortElement)) { products = await this.SortElements(products, pagination.SortElement, pagination.SortDesc); } if (pagination.FilterElement.ToLower() != SortAndFilterConstants.IsBlocked && includeBlocked == false) { products = await this.FilterElements(products, SortAndFilterConstants.IsBlocked, false.ToString()); } int productsCount = products.Count(); if (pagination.Page < 1) { pagination.Page = 1; } if (pagination.Size <= 1) { pagination.Size = productsCount; } products = products.Skip(pagination.Size * (pagination.Page - 1)).Take(pagination.Size).ToList(); ICollection <CategoryDetailsModel> uniqueCategories = await this.PopulateCategories(products); ICollection <SubcategoryDetailsModel> uniqueSubategories = await this.PopulateSubcategories(products); ProductDetailsListPaginatedModel result = new ProductDetailsListPaginatedModel { Products = products, ProductsCount = productsCount }; result.Categories = uniqueCategories; result.Subcategories = uniqueSubategories; return(result); }