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