public async Task <IActionResult> GetVets([FromQuery] VetParametersDto vetParametersDto) { var vetsFromRepo = await _vetRepository.GetVetsAsync(vetParametersDto); var paginationMetadata = new { totalCount = vetsFromRepo.TotalCount, pageSize = vetsFromRepo.PageSize, currentPageSize = vetsFromRepo.CurrentPageSize, currentStartIndex = vetsFromRepo.CurrentStartIndex, currentEndIndex = vetsFromRepo.CurrentEndIndex, pageNumber = vetsFromRepo.PageNumber, totalPages = vetsFromRepo.TotalPages, hasPrevious = vetsFromRepo.HasPrevious, hasNext = vetsFromRepo.HasNext }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var vetsDto = _mapper.Map <IEnumerable <VetDto> >(vetsFromRepo); var response = new Response <IEnumerable <VetDto> >(vetsDto); return(Ok(response)); }
public async Task <PagedList <Vet> > GetVetsAsync(VetParametersDto vetParameters) { if (vetParameters == null) { throw new ArgumentNullException(nameof(vetParameters)); } var collection = _context.Vets as IQueryable <Vet>; // TODO: AsNoTracking() should increase performance, but will break the sort tests. need to investigate var sieveModel = new SieveModel { Sorts = vetParameters.SortOrder ?? "VetId", Filters = vetParameters.Filters }; collection = _sieveProcessor.Apply(sieveModel, collection); return(await PagedList <Vet> .CreateAsync(collection, vetParameters.PageNumber, vetParameters.PageSize)); }