public async Task <ICollection <PageRoutingInfo> > ExecuteAsync(GetPageRoutingInfoByCustomEntityIdQuery query, IExecutionContext executionContext) { var result = await _queryExecutor.ExecuteAsync(new GetPageRoutingInfoByCustomEntityIdRangeQuery(new int[] { query.CustomEntityId }), executionContext); if (!result.ContainsKey(query.CustomEntityId)) { return(Array.Empty <PageRoutingInfo>()); } return(result[query.CustomEntityId] .OrderBy(e => e.PageRoute.UrlPath.Length) .ToList()); }
public async Task <CustomEntityRenderDetails> ExecuteAsync(GetCustomEntityRenderDetailsByIdQuery query, IExecutionContext executionContext) { var dbResult = await QueryCustomEntityAsync(query, executionContext); if (dbResult == null) { return(null); } var entity = MapCustomEntity(dbResult, executionContext); if (dbResult.CustomEntity.LocaleId.HasValue) { var getLocaleQuery = new GetActiveLocaleByIdQuery(dbResult.CustomEntity.LocaleId.Value); entity.Locale = await _queryExecutor.ExecuteAsync(getLocaleQuery, executionContext); } var pageRoutesQuery = new GetPageRoutingInfoByCustomEntityIdQuery(dbResult.CustomEntityId); var pageRoutes = await _queryExecutor.ExecuteAsync(pageRoutesQuery, executionContext); entity.PageUrls = MapPageRoutings(pageRoutes, dbResult); var selectedRoute = pageRoutes.FirstOrDefault(r => r.PageRoute.PageId == query.PageId); if (selectedRoute != null) { var pageVersion = selectedRoute.PageRoute.Versions.GetVersionRouting(PublishStatusQuery.PreferPublished); if (pageVersion == null) { throw new Exception($"Error mapping routes: {nameof(pageVersion)} cannot be null. A page route should always have at least one version."); } entity.Regions = await GetRegionsAsync(pageVersion.PageTemplateId); var dbPageBlocks = await GetPageBlocksAsync(entity.CustomEntityVersionId, selectedRoute.PageRoute.PageId); var allBlockTypes = await _queryExecutor.ExecuteAsync(new GetAllPageBlockTypeSummariesQuery(), executionContext); await _entityVersionPageBlockMapper.MapRegionsAsync(dbPageBlocks, entity.Regions, allBlockTypes, query.PublishStatus, executionContext); } else { entity.Regions = Array.Empty <CustomEntityPageRegionRenderDetails>(); } return(entity); }
private async Task MapPages(CustomEntityVersion dbVersion, CustomEntityDetails entity, IExecutionContext executionContext) { var pages = new List <CustomEntityPage>(); entity.LatestVersion.Pages = pages; var routingsQuery = new GetPageRoutingInfoByCustomEntityIdQuery(dbVersion.CustomEntityId); var routings = (await _queryExecutor.ExecuteAsync(routingsQuery, executionContext)) .Where(r => r.CustomEntityRouteRule != null); if (!routings.Any()) { return; } // Map templates var pageTemplateIds = routings .Select(r => new { PageId = r.PageRoute.PageId, VersionRoute = r.PageRoute.Versions.GetVersionRouting(PublishStatusQuery.Latest) }) .Where(r => r.VersionRoute != null && r.VersionRoute.HasCustomEntityRegions) .ToDictionary(k => k.PageId, v => v.VersionRoute.PageTemplateId); var allTemplateIds = pageTemplateIds .Select(r => r.Value) .ToArray(); var allTemplateRegions = await _dbContext .PageTemplateRegions .AsNoTracking() .Where(s => allTemplateIds.Contains(s.PageTemplateId) && s.IsCustomEntityRegion) .ToListAsync(); var allPageBlockTypes = await _queryExecutor.ExecuteAsync(new GetAllPageBlockTypeSummariesQuery(), executionContext); foreach (var routing in routings) { var page = new CustomEntityPage(); pages.Add(page); page.FullUrlPath = routing.CustomEntityRouteRule.MakeUrl(routing.PageRoute, routing.CustomEntityRoute); page.PageRoute = routing.PageRoute; // Map Regions var templateId = pageTemplateIds.GetOrDefault(routing.PageRoute.PageId); page.Regions = allTemplateRegions .Where(s => s.PageTemplateId == templateId) .OrderBy(s => s.UpdateDate) .Select(s => new CustomEntityPageRegionDetails() { Name = s.Name, PageTemplateRegionId = s.PageTemplateRegionId }) .ToList(); // Map Blocks foreach (var region in page.Regions) { region.Blocks = dbVersion .CustomEntityVersionPageBlocks .AsQueryable() .FilterActive() .Where(m => m.PageId == routing.PageRoute.PageId && m.PageTemplateRegionId == region.PageTemplateRegionId) .OrderBy(m => m.Ordering) .Select(m => MapBlock(m, allPageBlockTypes)) .ToArray(); } } // Map default full path entity.FullUrlPath = pages .OrderByDescending(p => p.PageRoute.Locale == null) .Select(p => p.FullUrlPath) .First(); }
public IEnumerable <IPermissionApplication> GetPermissions(GetPageRoutingInfoByCustomEntityIdQuery query) { yield return(new PageReadPermission()); }
public IDomainRepositoryQueryContext <ICollection <PageRoutingInfo> > AsRoutingInfo() { var query = new GetPageRoutingInfoByCustomEntityIdQuery(_customEntityId); return(DomainRepositoryQueryContextFactory.Create(query, ExtendableContentRepository)); }