public async Task <ActionResult <PublicationViewModel> > CreatePublication( SavePublicationViewModel publication) { return(await _publicationService .CreatePublication(publication) .HandleFailuresOrOk()); }
public async Task <Either <ActionResult, PublicationViewModel> > UpdatePublication( Guid publicationId, SavePublicationViewModel updatedPublication) { return(await _persistenceHelper .CheckEntityExists <Publication>(publicationId) .OnSuccess(_userService.CheckCanUpdatePublication) .OnSuccessDo(_ => ValidateSelectedTopic(updatedPublication.TopicId)) .OnSuccessDo(_ => ValidateSelectedMethodology( updatedPublication.MethodologyId, updatedPublication.ExternalMethodology )) .OnSuccess(async publication => { if (publication.Live) { // Leave slug return publication; } return (await ValidatePublicationSlugUniqueForUpdate(publication.Id, updatedPublication.Slug)).Map(_ => { publication.Slug = updatedPublication.Slug; return publication; }); }) .OnSuccess(async publication => { publication.Title = updatedPublication.Title; publication.TopicId = updatedPublication.TopicId; publication.MethodologyId = updatedPublication.MethodologyId; 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 (publication.Live) { await _publishingService.PublicationChanged(publication.Id); } return await GetViewModel(publication.Id); })); }
public async Task <ActionResult <PublicationViewModel> > UpdatePublication( Guid publicationId, SavePublicationViewModel updatedPublication) { return(await _publicationService .UpdatePublication(publicationId, updatedPublication) .HandleFailuresOrOk()); }
public async Task <Either <ActionResult, PublicationViewModel> > CreatePublication( SavePublicationViewModel publication) { return(await ValidateSelectedTopic(publication.TopicId) .OnSuccess(_ => ValidateSelectedMethodology( publication.MethodologyId, publication.ExternalMethodology )) .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, MethodologyId = publication.MethodologyId, Slug = publication.Slug, ExternalMethodology = publication.ExternalMethodology }); await _context.SaveChangesAsync(); return await GetViewModel(saved.Entity.Id); })); }