public PagedList <Category> GetCategories(CategoryParametersDto categoryParameters)
        {
            if (categoryParameters == null)
            {
                throw new ArgumentNullException(nameof(categoryParameters));
            }

            var collection = _context.Categories as IQueryable <Category>;

            if (!string.IsNullOrWhiteSpace(categoryParameters.CategoryName))
            {
                var categoryName = categoryParameters.CategoryName.Trim();
                collection = collection.Where(c => c.CategoryName == categoryName);
            }

            var sieveModel = new SieveModel
            {
                Sorts = categoryParameters.SortOrder
            };

            collection = _sieveProcessor.Apply(sieveModel, collection);


            return(PagedList <Category> .Create(collection,
                                                categoryParameters.PageNumber,
                                                categoryParameters.PageSize));
        }
        public ActionResult <IEnumerable <CategoryDto> > GetCategories([FromQuery] CategoryParametersDto categoryParametersDto)
        {
            var categoriesFromRepo = _categoryRepository.GetCategories(categoryParametersDto);

            var paginationMetadata = new
            {
                totalCount       = categoriesFromRepo.TotalCount,
                pageSize         = categoriesFromRepo.PageSize,
                currentPage      = categoriesFromRepo.CurrentPage,
                totalPages       = categoriesFromRepo.TotalPages,
                previousPageLink = categoriesFromRepo.HasPrevious,
                nextPageLink     = categoriesFromRepo.HasNext
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));

            var categoriesDto = _mapper.Map <IEnumerable <CategoryDto> >(categoriesFromRepo);

            return(Ok(categoriesDto));
        }