public virtual PageTemplateDetails Map(PageTemplateDetailsQueryModel queryModel)
        {
            var dbPageTemplate = queryModel?.PageTemplate;

            if (dbPageTemplate == null)
            {
                return(null);
            }

            var pageTemplate = new PageTemplateDetails()
            {
                FullPath               = dbPageTemplate.FullPath,
                IsArchived             = dbPageTemplate.IsArchived,
                Name                   = dbPageTemplate.Name,
                PageTemplateId         = dbPageTemplate.PageTemplateId,
                CreateDate             = dbPageTemplate.CreateDate,
                Description            = dbPageTemplate.Description,
                FileName               = dbPageTemplate.FileName,
                PageType               = (PageType)dbPageTemplate.PageTypeId,
                CustomEntityModelType  = dbPageTemplate.CustomEntityModelType,
                UpdateDate             = dbPageTemplate.UpdateDate,
                NumPages               = queryModel.NumPages,
                CustomEntityDefinition = queryModel.CustomEntityDefinition
            };

            pageTemplate.Regions = queryModel
                                   .PageTemplate
                                   .PageTemplateRegions
                                   .Select(MapRegion)
                                   .ToList();

            return(pageTemplate);
        }
        public async Task <PageTemplateDetails> ExecuteAsync(GetPageTemplateDetailsByIdQuery query, IExecutionContext executionContext)
        {
            var queryModel = new PageTemplateDetailsQueryModel();

            queryModel.PageTemplate = await _dbContext
                                      .PageTemplates
                                      .AsNoTracking()
                                      .Include(t => t.PageTemplateRegions)
                                      .Where(l => l.PageTemplateId == query.PageTemplateId)
                                      .SingleOrDefaultAsync();

            if (queryModel.PageTemplate == null)
            {
                return(null);
            }

            if (!string.IsNullOrEmpty(queryModel.PageTemplate.CustomEntityDefinitionCode))
            {
                var definitionQuery = new GetCustomEntityDefinitionMicroSummaryByCodeQuery(queryModel.PageTemplate.CustomEntityDefinitionCode);
                queryModel.CustomEntityDefinition = await _queryExecutor.ExecuteAsync(definitionQuery, executionContext);
            }

            queryModel.NumPages = await _dbContext
                                  .PageVersions
                                  .AsNoTracking()
                                  .Where(v => v.PageTemplateId == query.PageTemplateId)
                                  .Select(v => v.Page)
                                  .Distinct()
                                  .CountAsync();

            var template = _pageTemplateDetailsMapper.Map(queryModel);

            return(template);
        }