public async Task <IActionResult> GetPaginated([FromQuery] ProductPagingModel parameters) { var products = await _productRepository.ListAllAsync(); var productsPaginated = _productRepository.ListPaginated(parameters.pageNumber, parameters.pageSize); // if CurrentPage is greater than 1 means it has previousPage var previousPage = parameters.pageNumber > 1 ? "Yes" : "No"; var TotalPages = (int)Math.Ceiling(products.Count / (double)parameters.pageSize); // if TotalPages is greater than CurrentPage means it has nextPage var nextPage = parameters.pageNumber < (int)Math.Ceiling(products.Count / (double)parameters.pageSize) ? "Yes" : "No"; var paginationMetadata = new { totalCount = products.Count, pageSize = parameters.pageSize, currentPage = parameters.pageNumber, totalPages = TotalPages, previousPage, nextPage }; // Setting Header HttpContext.Response.Headers.Add("Paging-Headers", JsonConvert.SerializeObject(paginationMetadata)); return(Ok(productsPaginated)); }
public ActionResult List( [CanBeNull][Bind(Prefix = "category")] string category = null, [CanBeNull][Bind(Prefix = "subCategory")] string subCategory = null, [CanBeNull][Bind(Prefix = "page")] int page = 0, [CanBeNull][Bind(Prefix = "pageSize")] int pageSize = 6, [CanBeNull][Bind(Prefix = "sort")] string sort = "name:asc") { if (page < 0) { page = 0; } if (pageSize < 1) { pageSize = 1; } var searchStringModel = this.contentSearchHelper.GetDataSourceQuery(Context.Item, Context.Device, ProductListRenderingId).ToList(); if (!searchStringModel.Any()) { return(new EmptyResult()); } string currectCategory = !string.IsNullOrEmpty(subCategory) ? subCategory : category; if (!string.IsNullOrEmpty(currectCategory)) { Item categoryItem = this.productService.GetCategory(currectCategory); if (ReferenceEquals(categoryItem, null)) { return(new EmptyResult()); } var categories = this.productService.GetRelatedCategories(categoryItem.ID); categories.Insert(0, categoryItem); foreach (Item item in categories) { searchStringModel.Add(new SearchStringModel(Constants.KnownFieldNames.ProductClassesFieldName, IdHelper.NormalizeGuid(item.ID), "should")); } } var sorting = ProductSortingModel.Parse(sort); searchStringModel.Add(new SearchStringModel("sort", sorting.Field, sorting.Direction)); var pagedProducts = this.productService.GetProducts(searchStringModel, page, pageSize); var productIds = pagedProducts.List.Select(p => p["ExternalID"]).ToList(); var prices = this.pricingService.GetProductBulkPrices(productIds); var stockInfos = this._inventoryService.GetStockInformation(Context.Site.Name, productIds, StockDetailsLevel.All, this._obecContext.InventoryLocation, string.Empty); var productModels = pagedProducts.List.Select(p => this.GetProductModel(p, prices[p["ExternalID"]], stockInfos.FirstOrDefault(i => i.Product.ProductId.Equals(p["ExternalID"], StringComparison.OrdinalIgnoreCase)))); var pagingModel = new ProductPagingModel(pagedProducts.Page, pagedProducts.PageSize, pagedProducts.TotalCount); var model = new ProductListModel(productModels, pagingModel, sorting); return(this.View(model)); }