Example #1
0
        private CustomEntityDetails MapInitialData(CustomEntityVersion dbVersion, IExecutionContext executionContext)
        {
            var entity = new CustomEntityDetails()
            {
                CustomEntityId  = dbVersion.CustomEntity.CustomEntityId,
                UrlSlug         = dbVersion.CustomEntity.UrlSlug,
                PublishStatus   = PublishStatusMapper.FromCode(dbVersion.CustomEntity.PublishStatusCode),
                PublishDate     = dbVersion.CustomEntity.PublishDate,
                LastPublishDate = dbVersion.CustomEntity.LastPublishDate,
            };

            entity.AuditData = _auditDataMapper.MapCreateAuditData(dbVersion.CustomEntity);

            entity.LatestVersion = new CustomEntityVersionDetails()
            {
                CustomEntityVersionId = dbVersion.CustomEntityVersionId,
                Title          = dbVersion.Title,
                DisplayVersion = dbVersion.DisplayVersion,
                WorkFlowStatus = (WorkFlowStatus)dbVersion.WorkFlowStatusId
            };

            entity.LatestVersion.AuditData = _auditDataMapper.MapCreateAuditData(dbVersion);
            entity.HasDraftVersion         = entity.LatestVersion.WorkFlowStatus == WorkFlowStatus.Draft;

            return(entity);
        }
        private void UpdateDraft(UpdateCustomEntityDraftVersionCommand command, CustomEntityVersion draft)
        {
            EntityNotFoundException.ThrowIfNull(draft, "Draft:" + command.CustomEntityId);

            draft.Title          = command.Title.Trim();
            draft.SerializedData = _dbUnstructuredDataSerializer.Serialize(command.Model);
        }
Example #3
0
        private async Task <CustomEntityDetails> MapAsync(
            GetCustomEntityDetailsByIdQuery query,
            CustomEntityVersion dbVersion,
            IExecutionContext executionContext
            )
        {
            if (dbVersion == null)
            {
                return(null);
            }

            var entity = MapInitialData(dbVersion, executionContext);

            // Re-map IsPublished checking to see if there is a published version in the history
            if (entity.IsPublished && entity.LatestVersion.WorkFlowStatus != WorkFlowStatus.Published)
            {
                entity.IsPublished = await _dbContext
                                     .CustomEntityVersions
                                     .AnyAsync(v => v.CustomEntityId == query.CustomEntityId && v.WorkFlowStatusId == (int)WorkFlowStatus.Published);
            }

            if (dbVersion.CustomEntity.LocaleId.HasValue)
            {
                var getLocaleQuery = new GetActiveLocaleByIdQuery(dbVersion.CustomEntity.LocaleId.Value);
                entity.Locale = await _queryExecutor.ExecuteAsync(getLocaleQuery, executionContext);
            }

            // Custom Mapping
            await MapDataModelAsync(query, dbVersion, entity.LatestVersion, executionContext);

            await MapPages(dbVersion, entity, executionContext);

            return(entity);
        }
        private async Task <CustomEntityDetails> Map(
            GetByIdQuery <CustomEntityDetails> query,
            CustomEntityVersion dbVersion,
            IExecutionContext executionContext)
        {
            if (dbVersion == null)
            {
                return(null);
            }

            var entity = Mapper.Map <CustomEntityDetails>(dbVersion.CustomEntity);

            entity.LatestVersion = Mapper.Map <CustomEntityVersionDetails>(dbVersion);
            entity.HasDraft      = entity.LatestVersion.WorkFlowStatus == WorkFlowStatus.Draft;
            entity.IsPublished   = entity.LatestVersion.WorkFlowStatus == WorkFlowStatus.Published;

            if (!entity.IsPublished)
            {
                entity.IsPublished = await _dbContext
                                     .CustomEntityVersions
                                     .AnyAsync(v => v.CustomEntityId == query.Id && v.WorkFlowStatusId == (int)WorkFlowStatus.Published);
            }

            // Custom Mapping
            MapDataModel(query, dbVersion, entity.LatestVersion);

            await MapPages(dbVersion, entity, executionContext);

            return(entity);
        }
