public async Task <CustomList <ProductReturnModel> > GetProducts(int page, int count, ProductSearchFilterModel filterModel) { if (page <= 0 || count <= 0) { throw new InvalidPaginationDataException(); } var startAt = (page - 1) * count; var products = await _context.Products .Where(p => p.Name.Contains(filterModel.Name, StringComparison.InvariantCultureIgnoreCase) && p.Price >= filterModel.MinPrice && p.Price <= filterModel.MaxPrice) .OrderByDescending(p => p.AddedDate) .Skip(startAt) .Take(count).ToListAsync(); foreach (var product in products) { if (string.IsNullOrEmpty(product.Image) || string.IsNullOrWhiteSpace(product.Image)) { product.Image = DefaultImageUrl; } } var totalCount = await _context.Products .Where(p => p.Name.Contains(filterModel.Name, StringComparison.InvariantCultureIgnoreCase) && p.Price >= filterModel.MinPrice && p.Price <= filterModel.MaxPrice) .OrderByDescending(p => p.AddedDate).CountAsync(); var totalPages = totalCount / count + (totalCount % count > 0 ? 1 : 0); var productReturnModels = _mapper.Map <List <Product>, CustomList <ProductReturnModel> >(products); productReturnModels.TotalItems = totalCount; productReturnModels.TotalPages = totalPages; productReturnModels.CurrentPage = page; productReturnModels.IsListPartial = true; return(productReturnModels); }
public async Task <IActionResult> GetProducts([FromQuery] ProductSearchFilterModel filterModel, int count = 10, int page = 1) { var result = await _productService.GetProducts(page, count, filterModel); return(ApiResponder.RespondSuccess(result, null, result.GetPaginationData())); }