Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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
                }));
            }
        }
Esempio n. 3
0
        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)));
        }