Example #5
0
        private CustomEntity MapEntity(AddCustomEntityCommand command, CustomEntityDefinitionSummary definition, IExecutionContext executionContext)
        {
            var entity = new CustomEntity();

            _entityAuditHelper.SetCreated(entity, executionContext);

            entity.Locale  = GetLocale(command.LocaleId);
            entity.UrlSlug = command.UrlSlug;
            entity.CustomEntityDefinitionCode = definition.CustomEntityDefinitionCode;

            var version = new CustomEntityVersion();

            version.Title          = command.Title.Trim();
            version.SerializedData = _dbUnstructuredDataSerializer.Serialize(command.Model);
            version.DisplayVersion = 1;

            if (command.Publish)
            {
                entity.PublishStatusCode = PublishStatusCode.Published;
                entity.PublishDate       = command.PublishDate ?? executionContext.ExecutionDate;
                version.WorkFlowStatusId = (int)WorkFlowStatus.Published;
            }
            else
            {
                entity.PublishStatusCode = PublishStatusCode.Unpublished;
                entity.PublishDate       = command.PublishDate;
                version.WorkFlowStatusId = (int)WorkFlowStatus.Draft;
            }

            _entityAuditHelper.SetCreated(version, executionContext);
            entity.CustomEntityVersions.Add(version);

            return(entity);
        }
Example #6
0
        private CustomEntityDetails MapInitialData(CustomEntityVersion dbVersion, IExecutionContext executionContext)
        {
            var entity = new CustomEntityDetails()
            {
                CustomEntityId = dbVersion.CustomEntity.CustomEntityId,
                UrlSlug        = dbVersion.CustomEntity.UrlSlug,
                PublishStatus  = PublishStatusMapper.FromCode(dbVersion.CustomEntity.PublishStatusCode),
                PublishDate    = DbDateTimeMapper.AsUtc(dbVersion.CustomEntity.PublishDate),
            };

            entity.IsPublished = entity.PublishStatus == PublishStatus.Published && entity.PublishDate <= executionContext.ExecutionDate;
            entity.AuditData   = _auditDataMapper.MapCreateAuditData(dbVersion.CustomEntity);

            entity.LatestVersion = new CustomEntityVersionDetails()
            {
                CustomEntityVersionId = dbVersion.CustomEntityVersionId,
                Title          = dbVersion.Title,
                WorkFlowStatus = (WorkFlowStatus)dbVersion.WorkFlowStatusId
            };

            entity.LatestVersion.AuditData = _auditDataMapper.MapCreateAuditData(dbVersion);
            entity.HasDraft = entity.LatestVersion.WorkFlowStatus == WorkFlowStatus.Draft;

            return(entity);
        }
        private void MapDataModel(GetByIdQuery <CustomEntityDetails> query, CustomEntityVersion dbVersion, CustomEntityVersionDetails version)
        {
            var definition = _queryExecutor.GetById <CustomEntityDefinitionSummary>(dbVersion.CustomEntity.CustomEntityDefinitionCode);

            EntityNotFoundException.ThrowIfNull(definition, dbVersion.CustomEntity.CustomEntityDefinitionCode);

            version.Model = (ICustomEntityVersionDataModel)_dbUnstructuredDataSerializer.Deserialize(dbVersion.SerializedData, definition.DataModelType);
        }
        private CustomEntityRenderDetails MapCustomEntity(CustomEntityVersion dbResult)
        {
            _permissionValidationService.EnforceCustomEntityPermission <CustomEntityReadPermission>(dbResult.CustomEntity.CustomEntityDefinitionCode);

            var entity = Mapper.Map <CustomEntityRenderDetails>(dbResult);

            entity.Model = _customEntityDataModelMapper.Map(dbResult.CustomEntity.CustomEntityDefinitionCode, dbResult.SerializedData);

            return(entity);
        }
        private Task OnTransactionComplete(CustomEntityVersion version)
        {
            _customEntityCache.Clear(version.CustomEntity.CustomEntityDefinitionCode, version.CustomEntityId);

            return(_messageAggregator.PublishAsync(new CustomEntityPublishedMessage()
            {
                CustomEntityId = version.CustomEntityId,
                CustomEntityDefinitionCode = version.CustomEntity.CustomEntityDefinitionCode
            }));
        }
