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