public PagedList <Photographer> GetPhotographers(PhotographersResourceParameters photographersResourceParameters) { var collectionBeforePaging = _context.Photographers.ApplySort(photographersResourceParameters.OrderBy, _propertyMappingService.GetPropertyMapping <PhotographerDto, Photographer> ()); if (!string.IsNullOrEmpty(photographersResourceParameters.Genre)) { var genreForWhereClause = photographersResourceParameters.Genre .Trim().ToLowerInvariant(); collectionBeforePaging = collectionBeforePaging .Where(a => a.Genre.ToLowerInvariant() == genreForWhereClause); } if (!string.IsNullOrEmpty(photographersResourceParameters.SearchQuery)) { var searchQueryForWhereClause = photographersResourceParameters.SearchQuery .Trim().ToLowerInvariant(); collectionBeforePaging = collectionBeforePaging .Where(a => a.Genre.ToLowerInvariant().Contains(searchQueryForWhereClause) || a.FirstName.ToLowerInvariant().Contains(searchQueryForWhereClause) || a.LastName.ToLowerInvariant().Contains(searchQueryForWhereClause)); } return(PagedList <Photographer> .Create(collectionBeforePaging, photographersResourceParameters.PageNumber, photographersResourceParameters.PageSize)); }
private string CreatePhotographersResourceUri( PhotographersResourceParameters photographersResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(_urlHelper.Link("GetPhotographers", new { orderBy = photographersResourceParameters.OrderBy, searchQuery = photographersResourceParameters.SearchQuery, genre = photographersResourceParameters.Genre, pageNumber = photographersResourceParameters.PageNumber - 1, pageSize = photographersResourceParameters.PageSize })); case ResourceUriType.NextPage: return(_urlHelper.Link("GetPhotographers", new { orderBy = photographersResourceParameters.OrderBy, searchQuery = photographersResourceParameters.SearchQuery, genre = photographersResourceParameters.Genre, pageNumber = photographersResourceParameters.PageNumber + 1, pageSize = photographersResourceParameters.PageSize })); case ResourceUriType.Current: default: return(_urlHelper.Link("GetPhotographers", new { orderBy = photographersResourceParameters.OrderBy, searchQuery = photographersResourceParameters.SearchQuery, genre = photographersResourceParameters.Genre, pageNumber = photographersResourceParameters.PageNumber, pageSize = photographersResourceParameters.PageSize })); } }
public IActionResult GetPhotographers(PhotographersResourceParameters photographersResourceParameters) { if (!_propertyMappingService.ValidMappingExistsFor <PhotographerDto, Photographer> (photographersResourceParameters.OrderBy)) { return(BadRequest()); } var photographersFromRepo = _magnumPhotosRepository.GetPhotographers(photographersResourceParameters); var previousPageLink = photographersFromRepo.HasPrevious ? CreatePhotographersResourceUri(photographersResourceParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = photographersFromRepo.HasNext ? CreatePhotographersResourceUri(photographersResourceParameters, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = photographersFromRepo.TotalCount, pageSize = photographersFromRepo.PageSize, currentPage = photographersFromRepo.CurrentPage, totalPages = photographersFromRepo.TotalPages, previousPageLink = previousPageLink, nextPageLink = nextPageLink }; Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata)); var photographers = Mapper.Map <IEnumerable <PhotographerDto> > (photographersFromRepo); var wrapper = new LinkedCollectionResourceWrapper <PhotographerDto> (photographers); return(Ok(CreateLinksForPhotographers(wrapper))); }