Example #10
0
        private Task OnTransactionComplete(CustomEntityVersion customEntityVersion, CustomEntityVersionPageBlock newBlock)
        {
            _customEntityCache.Clear(customEntityVersion.CustomEntity.CustomEntityDefinitionCode, customEntityVersion.CustomEntityId);

            return(_messageAggregator.PublishAsync(new CustomEntityVersionBlockAddedMessage()
            {
                CustomEntityId = customEntityVersion.CustomEntityId,
                CustomEntityVersionPageBlockId = newBlock.CustomEntityVersionPageBlockId,
                CustomEntityDefinitionCode = customEntityVersion.CustomEntity.CustomEntityDefinitionCode
            }));
        }
        private IsCustomEntityUrlSlugUniqueQuery GetUniquenessQuery(CustomEntityVersion dbVersion, ICustomEntityDefinition definition)
        {
            var query = new IsCustomEntityUrlSlugUniqueQuery();

            query.CustomEntityDefinitionCode = definition.CustomEntityDefinitionCode;
            query.LocaleId       = dbVersion.CustomEntity.LocaleId;
            query.UrlSlug        = SlugFormatter.ToSlug(dbVersion.Title);
            query.CustomEntityId = dbVersion.CustomEntityId;

            return(query);
        }
Example #12
0
        /// <summary>
        /// Maps an EF CustomEntityVersion record from the db into a CustomEntityVersionSummary
        /// object. If the db record is null then null is returned.
        /// </summary>
        /// <param name="dbVersion">CustomEntityVersion record from the database.</param>
        private CustomEntityVersionSummary MapVersion(CustomEntityVersion dbVersion)
        {
            var versionSummary = new CustomEntityVersionSummary()
            {
                CustomEntityVersionId = dbVersion.CustomEntityVersionId,
                Title          = dbVersion.Title,
                WorkFlowStatus = (WorkFlowStatus)dbVersion.WorkFlowStatusId,
                AuditData      = _auditDataMapper.MapCreateAuditData(dbVersion)
            };

            return(versionSummary);
        }
        private static GetPageRoutingInfoByCustomEntityIdQuery GetPageRoutingQuery(CustomEntityVersion dbResult)
        {
            if (dbResult == null)
            {
                throw new ArgumentNullException(nameof(dbResult));
            }
            if (dbResult.CustomEntity == null)
            {
                throw new ArgumentNullException(nameof(dbResult.CustomEntity));
            }

            return(new GetPageRoutingInfoByCustomEntityIdQuery(dbResult.CustomEntityId));
        }
        private CustomEntityRenderSummary MapSingle(
            CustomEntityVersion dbResult,
            ICollection <PageRoutingInfo> allRoutings,
            ActiveLocale locale
            )
        {
            var entity = MapCore(dbResult);

            entity.Locale   = locale;
            entity.PageUrls = MapPageRoutings(allRoutings, dbResult);

            return(entity);
        }
Example #15
0
        private CustomEntityRenderSummary MapSingle(
            CustomEntityVersion dbResult,
            IEnumerable <PageRoutingInfo> allRoutings,
            ActiveLocale locale
            )
        {
            var entity = Mapper.Map <CustomEntityRenderSummary>(dbResult);

            entity.Locale          = locale;
            entity.Model           = _customEntityDataModelMapper.Map(dbResult.CustomEntity.CustomEntityDefinitionCode, dbResult.SerializedData);
            entity.DetailsPageUrls = MapPageRoutings(allRoutings, dbResult);

            return(entity);
        }
