Ejemplo n.º 1
0
        /// <summary>
        /// Puts the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns><c>PutPageContentResponse</c> with saved page content id.</returns>
        public PutPageContentResponse Put(PutPageContentRequest request)
        {
            var         isNew       = !request.Id.HasValue || request.Id.Value.HasDefaultValue();
            PageContent pageContent = null;
            var         isSorting   = false;

            if (!isNew)
            {
                pageContent = repository
                              .AsQueryable <PageContent>()
                              .FirstOrDefault(content => content.Id == request.Id && content.Page.Id == request.PageId);
                isNew = pageContent == null;
            }

            if (isNew)
            {
                pageContent = new PageContent
                {
                    Id   = request.Id.HasValue ? request.Id.Value : Guid.Empty,
                    Page = repository.AsProxy <Module.Root.Models.Page>(request.PageId)
                };
            }
            else if (request.Data.Version > 0)
            {
                isSorting           = request.Data.RegionId != pageContent.Region.Id || request.Data.Order != pageContent.Order;
                pageContent.Version = request.Data.Version;
            }

            pageContent.Content = repository.AsProxy <Module.Root.Models.Content>(request.Data.ContentId);
            pageContent.Region  = repository.AsProxy <Region>(request.Data.RegionId);
            pageContent.Order   = request.Data.Order;

            if (request.Data.ParentPageContentId.HasValue && !request.Data.ParentPageContentId.Value.HasDefaultValue())
            {
                pageContent.Parent = repository.AsProxy <PageContent>(request.Data.ParentPageContentId.Value);
            }
            else
            {
                pageContent.Parent = null;
            }

            if (request.Data.Options != null)
            {
                var options = request.Data.Options.ToServiceModel();

                var contentOptions = pageContent.Options != null?pageContent.Options.Distinct() : null;

                pageContent.Options = rootOptionService.SaveOptionValues(options, contentOptions, () => new PageContentOption
                {
                    PageContent = pageContent
                });
            }

            unitOfWork.BeginTransaction();
            repository.Save(pageContent);
            unitOfWork.Commit();

            if (isNew)
            {
                Events.PageEvents.Instance.OnPageContentInserted(pageContent);
            }
            else if (isSorting)
            {
                Events.PageEvents.Instance.OnPageContentSorted(pageContent);
            }

            if (request.Data.Options != null)
            {
                Events.PageEvents.Instance.OnPageContentConfigured(pageContent);
            }

            return(new PutPageContentResponse {
                Data = pageContent.Id
            });
        }