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); } }
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)); }
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); }
public IDomainRepositoryQueryContext <IDictionary <int, PageRenderSummary> > AsRenderSummaries(PublishStatusQuery?publishStatus = null) { var query = new GetPageRenderSummariesByIdRangeQuery(_pageIds, publishStatus); return(DomainRepositoryQueryContextFactory.Create(query, ExtendableContentRepository)); }
public IEnumerable <IPermissionApplication> GetPermissions(GetPageRenderSummariesByIdRangeQuery query) { yield return(new PageReadPermission()); }