Example #16
0
        private async Task MapDataModelAsync(
            GetCustomEntityDetailsByIdQuery query,
            CustomEntityVersion dbVersion,
            CustomEntityVersionDetails version,
            IExecutionContext executionContext
            )
        {
            var definitionQuery = new GetCustomEntityDefinitionSummaryByCodeQuery(dbVersion.CustomEntity.CustomEntityDefinitionCode);
            var definition      = await _queryExecutor.ExecuteAsync(definitionQuery, executionContext);

            EntityNotFoundException.ThrowIfNull(definition, dbVersion.CustomEntity.CustomEntityDefinitionCode);

            version.Model = (ICustomEntityDataModel)_dbUnstructuredDataSerializer.Deserialize(dbVersion.SerializedData, definition.DataModelType);
        }
        /// <summary>
        /// If the url slug is autogenerated, we need to update it only when the custom entity is published.
        /// </summary>
        private async Task UpdateUrlSlugIfRequired(CustomEntityVersion dbVersion, ICustomEntityDefinition definition)
        {
            if (!definition.AutoGenerateUrlSlug)
            {
                return;
            }

            var urlCommand = new UpdateCustomEntityUrlCommand()
            {
                CustomEntityId = dbVersion.CustomEntityId,
                LocaleId       = dbVersion.CustomEntity.LocaleId,
                UrlSlug        = SlugFormatter.ToSlug(dbVersion.Title)
            };

            await _commandExecutor.ExecuteAsync(urlCommand);
        }
Example #18
0
        public async Task <CustomEntityRenderSummary> MapSummaryAsync(
            CustomEntityVersion dbResult,
            IExecutionContext executionContext
            )
        {
            var routingQuery = GetPageRoutingQuery(dbResult);
            var routing      = await _queryExecutor.ExecuteAsync(routingQuery, executionContext);

            ActiveLocale locale = null;

            if (dbResult.CustomEntity.LocaleId.HasValue)
            {
                locale = await _queryExecutor.GetByIdAsync <ActiveLocale>(dbResult.CustomEntity.LocaleId.Value, executionContext);
            }

            return(MapSingle(dbResult, routing, locale));
        }
Example #19
0
        private AddCustomEntityCommand MapCommand(
            DuplicateCustomEntityCommand command,
            CustomEntityVersion customEntityVersionToDuplicate
            )
        {
            EntityNotFoundException.ThrowIfNull(customEntityVersionToDuplicate, command.CustomEntityToDuplicateId);

            var addCustomEntityCommand = new AddCustomEntityCommand();

            addCustomEntityCommand.Title    = command.Title;
            addCustomEntityCommand.LocaleId = command.LocaleId;
            addCustomEntityCommand.UrlSlug  = command.UrlSlug;
            addCustomEntityCommand.CustomEntityDefinitionCode = customEntityVersionToDuplicate.CustomEntity.CustomEntityDefinitionCode;
            addCustomEntityCommand.Model = _customEntityDataModelMapper.Map(addCustomEntityCommand.CustomEntityDefinitionCode, customEntityVersionToDuplicate.SerializedData);

            return(addCustomEntityCommand);
        }
        private async Task <CustomEntityVersion> CreateDraftIfRequiredAsync(
            UpdateCustomEntityDraftVersionCommand command,
            CustomEntityVersion draft,
            IExecutionContext executionContext
            )
        {
            if (draft != null)
            {
                return(draft);
            }

            var addDraftCommand = new AddCustomEntityDraftVersionCommand();

            addDraftCommand.CustomEntityId = command.CustomEntityId;
            await _commandExecutor.ExecuteAsync(addDraftCommand, executionContext);

            return(await GetDraftVersionAsync(command));
        }
        private async Task ValidateTitleAsync(CustomEntityVersion dbVersion, ICustomEntityDefinition definition, IExecutionContext executionContext)
        {
            if (!definition.ForceUrlSlugUniqueness || SlugFormatter.ToSlug(dbVersion.Title) == dbVersion.CustomEntity.UrlSlug)
            {
                return;
            }

            var query    = GetUniquenessQuery(dbVersion, definition);
            var isUnique = await _queryExecutor.ExecuteAsync(query, executionContext);

            if (!isUnique)
            {
                var message = string.Format("Cannot publish because the {1} '{0}' is not unique (symbols and spaces are ignored in the uniqueness check)",
                                            dbVersion.Title,
                                            definition.GetTerms().GetOrDefault(CustomizableCustomEntityTermKeys.Title, "title").ToLower());

                throw new UniqueConstraintViolationException(message, "Title", dbVersion.Title);
            }
        }
        private CustomEntityRenderSummary MapCore(CustomEntityVersion dbResult)
        {
            var entity = new CustomEntityRenderSummary()
            {
                CreateDate = DbDateTimeMapper.AsUtc(dbResult.CreateDate),
                CustomEntityDefinitionCode = dbResult.CustomEntity.CustomEntityDefinitionCode,
                CustomEntityId             = dbResult.CustomEntityId,
                CustomEntityVersionId      = dbResult.CustomEntityVersionId,
                Ordering       = dbResult.CustomEntity.Ordering,
                Title          = dbResult.Title,
                UrlSlug        = dbResult.CustomEntity.UrlSlug,
                WorkFlowStatus = (WorkFlowStatus)dbResult.WorkFlowStatusId,
                PublishDate    = DbDateTimeMapper.AsUtc(dbResult.CustomEntity.PublishDate)
            };

            entity.PublishStatus = PublishStatusMapper.FromCode(dbResult.CustomEntity.PublishStatusCode);
            entity.Model         = _customEntityDataModelMapper.Map(dbResult.CustomEntity.CustomEntityDefinitionCode, dbResult.SerializedData);

            return(entity);
        }
