Exemple #1
0
        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()));
        }