Example #1
0
 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);
            }));
        }
Example #3
0
 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);
            }));
        }