public async Task <IActionResult> GetVisitPersons([FromQuery] VisitPersonParametersDto visitPersonParametersDto) { var visitPersonsFromRepo = await _visitPersonRepository.GetVisitPersonsAsync(visitPersonParametersDto); var paginationMetadata = new { totalCount = visitPersonsFromRepo.MetaData.TotalCount, pageSize = visitPersonsFromRepo.MetaData.PageSize, currentPageSize = visitPersonsFromRepo.MetaData.CurrentPageSize, currentStartIndex = visitPersonsFromRepo.MetaData.CurrentStartIndex, currentEndIndex = visitPersonsFromRepo.MetaData.CurrentEndIndex, pageNumber = visitPersonsFromRepo.MetaData.PageNumber, totalPages = visitPersonsFromRepo.MetaData.TotalPages, hasPrevious = visitPersonsFromRepo.MetaData.HasPrevious, hasNext = visitPersonsFromRepo.MetaData.HasNext }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var visitPersonsDto = _mapper.Map <IEnumerable <VisitPersonDto> >(visitPersonsFromRepo); var response = new Response <IEnumerable <VisitPersonDto> >(visitPersonsDto); return(Ok(response)); }
public async Task <PagingResponse <VisitPersonDto> > GetVisitPersonsAsync(VisitPersonParametersDto visitPersonParameters) { var queryStringParam = new Dictionary <string, string> { ["pageNumber"] = visitPersonParameters.PageNumber.ToString(), ["pageSize"] = visitPersonParameters.PageSize.ToString(), ["sortOrder"] = visitPersonParameters.SortOrder.ToString(), ["filters"] = visitPersonParameters.Filters.ToString() }; using (var httpClient = new HttpClient()) { using (var response = await httpClient.GetAsync(QueryHelpers.AddQueryString(uriVisitPerson.ToString(), queryStringParam))) { if (response.IsSuccessStatusCode) { var content = await response.Content.ReadAsStringAsync(); var pagingResponse = new PagingResponse <VisitPersonDto> { Items = JsonConvert.DeserializeObject <PageListVisitPersons>(content).VisitPersons, Metadata = JsonConvert.DeserializeObject <MetaData>(response.Headers.GetValues("x-pagination").First()) }; pagingResponse.Filters = visitPersonParameters.Filters; pagingResponse.SortOrder = visitPersonParameters.SortOrder; return(pagingResponse); } return(null); } } }
public async Task <PagedList <VisitPerson> > GetVisitPersonsAsync(VisitPersonParametersDto visitPersonParameters) { if (visitPersonParameters == null) { throw new ArgumentNullException(nameof(visitPersonParameters)); } var collection = _context.VisitPersons .Include(v => v.Visit) .Include(p => p.Person) .Include(t => t.VehicleType) as IQueryable <VisitPerson>; // TODO: AsNoTracking() should increase performance, but will break the sort tests. need to investigate var sieveModel = new SieveModel { Sorts = visitPersonParameters.SortOrder ?? "VisitPersonId", Filters = visitPersonParameters.Filters }; collection = _sieveProcessor.Apply(sieveModel, collection); return(await PagedList <VisitPerson> .CreateAsync(collection, visitPersonParameters.PageNumber, visitPersonParameters.PageSize)); }