public PagedList <SiteType> GetSiteTypes(SiteTypeResourceParameters siteTypeResourceParameters) { if (siteTypeResourceParameters == null) { throw new ArgumentNullException(nameof(siteTypeResourceParameters)); } var collection = _context.SiteType as IQueryable <SiteType>; if (!string.IsNullOrWhiteSpace(siteTypeResourceParameters.SearchQuery)) { var searchQuery = siteTypeResourceParameters.SearchQuery.Trim(); collection = collection.Where(a => a.Type.Contains(searchQuery) || a.Type.Contains(searchQuery)); } if (!string.IsNullOrWhiteSpace(siteTypeResourceParameters.OrderBy)) { var siteTypePropertyMappingDictionary = _propertyMappingService.GetSiteTypePropertyMapping <SiteTypeDto, SiteType>(); collection = collection.ApplySort(siteTypeResourceParameters.OrderBy, siteTypePropertyMappingDictionary); } //Paging.... happens LAST return(PagedList <SiteType> .Create(collection, siteTypeResourceParameters.PageNumber, siteTypeResourceParameters.PageSize)); }
private IEnumerable <LinkDto> CreateLinksForSiteTypes( SiteTypeResourceParameters siteTypeResourceParameters, bool hasNext, bool hasPrevious) { var links = new List <LinkDto>(); // self links.Add( new LinkDto(CreateSiteTypesResourceUri( siteTypeResourceParameters, ResourceUriType.Current) , "self", "GET")); if (hasNext) { links.Add( new LinkDto(CreateSiteTypesResourceUri( siteTypeResourceParameters, ResourceUriType.NextPage), "nextPage", "GET")); } if (hasPrevious) { links.Add( new LinkDto(CreateSiteTypesResourceUri( siteTypeResourceParameters, ResourceUriType.PreviousPage), "previousPage", "GET")); } return(links); }
public IActionResult GetSiteTypes( [FromQuery] SiteTypeResourceParameters siteTypeResourceParameters) { if (!_propertyMappingService.ValidSiteTypeMappingExistsFor <SiteTypeDto, Entities.SiteType> (siteTypeResourceParameters.OrderBy)) { return(BadRequest()); } var siteTypesFromRepo = _siteTypeRepository.GetSiteTypes(siteTypeResourceParameters); var paginationMetadata = new { totalCount = siteTypesFromRepo.TotalCount, pageSize = siteTypesFromRepo.PageSize, currentPage = siteTypesFromRepo.CurrentPage, totalPages = siteTypesFromRepo.TotalPages }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var links = CreateLinksForSiteTypes(siteTypeResourceParameters, siteTypesFromRepo.HasNext, siteTypesFromRepo.HasPrevious); var shapedSiteTypes = _mapper.Map <IEnumerable <SiteTypeDto> >(siteTypesFromRepo) .ShapeData(siteTypeResourceParameters.Fields); var shapedSiteTypesWithLinks = shapedSiteTypes.Select(siteType => { var siteTypeAsDictionary = siteType as IDictionary <string, object>; var siteTypeLinks = CreateLinksForSiteTypes((string)siteTypeAsDictionary["Id"], null); siteTypeAsDictionary.Add("links", siteTypeLinks); return(siteTypeAsDictionary); }); var linkedCollectionResource = new { value = shapedSiteTypesWithLinks, links }; return(Ok(linkedCollectionResource)); }
private string CreateSiteTypesResourceUri( SiteTypeResourceParameters siteTypeResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link("GetSiteTypes", new { fields = siteTypeResourceParameters.Fields, orderBy = siteTypeResourceParameters.OrderBy, pageNumber = siteTypeResourceParameters.PageNumber - 1, pageSize = siteTypeResourceParameters.PageSize, searchQuery = siteTypeResourceParameters.SearchQuery })); case ResourceUriType.NextPage: return(Url.Link("GetSiteTypes", new { fields = siteTypeResourceParameters.Fields, orderBy = siteTypeResourceParameters.OrderBy, pageNumber = siteTypeResourceParameters.PageNumber + 1, pageSize = siteTypeResourceParameters.PageSize, searchQuery = siteTypeResourceParameters.SearchQuery })); case ResourceUriType.Current: default: return(Url.Link("GetSiteTypes", new { fields = siteTypeResourceParameters.Fields, orderBy = siteTypeResourceParameters.OrderBy, pageNumber = siteTypeResourceParameters.PageNumber, pageSize = siteTypeResourceParameters.PageSize, searchQuery = siteTypeResourceParameters.SearchQuery })); } }