예제 #1
0
        private async Task <PageVersionBlockRenderDetails> MapAsync(
            PageVersionBlock pageVersionBlock,
            string blockTypeFileName,
            PublishStatusQuery publishStatus,
            IExecutionContext executionContext
            )
        {
            var blockTypeQuery = new GetPageBlockTypeSummaryByIdQuery(pageVersionBlock.PageBlockTypeId);
            var blockType      = await _queryExecutor.ExecuteAsync(blockTypeQuery, executionContext);

            EntityNotFoundException.ThrowIfNull(blockType, pageVersionBlock.PageBlockTypeId);

            var result = new PageVersionBlockRenderDetails();

            result.PageVersionBlockId = pageVersionBlock.PageVersionBlockId;
            result.BlockType          = blockType;
            result.DisplayModel       = await _pageVersionBlockModelMapper.MapDisplayModelAsync(
                blockTypeFileName,
                pageVersionBlock,
                publishStatus,
                executionContext
                );

            return(result);
        }
예제 #2
0
 private IQueryable <int> GetOrderedBlockIds(PageVersionBlock pageVersionBlock)
 {
     return(_dbContext
            .PageVersionBlocks
            .AsNoTracking()
            .Where(m => m.PageVersionId == pageVersionBlock.PageVersionId && m.PageTemplateRegionId == pageVersionBlock.PageTemplateRegionId)
            .OrderBy(m => m.Ordering)
            .Select(m => m.PageVersionBlockId));
 }
        private Task OnTransactionComplete(PageVersion pageVersion, PageVersionBlock newBlock)
        {
            _pageCache.Clear(pageVersion.PageId);

            return(_messageAggregator.PublishAsync(new PageVersionBlockAddedMessage()
            {
                PageId = pageVersion.PageId,
                PageVersionBlockId = newBlock.PageVersionBlockId
            }));
        }
예제 #4
0
 static void AssertBlockMatches(PageVersionBlock publishedBlock, PageVersionBlock draftBlock)
 {
     draftBlock.Should().NotBeNull();
     draftBlock.CreateDate.Should().Be(publishedBlock.CreateDate);
     draftBlock.Ordering.Should().Be(publishedBlock.Ordering);
     draftBlock.PageBlockTypeId.Should().Be(publishedBlock.PageBlockTypeId);
     draftBlock.PageBlockTypeTemplateId.Should().Be(publishedBlock.PageBlockTypeTemplateId);
     draftBlock.PageTemplateRegionId.Should().Be(publishedBlock.PageTemplateRegionId);
     draftBlock.SerializedData.Should().Be(publishedBlock.SerializedData);
     draftBlock.UpdateDate.Should().Be(draftBlock.CreateDate);
 }
예제 #5
0
        private PageVersionBlockDetails MapPageBlock(PageVersionBlock dbBlock, ICollection <PageBlockTypeSummary> allBlockTypes)
        {
            var blockType = allBlockTypes.SingleOrDefault(t => t.PageBlockTypeId == dbBlock.PageBlockTypeId);

            var block = new PageVersionBlockDetails();

            block.BlockType          = blockType;
            block.DataModel          = _pageVersionBlockModelMapper.MapDataModel(blockType.FileName, dbBlock);
            block.PageVersionBlockId = dbBlock.PageVersionBlockId;
            block.Template           = _entityVersionPageBlockMapper.GetCustomTemplate(dbBlock, blockType);

            return(block);
        }
예제 #6
0
        private UpdatePageVersionBlockCommand Map(PageVersionBlock pageVersionBlock, string blockTypeFileName)
        {
            var result = new UpdatePageVersionBlockCommand()
            {
                PageBlockTypeId         = pageVersionBlock.PageBlockTypeId,
                PageBlockTypeTemplateId = pageVersionBlock.PageBlockTypeTemplateId,
                PageVersionBlockId      = pageVersionBlock.PageVersionBlockId
            };

            result.DataModel = _pageVersionBlockModelMapper.MapDataModel(blockTypeFileName, pageVersionBlock);

            return(result);
        }
        public async Task ExecuteAsync(AddPageVersionBlockCommand command, IExecutionContext executionContext)
        {
            var templateRegion = await _dbContext
                                 .PageTemplateRegions
                                 .FirstOrDefaultAsync(l => l.PageTemplateRegionId == command.PageTemplateRegionId);

            EntityNotFoundException.ThrowIfNull(templateRegion, command.PageTemplateRegionId);

            var pageVersion = _dbContext
                              .PageVersions
                              .Include(s => s.PageVersionBlocks)
                              .FirstOrDefault(v => v.PageVersionId == command.PageVersionId);

            EntityNotFoundException.ThrowIfNull(pageVersion, command.PageVersionId);

            if (pageVersion.WorkFlowStatusId != (int)WorkFlowStatus.Draft)
            {
                throw new NotPermittedException("Page blocks cannot be added unless the page version is in draft status");
            }

            var pageVersionBlocks = pageVersion
                                    .PageVersionBlocks
                                    .Where(m => m.PageTemplateRegionId == templateRegion.PageTemplateRegionId);

            PageVersionBlock adjacentItem = null;

            if (command.AdjacentVersionBlockId.HasValue)
            {
                adjacentItem = pageVersionBlocks
                               .SingleOrDefault(m => m.PageVersionBlockId == command.AdjacentVersionBlockId);
                EntityNotFoundException.ThrowIfNull(adjacentItem, command.AdjacentVersionBlockId);
            }

            var newBlock = new PageVersionBlock();

            newBlock.PageTemplateRegion = templateRegion;

            await _pageBlockCommandHelper.UpdateModelAsync(command, newBlock);

            newBlock.PageVersion = pageVersion;
            newBlock.UpdateDate  = executionContext.ExecutionDate;

            _entityAuditHelper.SetCreated(newBlock, executionContext);
            _entityOrderableHelper.SetOrderingForInsert(pageVersionBlocks, newBlock, command.InsertMode, adjacentItem);

            _dbContext.PageVersionBlocks.Add(newBlock);
            using (var scope = _transactionScopeFactory.Create(_dbContext))
            {
                await _dbContext.SaveChangesAsync();

                var dependencyCommand = new UpdateUnstructuredDataDependenciesCommand(
                    PageVersionBlockEntityDefinition.DefinitionCode,
                    newBlock.PageVersionBlockId,
                    command.DataModel);

                await _commandExecutor.ExecuteAsync(dependencyCommand, executionContext);

                scope.QueueCompletionTask(() => OnTransactionComplete(pageVersion, newBlock));

                await scope.CompleteAsync();
            }

            command.OutputPageBlockId = newBlock.PageVersionBlockId;
        }