示例#1
0
        public PagedList <Fuel> GetFuel(FuelResourceParameters fuelParameters)
        {
            if (fuelParameters == null)
            {
                throw new ArgumentNullException(nameof(fuelParameters));
            }

            var collection = _context.Fuel as IQueryable <Fuel>;

            if (!string.IsNullOrWhiteSpace(fuelParameters.SearchQuery))
            {
                var searchQuery = fuelParameters.SearchQuery.Trim();
                collection = collection.Where(a => a.Name.Contains(searchQuery));
            }

            if (!string.IsNullOrWhiteSpace(fuelParameters.OrderBy))
            {
                var fuelPropertyMappingDictionary = _propertyMappingService.GetFuelPropertyMapping <FuelDto, Fuel>();

                collection = collection.ApplySort(fuelParameters.OrderBy, fuelPropertyMappingDictionary);
            }

            //Paging.... happens LAST
            return(PagedList <Fuel> .Create(collection,
                                            fuelParameters.PageNumber,
                                            fuelParameters.PageSize));
        }
示例#2
0
        private IEnumerable <LinkDto> CreateLinksForFuel(
            FuelResourceParameters fuelResourceParameters,
            bool hasNext, bool hasPrevious)
        {
            var links = new List <LinkDto>();

            // self
            links.Add(
                new LinkDto(CreateFuelResourceUri(
                                fuelResourceParameters, ResourceUriType.Current)
                            , "self", "GET"));

            if (hasNext)
            {
                links.Add(
                    new LinkDto(CreateFuelResourceUri(
                                    fuelResourceParameters, ResourceUriType.NextPage),
                                "nextPage", "GET"));
            }

            if (hasPrevious)
            {
                links.Add(
                    new LinkDto(CreateFuelResourceUri(
                                    fuelResourceParameters, ResourceUriType.PreviousPage),
                                "previousPage", "GET"));
            }

            return(links);
        }
示例#3
0
        public IActionResult GetFuelsByType(Guid fuelTypeId,
                                            [FromQuery] FuelResourceParameters fuelResourceParameters)
        {
            if (!_propertyMappingService.ValidFuelMappingExistsFor <FuelDto, Entities.Fuel>
                    (fuelResourceParameters.OrderBy))
            {
                return(BadRequest());
            }

            var fuelFromRepo = _fuelRepository.GetFuelByType(fuelTypeId, fuelResourceParameters);

            var paginationMetadata = new
            {
                totalCount  = fuelFromRepo.TotalCount,
                pageSize    = fuelFromRepo.PageSize,
                currentPage = fuelFromRepo.CurrentPage,
                totalPages  = fuelFromRepo.TotalPages
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));

            var links = CreateLinksForFuel(fuelResourceParameters,
                                           fuelFromRepo.HasNext,
                                           fuelFromRepo.HasPrevious);

            var shapedFuel = _mapper.Map <IEnumerable <FuelDto> >(fuelFromRepo)
                             .ShapeData(fuelResourceParameters.Fields);

            var shapedFuelTypesWithLinks = shapedFuel.Select(fuel =>
            {
                var fuelAsDictionary = fuel as IDictionary <string, object>;
                var fuelLinks        = CreateLinksForFuel(fuelTypeId.ToString(), (string)fuelAsDictionary["Id"], null);
                fuelAsDictionary.Add("links", fuelLinks);
                return(fuelAsDictionary);
            });

            var linkedCollectionResource = new
            {
                value = shapedFuelTypesWithLinks,
                links
            };

            return(Ok(linkedCollectionResource));
        }
示例#4
0
        private string CreateFuelResourceUri(
            FuelResourceParameters fuelResourceParameters,
            ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(Url.Link("GetFuel",
                                new
                {
                    fields = fuelResourceParameters.Fields,
                    orderBy = fuelResourceParameters.OrderBy,
                    pageNumber = fuelResourceParameters.PageNumber - 1,
                    pageSize = fuelResourceParameters.PageSize,
                    searchQuery = fuelResourceParameters.SearchQuery
                }));

            case ResourceUriType.NextPage:
                return(Url.Link("GetFuel",
                                new
                {
                    fields = fuelResourceParameters.Fields,
                    orderBy = fuelResourceParameters.OrderBy,
                    pageNumber = fuelResourceParameters.PageNumber + 1,
                    pageSize = fuelResourceParameters.PageSize,
                    searchQuery = fuelResourceParameters.SearchQuery
                }));

            case ResourceUriType.Current:
            default:
                return(Url.Link("GetFuel",
                                new
                {
                    fields = fuelResourceParameters.Fields,
                    orderBy = fuelResourceParameters.OrderBy,
                    pageNumber = fuelResourceParameters.PageNumber,
                    pageSize = fuelResourceParameters.PageSize,
                    searchQuery = fuelResourceParameters.SearchQuery
                }));
            }
        }