public async Task <PagedList <Person> > GetPersonsAsync(PersonParametersDto personParameters) { if (personParameters == null) { throw new ArgumentNullException(nameof(personParameters)); } // TODO: AsNoTracking() should increase performance, but will break the sort tests. need to investigate var collection = _context.Persons .Include(t => t.PersonTypes) .Include(e => e.Companies) as IQueryable <Person>; var sieveModel = new SieveModel { Sorts = personParameters.SortOrder ?? "Id", Filters = personParameters.Filters }; collection = _sieve.Apply(sieveModel, collection); return(await PagedList <Person> .CreateAsync(collection, personParameters.PageNumber, personParameters.PageSize)); }
public async Task <IActionResult> GetPersonsAsync([FromQuery] PersonParametersDto personParameters) { var personsFromRepo = await _personRepository.GetPersonsAsync(personParameters); var paginationMetadata = new { totalCount = personsFromRepo.MetaData.TotalCount, pageSize = personsFromRepo.MetaData.PageSize, currentPageSize = personsFromRepo.MetaData.CurrentPageSize, currentStartIndex = personsFromRepo.MetaData.CurrentStartIndex, currentEndIndex = personsFromRepo.MetaData.CurrentEndIndex, pageNumber = personsFromRepo.MetaData.PageNumber, totalPages = personsFromRepo.MetaData.TotalPages, hasPrevious = personsFromRepo.MetaData.HasPrevious, hasNext = personsFromRepo.MetaData.HasNext }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var personsDto = _mapper.Map <IEnumerable <PersonDto> >(personsFromRepo); var response = new Response <IEnumerable <PersonDto> >(personsDto); return(Ok(response)); }
public async Task <PagingResponse <PersonDto> > GetPersonsAsync(PersonParametersDto personParameters) { var queryStringParam = new Dictionary <string, string> { ["pageNumber"] = personParameters.PageNumber.ToString(), ["pageSize"] = personParameters.PageSize.ToString(), ["sortOrder"] = personParameters.SortOrder.ToString(), ["filters"] = String.IsNullOrEmpty(personParameters.Filters) ? "" : $"(FirstName|LastName|EmailAddress)@=* {personParameters.Filters}" }; using (var httpClient = new HttpClient()) { using (var response = await httpClient.GetAsync(QueryHelpers.AddQueryString(uri.ToString(), queryStringParam))) { if (response.IsSuccessStatusCode) { var content = await response.Content.ReadAsStringAsync(); var pagingResponse = new PagingResponse <PersonDto> { Items = JsonConvert.DeserializeObject <PageListPerson>(content).Persons, Metadata = JsonConvert.DeserializeObject <MetaData>(response.Headers.GetValues("x-pagination").First()) }; pagingResponse.Filters = personParameters.Filters; pagingResponse.SortOrder = personParameters.SortOrder; return(pagingResponse); } return(null); } } }
public async Task <IActionResult> Index(int page = 1, int pageSize = 10, string filters = "", string sortOrder = "") { ViewBag.pageSize = pageSize; ViewBag.filter = filters; ViewData["IdSortParm"] = sortOrder == "Id" ? "-Id" : "Id"; ViewData["FirstNameSortParm"] = sortOrder == "FirstName" ? "-FirstName" : "FirstName"; ViewData["LastNameSortParm"] = sortOrder == "LastName" ? "-LastName" : "LastName"; ViewData["EmailAddressSortParm"] = sortOrder == "EmailAddress" ? "-EmailAddress" : "EmailAddress"; PersonParametersDto personParameters = new PersonParametersDto() { PageNumber = page, PageSize = pageSize, SortOrder = sortOrder, Filters = filters }; var pagingResponse = await _personRepo.GetPersonsAsync(personParameters); return(View(pagingResponse)); }