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()); }
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); })); }