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)); }
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); }
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)); }
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 })); } }