public async Task <ReviewPayload> CreateReview( ReviewInput input, [Service] BreweryDbContext dbContext, [Service] IBreweryConductor breweryConductor, [Service] ITopicEventSender eventSender, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(input.Subject)) { throw ErrorBuilder.New() .AsGraphQLException(SUBJECT_EMPTY, nameof(SUBJECT_EMPTY)); } if (string.IsNullOrEmpty(input.Body)) { throw ErrorBuilder.New() .AsGraphQLException(BODY_EMPTY, nameof(BODY_EMPTY)); } var review = new Review { Subject = input.Subject, Body = input.Body, BreweryId = input.BreweryId, CreatedOn = DateTimeOffset.Now, }; _ = await dbContext.AddAsync(review); _ = await dbContext.SaveChangesAsync(cancellationToken); var breweryResult = breweryConductor.Find(input.BreweryId); if (breweryResult.HasErrorsOrResultIsNull()) { throw breweryResult.Errors .AsGraphQLException(); } review.Brewery = breweryResult.ResultObject; await eventSender.SendAsync( nameof(ReviewSubscriptions.OnReviewReceived), review, cancellationToken); return(new ReviewPayload(review, input.ClientMutationId)); }
public override IGraphQlObjectResult <Interfaces.Review?> CreateReview(Episode?episode, ReviewInput review) { if (episode == null) { throw new ArgumentNullException(nameof(episode)); } return(this.ResolveTask(async _ => { await Task.Yield(); var ep = InterfaceToDomain.ConvertEpisode(episode.Value); var newReview = new Domain.Review { Episode = ep, Commentary = review.Commentary, Stars = review.Stars }; Domain.Data.reviews[ep].Add(newReview); return newReview; }).AsContract <Review>()); }