public async Task <ActionResult <IEnumerable <patient> > > GetPatients([FromQuery] paginationFilter filter, string?Name, int?fileNo, string?phoneNo) { var route = Request.Path.Value; var pageFilter = new paginationFilter(filter.pageNumber, filter.pageSize); IQueryable <patient> query = _context.patients; if (!string.IsNullOrEmpty(Name)) { query = _context.patients.Where(x => x.name == Name); } if (!string.IsNullOrEmpty(phoneNo)) { query = _context.patients.Where(x => x.phoneNumber == phoneNo); } if (fileNo != null) { query = _context.patients.Where(x => x.fileNo == fileNo); } var patients = await query .Skip((pageFilter.pageNumber - 1) *pageFilter.pageSize) .Take(pageFilter.pageSize) .ToListAsync(); var totalRecords = await _context.patients.CountAsync(); var pageResponse = paginationHelper.CreatePagedReponse <patient>(patients, pageFilter, totalRecords, _uriService, route); return(Ok(pageResponse)); }
public Uri GetPageUri(paginationFilter filter, string route) { var _endPointUri = new Uri(string.Concat(_baseUri, route)); var modifiedUri = QueryHelpers.AddQueryString(_endPointUri.ToString(), "pageNumber", filter.pageNumber.ToString()); modifiedUri = QueryHelpers.AddQueryString(modifiedUri, "pageSize", filter.pageSize.ToString()); return(new Uri(modifiedUri)); }
public static PagedResponse <List <T> > CreatePagedReponse <T>(List <T> pagedData, paginationFilter validFilter, int totalRecords, IUriService uriService, string route) { var respose = new PagedResponse <List <T> >(pagedData, validFilter.pageNumber, validFilter.pageSize); var totalPages = (double)totalRecords / (double)validFilter.pageSize; int roundedTotalPages = Convert.ToInt32(Math.Ceiling(totalPages)); respose.NextPage = validFilter.pageNumber >= 1 && validFilter.pageNumber < roundedTotalPages ? uriService.GetPageUri(new paginationFilter(validFilter.pageNumber + 1, validFilter.pageSize), route) : null; respose.PreviousPage = validFilter.pageNumber - 1 >= 1 && validFilter.pageNumber <= roundedTotalPages ? uriService.GetPageUri(new paginationFilter(validFilter.pageNumber - 1, validFilter.pageSize), route) : null; respose.FirstPage = uriService.GetPageUri(new paginationFilter(1, validFilter.pageSize), route); respose.LastPage = uriService.GetPageUri(new paginationFilter(roundedTotalPages, validFilter.pageSize), route); respose.TotalPages = roundedTotalPages; respose.TotalRecords = totalRecords; return(respose); }