Пример #1
0
        public async Task MapAsync(
            PageBlockTypeDisplayModelMapperContext <PageListDataModel> context,
            PageBlockTypeDisplayModelMapperResult <PageListDataModel> result
            )
        {
            var allPageIds = context.Items.SelectManyDistinctModelValues(d => d.PageIds);

            // Page routes are cached and so are the quickest way to get simple page information.
            // If we needed more data we could use a different but slower query to get it.
            var query         = new GetPageRenderSummariesByIdRangeQuery(allPageIds, context.PublishStatusQuery);
            var allPageRoutes = await _contentRepository
                                .WithExecutionContext(context.ExecutionContext)
                                .Pages()
                                .GetByIdRange(allPageIds)
                                .AsRenderSummaries(context.PublishStatusQuery)
                                .ExecuteAsync();

            foreach (var item in context.Items)
            {
                var mapped = new PageListDisplayModel();

                // Here will get the relevant pages and order them correctly.
                mapped.Pages = allPageRoutes
                               .FilterAndOrderByKeys(item.DataModel.PageIds)
                               .ToList();

                result.Add(item, mapped);
            }
        }
Пример #2
0
        public async Task <IDictionary <int, PageRenderSummary> > ExecuteAsync(GetPageRenderSummariesByIdRangeQuery query, IExecutionContext executionContext)
        {
            var dbPages = await GetPagesAsync(query, executionContext);

            var allPageIds      = dbPages.Select(p => p.PageId);
            var pageRoutesQuery = new GetPageRoutesByIdRangeQuery(allPageIds);
            var pageRoutes      = await _queryExecutor.ExecuteAsync(pageRoutesQuery, executionContext);

            var pages = dbPages
                        .Select(p => _pageRenderSummaryMapper.Map <PageRenderSummary>(p, pageRoutes))
                        .ToList();

            return(pages.ToDictionary(d => d.PageId));
        }
Пример #3
0
        private async Task <List <PageVersion> > GetPagesAsync(GetPageRenderSummariesByIdRangeQuery query, IExecutionContext executionContext)
        {
            if (query.PublishStatus == PublishStatusQuery.SpecificVersion)
            {
                throw new InvalidOperationException($"PublishStatusQuery.SpecificVersion not supported in ${nameof(GetPageRenderSummariesByIdRangeQuery)}");
            }

            var dbResults = await _dbContext
                            .PagePublishStatusQueries
                            .Include(v => v.PageVersion)
                            .ThenInclude(v => v.OpenGraphImageAsset)
                            .AsNoTracking()
                            .FilterActive()
                            .FilterByStatus(query.PublishStatus, executionContext.ExecutionDate)
                            .Where(v => query.PageIds.Contains(v.PageId))
                            .Select(r => r.PageVersion)
                            .ToListAsync();

            return(dbResults);
        }
Пример #4
0
        public IDomainRepositoryQueryContext <IDictionary <int, PageRenderSummary> > AsRenderSummaries(PublishStatusQuery?publishStatus = null)
        {
            var query = new GetPageRenderSummariesByIdRangeQuery(_pageIds, publishStatus);

            return(DomainRepositoryQueryContextFactory.Create(query, ExtendableContentRepository));
        }
Пример #5
0
 public IEnumerable <IPermissionApplication> GetPermissions(GetPageRenderSummariesByIdRangeQuery query)
 {
     yield return(new PageReadPermission());
 }