public PagedList <FuelType> GetFuelTypes(FuelTypeResourceParameters fuelTypeParameters) { if (fuelTypeParameters == null) { throw new ArgumentNullException(nameof(fuelTypeParameters)); } var collection = _context.FuelType as IQueryable <FuelType>; if (!string.IsNullOrWhiteSpace(fuelTypeParameters.SearchQuery)) { var searchQuery = fuelTypeParameters.SearchQuery.Trim(); collection = collection.Where(a => a.Name.Contains(searchQuery)); } if (!string.IsNullOrWhiteSpace(fuelTypeParameters.OrderBy)) { var fuelTypePropertyMappingDictionary = _propertyMappingService.GetFuelTypePropertyMapping <FuelTypeDto, FuelType>(); collection = collection.ApplySort(fuelTypeParameters.OrderBy, fuelTypePropertyMappingDictionary); } //Paging.... happens LAST return(PagedList <FuelType> .Create(collection, fuelTypeParameters.PageNumber, fuelTypeParameters.PageSize)); }
private IEnumerable <LinkDto> CreateLinksForFuelType( FuelTypeResourceParameters fuelTypeResourceParameters, bool hasNext, bool hasPrevious) { var links = new List <LinkDto>(); // self links.Add( new LinkDto(CreateFuelTypesResourceUri( fuelTypeResourceParameters, ResourceUriType.Current) , "self", "GET")); if (hasNext) { links.Add( new LinkDto(CreateFuelTypesResourceUri( fuelTypeResourceParameters, ResourceUriType.NextPage), "nextPage", "GET")); } if (hasPrevious) { links.Add( new LinkDto(CreateFuelTypesResourceUri( fuelTypeResourceParameters, ResourceUriType.PreviousPage), "previousPage", "GET")); } return(links); }
public IActionResult GetFuelTypes( [FromQuery] FuelTypeResourceParameters fuelTypeResourceParameters) { if (!_propertyMappingService.ValidFuelTypeMappingExistsFor <FuelTypeDto, Entities.FuelType> (fuelTypeResourceParameters.OrderBy)) { return(BadRequest()); } var fuelTypeFromRepo = _fuelTypeRepository.GetFuelTypes(fuelTypeResourceParameters); var paginationMetadata = new { totalCount = fuelTypeFromRepo.TotalCount, pageSize = fuelTypeFromRepo.PageSize, currentPage = fuelTypeFromRepo.CurrentPage, totalPages = fuelTypeFromRepo.TotalPages }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var links = CreateLinksForFuelType(fuelTypeResourceParameters, fuelTypeFromRepo.HasNext, fuelTypeFromRepo.HasPrevious); var shapedFuelTypes = _mapper.Map <IEnumerable <FuelTypeDto> >(fuelTypeFromRepo) .ShapeData(fuelTypeResourceParameters.Fields); var shapedFuelTypesWithLinks = shapedFuelTypes.Select(fueltypes => { var fuelTypeAsDictionary = fueltypes as IDictionary <string, object>; var fuelTypeLinks = CreateLinksForFuelType((string)fuelTypeAsDictionary["Id"], null); fuelTypeAsDictionary.Add("links", fuelTypeLinks); return(fuelTypeAsDictionary); }); var linkedCollectionResource = new { value = shapedFuelTypesWithLinks, links }; return(Ok(linkedCollectionResource)); }
private string CreateFuelTypesResourceUri( FuelTypeResourceParameters fuelTypeResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link("GetFuelType", new { fields = fuelTypeResourceParameters.Fields, orderBy = fuelTypeResourceParameters.OrderBy, pageNumber = fuelTypeResourceParameters.PageNumber - 1, pageSize = fuelTypeResourceParameters.PageSize, searchQuery = fuelTypeResourceParameters.SearchQuery })); case ResourceUriType.NextPage: return(Url.Link("GetFuelType", new { fields = fuelTypeResourceParameters.Fields, orderBy = fuelTypeResourceParameters.OrderBy, pageNumber = fuelTypeResourceParameters.PageNumber + 1, pageSize = fuelTypeResourceParameters.PageSize, searchQuery = fuelTypeResourceParameters.SearchQuery })); case ResourceUriType.Current: default: return(Url.Link("GetFuelType", new { fields = fuelTypeResourceParameters.Fields, orderBy = fuelTypeResourceParameters.OrderBy, pageNumber = fuelTypeResourceParameters.PageNumber, pageSize = fuelTypeResourceParameters.PageSize, searchQuery = fuelTypeResourceParameters.SearchQuery })); } }