public async Task<CustomEntityRenderDetails> ExecuteAsync(GetCustomEntityRenderDetailsByIdQuery query, IExecutionContext executionContext) { var dbResult = await QueryCustomEntityAsync(query, executionContext); if (dbResult == null) return null; var entity = await MapCustomEntityAsync(dbResult); if (dbResult.CustomEntity.LocaleId.HasValue) { var getLocaleQuery = new GetActiveLocaleByIdQuery(dbResult.CustomEntity.LocaleId.Value); entity.Locale = await _queryExecutor.ExecuteAsync(getLocaleQuery, executionContext); } entity.Regions = await QueryRegions(query).ToListAsync(); var dbPageBlocks = await QueryPageBlocks(entity).ToListAsync(); var allBlockTypes = await _queryExecutor.ExecuteAsync(new GetAllPageBlockTypeSummariesQuery(), executionContext); await _entityVersionPageBlockMapper.MapRegionsAsync(dbPageBlocks, entity.Regions, allBlockTypes, query.PublishStatus); var routingQuery = new GetPageRoutingInfoByCustomEntityIdQuery(dbResult.CustomEntityId); var routing = await _queryExecutor.ExecuteAsync(routingQuery, executionContext); entity.PageUrls = MapPageRoutings(routing, dbResult); return entity; }
public async Task <IEnumerable <PageRoutingInfo> > ExecuteAsync(GetPageRoutingInfoByCustomEntityIdQuery query, IExecutionContext executionContext) { var result = await _queryExecutor.ExecuteAsync(new GetPageRoutingInfoByCustomEntityIdRangeQuery(new int[] { query.CustomEntityId }), executionContext); if (!result.ContainsKey(query.CustomEntityId)) { return(Enumerable.Empty <PageRoutingInfo>()); } return(result[query.CustomEntityId].OrderBy(e => e.PageRoute.UrlPath.Length)); }
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); } else { entity.Regions = Array.Empty <CustomEntityPageRegionRenderDetails>(); } return(entity); }
public CustomEntityRenderDetails Execute(GetCustomEntityRenderDetailsByIdQuery query, IExecutionContext executionContext) { var dbResult = QueryCustomEntity(query).FirstOrDefault(); var entity = MapCustomEntity(dbResult); entity.Sections = QuerySections(query).ToList(); var dbModules = QueryModules(entity).ToList(); var allModuleTypes = _queryExecutor.GetAll <PageModuleTypeSummary>(executionContext); _entityVersionPageModuleMapper.MapSections(dbModules, entity.Sections, allModuleTypes, query.WorkFlowStatus); var routingQuery = new GetPageRoutingInfoByCustomEntityIdQuery(dbResult.CustomEntityId); var routing = _queryExecutor.Execute(routingQuery, executionContext); entity.DetailsPageUrls = MapPageRoutings(routing, dbResult); return(entity); }
public async Task <CustomEntityRenderDetails> ExecuteAsync(GetCustomEntityRenderDetailsByIdQuery query, IExecutionContext executionContext) { var dbQuery = _dbContext .CustomEntityVersions .AsNoTracking() .FilterByCustomEntityId(query.CustomEntityId) .FilterByWorkFlowStatusQuery(query.WorkFlowStatus, query.CustomEntityVersionId) .Include(e => e.CustomEntity) .Include(e => e.CustomEntity.Locale); var dbResult = await dbQuery.FirstOrDefaultAsync(); _permissionValidationService.EnforceCustomEntityPermission <CustomEntityReadPermission>(dbResult.CustomEntity.CustomEntityDefinitionCode); var entity = Mapper.Map <CustomEntityRenderDetails>(dbResult); entity.Model = _customEntityDataModelMapper.Map(dbResult.CustomEntity.CustomEntityDefinitionCode, dbResult.SerializedData); entity.Sections = await _dbContext .PageTemplateSections .AsNoTracking() .Where(s => s.PageTemplateId == query.PageTemplateId) .ProjectTo <CustomEntityPageSectionRenderDetails>() .ToListAsync(); var dbModules = await _dbContext .CustomEntityVersionPageModules .AsNoTracking() .Where(m => m.CustomEntityVersionId == entity.CustomEntityVersionId) .ToListAsync(); await _entityVersionPageModuleMapper.MapSectionsAsync <CustomEntityVersionPageModuleRenderDetails>(dbModules, entity.Sections, query.WorkFlowStatus, executionContext); var routingQuery = new GetPageRoutingInfoByCustomEntityIdQuery(dbResult.CustomEntityId); var routing = await _queryExecutor.ExecuteAsync(routingQuery, executionContext); entity.DetailsPageUrls = MapPageRoutings(routing, dbResult); 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.FullPath = 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.PageTemplateRegionId == region.PageTemplateRegionId) .OrderBy(m => m.Ordering) .Select(m => MapBlock(m, allPageBlockTypes)) .ToArray(); } } // Map default full path entity.FullPath = pages .OrderByDescending(p => p.PageRoute.Locale == null) .Select(p => p.FullPath) .First(); }
public IEnumerable <IPermissionApplication> GetPermissions(GetPageRoutingInfoByCustomEntityIdQuery query) { yield return(new PageReadPermission()); }
public Task<ICollection<PageRoutingInfo>> AsRoutingInfoAsync() { var query = new GetPageRoutingInfoByCustomEntityIdQuery(_customEntityId); return ExtendableContentRepository.ExecuteQueryAsync(query); }
public IContentRepositoryQueryContext <ICollection <PageRoutingInfo> > AsRoutingInfo() { var query = new GetPageRoutingInfoByCustomEntityIdQuery(_customEntityId); return(ContentRepositoryQueryContextFactory.Create(query, ExtendableContentRepository)); }