public PagedList <Destination> GetDestinations( DestinationsResourceParameters destinationsResourceParameters) { //var collectionBeforePaging = _context.Destinations // .OrderBy(a => a.FirstName) // .ThenBy(a => a.LastName).AsQueryable(); var collectionBeforePaging = _context.Destinations.ApplySort(destinationsResourceParameters.OrderBy, _propertyMappingService.GetPropertyMapping <DestinationDto, Destination>()); if (!string.IsNullOrEmpty(destinationsResourceParameters.Genre)) { // trim & ignore casing var genreForWhereClause = destinationsResourceParameters.Genre .Trim().ToLowerInvariant(); collectionBeforePaging = collectionBeforePaging .Where(a => a.Genre.ToLowerInvariant() == genreForWhereClause); } if (!string.IsNullOrEmpty(destinationsResourceParameters.SearchQuery)) { // trim & ignore casing var searchQueryForWhereClause = destinationsResourceParameters.SearchQuery .Trim().ToLowerInvariant(); collectionBeforePaging = collectionBeforePaging .Where(a => a.Genre.ToLowerInvariant().Contains(searchQueryForWhereClause) || a.Name.ToLowerInvariant().Contains(searchQueryForWhereClause) || a.State.ToLowerInvariant().Contains(searchQueryForWhereClause)); } return(PagedList <Destination> .Create(collectionBeforePaging, destinationsResourceParameters.PageNumber, destinationsResourceParameters.PageSize)); }
private string CreateDestinationsResourceUri( DestinationsResourceParameters destinationsResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(_urlHelper.Link("GetDestinations", new { fields = destinationsResourceParameters.Fields, orderby = destinationsResourceParameters.OrderBy, searchQuery = destinationsResourceParameters.SearchQuery, genre = destinationsResourceParameters.Genre, pageNumber = destinationsResourceParameters.PageNumber - 1, pageSize = destinationsResourceParameters.PageSize })); case ResourceUriType.NextPage: return(_urlHelper.Link("GetDestinations", new { fields = destinationsResourceParameters.Fields, orderby = destinationsResourceParameters.OrderBy, searchQuery = destinationsResourceParameters.SearchQuery, genre = destinationsResourceParameters.Genre, pageNumber = destinationsResourceParameters.PageNumber + 1, pageSize = destinationsResourceParameters.PageSize })); default: return(_urlHelper.Link("GetDestinations", new { fields = destinationsResourceParameters.Fields, orderby = destinationsResourceParameters.OrderBy, searchQuery = destinationsResourceParameters.SearchQuery, genre = destinationsResourceParameters.Genre, pageNumber = destinationsResourceParameters.PageNumber, pageSize = destinationsResourceParameters.PageSize })); } }
public IActionResult GetDestinations(DestinationsResourceParameters destinationsResourceParameters) { if (!_propertyMappingService.ValidMappingExistsFor <DestinationDto, Destination> (destinationsResourceParameters.OrderBy)) { return(BadRequest()); } if (!_typeHelperService.TypeHasProperties <DestinationDto> (destinationsResourceParameters.Fields)) { return(BadRequest()); } var destinationsFromRepo = _tripInfoRepository.GetDestinations(destinationsResourceParameters); var previousPageLink = destinationsFromRepo.HasPrevious ? CreateDestinationsResourceUri(destinationsResourceParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = destinationsFromRepo.HasNext ? CreateDestinationsResourceUri(destinationsResourceParameters, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = destinationsFromRepo.TotalCount, pageSize = destinationsFromRepo.PageSize, currentPage = destinationsFromRepo.CurrentPage, totalPages = destinationsFromRepo.TotalPages, previousPageLink = previousPageLink, nextPageLink = nextPageLink }; Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata)); var destinations = Mapper.Map <IEnumerable <DestinationDto> >(destinationsFromRepo); return(Ok(destinations.ShapeData(destinationsResourceParameters.Fields))); }