Example #23
0
        private ICollection<string> MapPageRoutings(
            ICollection<PageRoutingInfo> allRoutings,
            CustomEntityVersion dbResult
            )
        {
            if (allRoutings == null) return Array.Empty<string>();

            var urls = new List<string>(allRoutings.Count());

            foreach (var detailsRouting in allRoutings
                .Where(r => r.CustomEntityRouteRule != null))
            {
                var detailsUrl = detailsRouting
                    .CustomEntityRouteRule
                    .MakeUrl(detailsRouting.PageRoute, detailsRouting.CustomEntityRoute);

                urls.Add(detailsUrl);
            }

            return urls;
        }
Example #24
0
        private CustomEntityRenderDetails MapCustomEntity(CustomEntityVersion dbResult, IExecutionContext executionContext)
        {
            _permissionValidationService.EnforceCustomEntityPermission <CustomEntityReadPermission>(dbResult.CustomEntity.CustomEntityDefinitionCode, executionContext.UserContext);

            var entity = new CustomEntityRenderDetails()
            {
                CreateDate = DbDateTimeMapper.AsUtc(dbResult.CreateDate),
                CustomEntityDefinitionCode = dbResult.CustomEntity.CustomEntityDefinitionCode,
                CustomEntityId             = dbResult.CustomEntityId,
                CustomEntityVersionId      = dbResult.CustomEntityVersionId,
                Ordering       = dbResult.CustomEntity.Ordering,
                Title          = dbResult.Title,
                UrlSlug        = dbResult.CustomEntity.UrlSlug,
                WorkFlowStatus = (WorkFlowStatus)dbResult.WorkFlowStatusId,
                PublishDate    = DbDateTimeMapper.AsUtc(dbResult.CustomEntity.PublishDate)
            };

            entity.PublishStatus = PublishStatusMapper.FromCode(dbResult.CustomEntity.PublishStatusCode);
            entity.Model         = _customEntityDataModelMapper.Map(dbResult.CustomEntity.CustomEntityDefinitionCode, dbResult.SerializedData);

            return(entity);
        }
        private CustomEntity MapEntity(AddCustomEntityCommand command, CustomEntityDefinitionSummary definition, IExecutionContext executionContext)
        {
            // Create Page
            var entity = new CustomEntity();

            _entityAuditHelper.SetCreated(entity, executionContext);

            entity.Locale  = GetLocale(command.LocaleId);
            entity.UrlSlug = command.UrlSlug;
            entity.CustomEntityDefinitionCode = definition.CustomEntityDefinitionCode;

            var version = new CustomEntityVersion();

            version.Title            = command.Title.Trim();
            version.SerializedData   = _dbUnstructuredDataSerializer.Serialize(command.Model);
            version.WorkFlowStatusId = command.Publish ? (int)WorkFlowStatus.Published : (int)WorkFlowStatus.Draft;

            _entityAuditHelper.SetCreated(version, executionContext);
            entity.CustomEntityVersions.Add(version);

            return(entity);
        }
