public PagedList <Course> GetCourses( CoursesResourceParameters coursesResourceParameters) { //var collectionBeforePaging = _context.Courses // .OrderBy(a => a.FirstName) // .ThenBy(a => a.LastName).AsQueryable(); var collectionBeforePaging = _context.Courses .ApplySort(coursesResourceParameters.OrderBy, _propertyMappingService.GetPropertyMapping <CourseDto, Course>()); if (!string.IsNullOrEmpty(coursesResourceParameters.SearchQuery)) { // trim & ignore casing var searchQueryForWhereClause = coursesResourceParameters.SearchQuery .Trim().ToLowerInvariant(); collectionBeforePaging = collectionBeforePaging .Where(a => a.Description.ToLowerInvariant().Contains(searchQueryForWhereClause) || a.Name.ToLowerInvariant().Contains(searchQueryForWhereClause)); } return(PagedList <Course> .Create(collectionBeforePaging, coursesResourceParameters.PageNumber, coursesResourceParameters.PageSize)); }
public IActionResult GetCourses(CoursesResourceParameters coursesResourceParameters) { if (!_propertyMappingService.ValidMappingExistsFor <CourseDto, Course> (coursesResourceParameters.OrderBy)) { return(BadRequest()); } //if (!_typeHelperService.TypeHasProperties<CourseDto> // (coursesResourceParameters.Fields)) //{ // return BadRequest(); //} var coursesFromRepo = _hotMealRepository.GetCourses(coursesResourceParameters); var previousPageLink = coursesFromRepo.HasPrevious ? CreateCoursesResourceUri(coursesResourceParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = coursesFromRepo.HasNext ? CreateCoursesResourceUri(coursesResourceParameters, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = coursesFromRepo.TotalCount, pageSize = coursesFromRepo.PageSize, currentPage = coursesFromRepo.CurrentPage, totalPages = coursesFromRepo.TotalPages, previousPageLink = previousPageLink, nextPageLink = nextPageLink }; Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata)); var courses = Mapper.Map <IEnumerable <CourseDto> >(coursesFromRepo); return(Ok(courses)); }
private string CreateCoursesResourceUri( CoursesResourceParameters coursesResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(_urlHelper.Link("GetCourses", new { //fields = coursesResourceParameters.Fields, orderBy = coursesResourceParameters.OrderBy, searchQuery = coursesResourceParameters.SearchQuery, pageNumber = coursesResourceParameters.PageNumber - 1, pageSize = coursesResourceParameters.PageSize })); case ResourceUriType.NextPage: return(_urlHelper.Link("GetCourses", new { //fields = coursesResourceParameters.Fields, orderBy = coursesResourceParameters.OrderBy, searchQuery = coursesResourceParameters.SearchQuery, pageNumber = coursesResourceParameters.PageNumber + 1, pageSize = coursesResourceParameters.PageSize })); default: return(_urlHelper.Link("GetCourses", new { //fields = coursesResourceParameters.Fields, orderBy = coursesResourceParameters.OrderBy, searchQuery = coursesResourceParameters.SearchQuery, pageNumber = coursesResourceParameters.PageNumber, pageSize = coursesResourceParameters.PageSize })); } }