Пример #1
0
        public async Task <PagedList <Product> > GetPagedProductsWthCategoriesByFiltersAsync(PaginationQuery pagination, FilterParams filterParams)
        {
            IQueryable <Product> products = ApplicationDbContext.Products
                                            .Include(a => a.Category);
            FilterProductParams filterProductParams = filterParams as FilterProductParams;


            if (filterProductParams.MaxPrice == 0)
            {
                filterProductParams.MaxPrice = long.MaxValue;
            }

            if (FilterProductParams.HasSearchStringAndValidPriceRange(filterProductParams))
            {
                products = products.Where(p => p.Name.Contains(filterProductParams.SearchString) && (p.Price >= filterProductParams.MinPrice && p.Price <= filterProductParams.MaxPrice));
            }
            else if (FilterProductParams.HasSearchString(filterProductParams))
            {
                products = products.Where(p => p.Name.Contains(filterProductParams.SearchString));
            }
            else if (FilterProductParams.HasValidPriceRange(filterProductParams))
            {
                products = products.Where(p => p.Price >= filterProductParams.MinPrice &&
                                          p.Price <= filterProductParams.MaxPrice);
            }

            if (FilterParams.HasSort(filterProductParams))
            {
                if (string.Equals(SortingTypes.ByName, filterProductParams.Sort,
                                  System.StringComparison.CurrentCultureIgnoreCase) && filterProductParams.SortDirection == true)
                {
                    products = products.OrderBy(p => p.Name);
                }
                else if (string.Equals(SortingTypes.ByName, filterProductParams.Sort,
                                       System.StringComparison.CurrentCultureIgnoreCase) && filterProductParams.SortDirection == false)
                {
                    products = products.OrderByDescending(p => p.Name);
                }

                else if (string.Equals(SortingTypes.ByPrice, filterProductParams.Sort,
                                       System.StringComparison.CurrentCultureIgnoreCase) && filterProductParams.SortDirection == true)
                {
                    products = products.OrderBy(p => p.Price);
                }
                else if (string.Equals(SortingTypes.ByPrice, filterProductParams.Sort,
                                       System.StringComparison.CurrentCultureIgnoreCase) && filterProductParams.SortDirection == false)
                {
                    products = products.OrderByDescending(p => p.Price);
                }
            }
            else
            {
                products = products.OrderBy(p => p.Name);
            }

            return(await PagedList <Product> .ToPagedList(products, pagination.PageNumber, pagination.PageSize));
        }
Пример #2
0
        public async Task <IActionResult> GetProductsByPageAsync([FromQuery] PaginationQuery paginationQuery, [FromQuery] FilterProductParams filterParams)
        {
            try
            {
                PagedList <Product> productsInDb = await _unitOfWork.Products.GetPagedProductsWthCategoriesByFiltersAsync(paginationQuery, filterParams);

                if (productsInDb == null)
                {
                    return(NotFound());
                }
                var productsDtoPage = PagedListMapper <Product, ProductDto> .Map(productsInDb, _mapper);

                var metadata = new
                {
                    productsDtoPage.TotalCount,
                    productsDtoPage.PageSize,
                    productsDtoPage.CurrentPage,
                    productsDtoPage.TotalPages,
                    productsDtoPage.HasNext,
                    productsDtoPage.HasPrevious
                };

                Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(metadata));

                return(Ok(productsDtoPage));
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }