示例#1
0
        public async Task <Either <ActionResult, PublicationViewModel> > CreatePublication(
            PublicationSaveViewModel publication)
        {
            return(await ValidateSelectedTopic(publication.TopicId)
                   .OnSuccess(async _ =>
            {
                if (_context.Publications.Any(p => p.Slug == publication.Slug))
                {
                    return ValidationActionResult(SlugNotUnique);
                }

                var contact = await _context.Contacts.AddAsync(new Contact
                {
                    ContactName = publication.Contact.ContactName,
                    ContactTelNo = publication.Contact.ContactTelNo,
                    TeamName = publication.Contact.TeamName,
                    TeamEmail = publication.Contact.TeamEmail
                });

                var saved = await _context.Publications.AddAsync(new Publication
                {
                    Contact = contact.Entity,
                    Title = publication.Title,
                    TopicId = publication.TopicId,
                    Slug = publication.Slug,
                    ExternalMethodology = publication.ExternalMethodology
                });

                await _context.SaveChangesAsync();

                return await GetPublication(saved.Entity.Id);
            }));
        }
 public async Task <ActionResult <PublicationViewModel> > CreatePublication(
     PublicationSaveViewModel publication)
 {
     return(await _publicationService
            .CreatePublication(publication)
            .HandleFailuresOrOk());
 }
 public async Task <ActionResult <PublicationViewModel> > UpdatePublication(
     Guid publicationId,
     PublicationSaveViewModel updatedPublication)
 {
     return(await _publicationService
            .UpdatePublication(publicationId, updatedPublication)
            .HandleFailuresOrOk());
 }
示例#4
0
        public async Task <Either <ActionResult, PublicationViewModel> > UpdatePublication(
            Guid publicationId,
            PublicationSaveViewModel updatedPublication)
        {
            return(await _persistenceHelper
                   .CheckEntityExists <Publication>(publicationId)
                   .OnSuccess(_userService.CheckCanUpdatePublication)
                   .OnSuccessDo(async publication =>
            {
                if (publication.Title != updatedPublication.Title)
                {
                    return await _userService.CheckCanUpdatePublicationTitle();
                }

                return Unit.Instance;
            })
                   .OnSuccessDo(async publication =>
            {
                if (publication.TopicId != updatedPublication.TopicId)
                {
                    return await ValidateSelectedTopic(updatedPublication.TopicId);
                }

                return Unit.Instance;
            })
                   .OnSuccess(async publication =>
            {
                var originalTitle = publication.Title;
                var originalSlug = publication.Slug;

                if (!publication.Live)
                {
                    var slugValidation = await ValidatePublicationSlugUniqueForUpdate(publication.Id, updatedPublication.Slug);

                    if (slugValidation.IsLeft)
                    {
                        return new Either <ActionResult, PublicationViewModel>(slugValidation.Left);
                    }

                    publication.Slug = updatedPublication.Slug;
                }

                publication.Title = updatedPublication.Title;
                publication.TopicId = updatedPublication.TopicId;
                publication.ExternalMethodology = updatedPublication.ExternalMethodology;
                publication.Updated = DateTime.UtcNow;

                // Add new contact if it doesn't exist, otherwise replace existing
                // contact that is shared with another publication with a new
                // contact, as we want each publication to have its own contact.
                if (publication.Contact == null ||
                    _context.Publications
                    .Any(p => p.ContactId == publication.ContactId && p.Id != publication.Id))
                {
                    publication.Contact = new Contact();
                }

                publication.Contact.ContactName = updatedPublication.Contact.ContactName;
                publication.Contact.ContactTelNo = updatedPublication.Contact.ContactTelNo;
                publication.Contact.TeamName = updatedPublication.Contact.TeamName;
                publication.Contact.TeamEmail = updatedPublication.Contact.TeamEmail;

                _context.Publications.Update(publication);

                await _context.SaveChangesAsync();

                if (originalTitle != publication.Title)
                {
                    await _methodologyVersionRepository.PublicationTitleChanged(publicationId, originalSlug, publication.Title, publication.Slug);
                }

                if (publication.Live)
                {
                    publication.Published = DateTime.UtcNow;
                    await _context.SaveChangesAsync();

                    await DeleteCachedTaxonomyBlobs();
                    await _publicBlobCacheService.DeleteItem(new PublicationCacheKey(publication.Slug));
                    // TODO: @MarkFix EES-3149 Need to handle superseded publication.json cache files here too?
                }

                return await GetPublication(publication.Id);
            }));
        }