public async Task <IActionResult> GetVisits([FromQuery] VisitParametersDto visitParameters) { var visitsFromRepo = await _visitRepo.GetVisitsAsync(visitParameters); var paginationMetadata = new { totalCount = visitsFromRepo.MetaData.TotalCount, pageSize = visitsFromRepo.MetaData.PageSize, currentPageSize = visitsFromRepo.MetaData.CurrentPageSize, currentStartIndex = visitsFromRepo.MetaData.CurrentStartIndex, currentEndIndex = visitsFromRepo.MetaData.CurrentEndIndex, pageNumber = visitsFromRepo.MetaData.PageNumber, totalPages = visitsFromRepo.MetaData.TotalPages, hasPrevious = visitsFromRepo.MetaData.HasPrevious, hasNext = visitsFromRepo.MetaData.HasNext }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var visitsDto = _mapper.Map <IEnumerable <VisitDto> >(visitsFromRepo); var response = new Response <IEnumerable <VisitDto> >(visitsDto); return(Ok(response)); }
public async Task <PagingResponse <VisitDto> > GetVisitsAsync(VisitParametersDto visitParameters) { var queryStringParam = new Dictionary <string, string> { ["pageNumber"] = visitParameters.PageNumber.ToString(), ["pageSize"] = visitParameters.PageSize.ToString(), ["sortOrder"] = visitParameters.SortOrder.ToString(), ["filters"] = String.IsNullOrEmpty(visitParameters.Filters) ? "" : $"(Reason|Company)@=* {visitParameters.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 <VisitDto> { Items = JsonConvert.DeserializeObject <PageListVisit>(content).Visits, Metadata = JsonConvert.DeserializeObject <MetaData>(response.Headers.GetValues("x-pagination").First()) }; pagingResponse.Filters = visitParameters.Filters; pagingResponse.SortOrder = visitParameters.SortOrder; return(pagingResponse); } return(null); } } }
public async Task <PagedList <Visit> > GetVisitsAsync(VisitParametersDto visitParameters) { if (visitParameters == null) { throw new ArgumentNullException(nameof(visitParameters)); } // TODO: AsNoTracking() should increase performance, but will break the sort tests. need to investigate var collection = _context.Visits .Include(t => t.VisitType) .Include(e => e.Employee) .Include(o => o.Office) .Include(p => p.RegisterControl) .Include(e => e.VisitState) as IQueryable <Visit>; var sieveModel = new SieveModel { Sorts = visitParameters.SortOrder ?? "Id", Filters = visitParameters.Filters }; collection = _sieveProcessor.Apply(sieveModel, collection); return(await PagedList <Visit> .CreateAsync(collection, visitParameters.PageNumber, visitParameters.PageSize)); }
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["ReasonSortParm"] = sortOrder == "Reason" ? "-Reason" : "Reason"; ViewData["CompanySortParm"] = sortOrder == "Company" ? "-Company" : "Company"; //ViewData["EmailAddressSortParm"] = sortOrder == "EmailAddress" ? "-EmailAddress" : "EmailAddress"; VisitParametersDto visitParameters = new VisitParametersDto() { PageNumber = page, PageSize = pageSize, SortOrder = sortOrder, Filters = filters }; var pagingResponse = await _visitRepo.GetVisitsAsync(visitParameters); return(View(pagingResponse)); }