Example #1
0
        public async Task <IActionResult> GetCities([FromQuery] CityParametersDto cityParametersDto)
        {
            var citysFromRepo = await _cityRepository.GetCitiesAsync(cityParametersDto);

            var paginationMetadata = new
            {
                totalCount        = citysFromRepo.TotalCount,
                pageSize          = citysFromRepo.PageSize,
                currentPageSize   = citysFromRepo.CurrentPageSize,
                currentStartIndex = citysFromRepo.CurrentStartIndex,
                currentEndIndex   = citysFromRepo.CurrentEndIndex,
                pageNumber        = citysFromRepo.PageNumber,
                totalPages        = citysFromRepo.TotalPages,
                hasPrevious       = citysFromRepo.HasPrevious,
                hasNext           = citysFromRepo.HasNext
            };

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

            var citiesDto = _mapper.Map <IEnumerable <CityDto> >(citysFromRepo);
            var response  = new Response <IEnumerable <CityDto> >(citiesDto);

            return(Ok(response));
        }
Example #2
0
        public async Task <PagedList <City> > GetCitiesAsync(CityParametersDto cityParameters)
        {
            if (cityParameters == null)
            {
                throw new ArgumentNullException(nameof(cityParameters));
            }

            var collection = _context.Cities
                             as IQueryable <City>; // TODO: AsNoTracking() should increase performance, but will break the sort tests. need to investigate

            var sieveModel = new SieveModel
            {
                Sorts   = cityParameters.SortOrder ?? "CityId",
                Filters = cityParameters.Filters
            };

            collection = _sieveProcessor.Apply(sieveModel, collection);

            return(await PagedList <City> .CreateAsync(collection,
                                                       cityParameters.PageNumber,
                                                       cityParameters.PageSize));
        }