Example #26
0
        private async Task<CustomEntityRenderDetails> MapCustomEntityAsync(CustomEntityVersion dbResult)
        {
            await _permissionValidationService.EnforceCustomEntityPermissionAsync<CustomEntityReadPermission>(dbResult.CustomEntity.CustomEntityDefinitionCode);

            var entity = new CustomEntityRenderDetails()
            {
                CreateDate = DbDateTimeMapper.AsUtc(dbResult.CreateDate),
                CustomEntityDefinitionCode = dbResult.CustomEntity.CustomEntityDefinitionCode,
                CustomEntityId = dbResult.CustomEntityId,
                CustomEntityVersionId = dbResult.CustomEntityVersionId,
                Ordering = dbResult.CustomEntity.Ordering,
                Title = dbResult.Title,
                UrlSlug = dbResult.CustomEntity.UrlSlug,
                WorkFlowStatus = (WorkFlowStatus)dbResult.WorkFlowStatusId,
                PublishDate = DbDateTimeMapper.AsUtc(dbResult.CustomEntity.PublishDate)
            };

            entity.PublishStatus = PublishStatusMapper.FromCode(dbResult.CustomEntity.PublishStatusCode);
            entity.Model = _customEntityDataModelMapper.Map(dbResult.CustomEntity.CustomEntityDefinitionCode, dbResult.SerializedData);
            
            return entity;
        }
Example #27
0
        private IEnumerable <string> MapPageRoutings(
            IEnumerable <PageRoutingInfo> allRoutings,
            CustomEntityVersion dbResult)
        {
            if (allRoutings == null)
            {
                return(Enumerable.Empty <string>());
            }

            var urls = new List <string>(allRoutings.Count());

            foreach (var detailsRouting in allRoutings
                     .Where(r => r.CustomEntityRouteRule != null))
            {
                var detailsUrl = detailsRouting
                                 .CustomEntityRouteRule
                                 .MakeUrl(detailsRouting.PageRoute, detailsRouting.CustomEntityRoute);

                urls.Add(detailsUrl);
            }

            return(urls);
        }
        /// <summary>
        /// Maps an EF CustomEntityVersion record from the db into a CustomEntityRenderSummary
        /// object. If the db record is null then null is returned.
        /// </summary>
        /// <param name="dbResult">CustomEntityVersion record from the database.</param>
        /// <param name="executionContext">Context to run any sub queries under.</param>
        public async Task <CustomEntityRenderSummary> MapAsync(
            CustomEntityVersion dbResult,
            IExecutionContext executionContext
            )
        {
            if (dbResult == null)
            {
                return(null);
            }

            var routingQuery = GetPageRoutingQuery(dbResult);
            var routing      = await _queryExecutor.ExecuteAsync(routingQuery, executionContext);

            ActiveLocale locale = null;

            if (dbResult.CustomEntity.LocaleId.HasValue)
            {
                var getLocaleQuery = new GetActiveLocaleByIdQuery(dbResult.CustomEntity.LocaleId.Value);
                locale = await _queryExecutor.ExecuteAsync(getLocaleQuery, executionContext);
            }

            return(MapSingle(dbResult, routing, locale));
        }
Example #29
0
        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();
        }
        private Task OnUpdateDraftComplete(UpdateCustomEntityDraftVersionCommand command, CustomEntityVersion draft)
        {
            _customEntityCache.Clear(command.CustomEntityDefinitionCode, command.CustomEntityId);

            return(_messageAggregator.PublishAsync(new CustomEntityDraftVersionUpdatedMessage()
            {
                CustomEntityId = command.CustomEntityId,
                CustomEntityDefinitionCode = command.CustomEntityDefinitionCode,
                CustomEntityVersionId = draft.CustomEntityVersionId
            }));
        }