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)); }
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)); }