public ReviewPartVM(ReviewPart model, ReviewTypeVM type)
 {
     displayOrder = type.displayOrder;
     reviewTypeId = type.reviewId;
     if (model != null)
     {
         id    = model.Id;
         score = model.Score;
     }
 }
Esempio n. 2
0
        internal Result AddReview(AddReviewRequest reqiest)
        {
            try
            {
                User user = context.Users.FirstOrDefault(a => a.Id == reqiest.userId);
                Room room = user.Room;

                if (!room.Room2Beverages.Any(a => a.BeverageId == reqiest.beverageId))
                {
                    return(new Result(ResultStatus.ERROR, "Beverage not in current room"));
                }

                if (room.Room2Beverages.Any(a => a.BeverageId == reqiest.beverageId && a.IsLocked))
                {
                    return(new Result(ResultStatus.ERROR, "Beverage closed for reviewing"));
                }

                if (reqiest.parts.Any(a => a.score < 0))
                {
                    return(new Result(ResultStatus.ERROR, "Score cannot be negative"));
                }

                string         resultmessage = "";
                BeverageReview review        = new BeverageReview();
                decimal        total         = 0;
                foreach (var part in reqiest.parts)
                {
                    var reviewType = room.Room2ReviewTypes.FirstOrDefault(a => a.ReviewTypeId == part.reviewTypeId);
                    total += (reviewType.MaxValue / 100m) * part.score;
                }

                total = Math.Round(total, 2);

                if (!user.BeverageReviews.Any(a => a.BeverageId == reqiest.beverageId))
                {
                    EntitySet <ReviewPart> partsToAdd = new EntitySet <ReviewPart>();
                    partsToAdd.AddRange(reqiest.parts.Select(a => new ReviewPart()
                    {
                        ReviewTypeId = a.reviewTypeId,
                        Score        = a.score
                    }));

                    review = new BeverageReview()
                    {
                        BeverageId  = reqiest.beverageId,
                        DateCreated = DateTime.Now,
                        RoomId      = room.Id,
                        TotalScore  = total,
                        ReviewParts = partsToAdd,
                        Comment     = reqiest.comment
                    };
                    user.BeverageReviews.Add(review);

                    resultmessage = "Review Added";
                }
                else
                {
                    review            = user.BeverageReviews.FirstOrDefault(a => a.BeverageId == reqiest.beverageId);
                    review.TotalScore = total;
                    review.Comment    = reqiest.comment;


                    foreach (var part in reqiest.parts)
                    {
                        ReviewPart p = review.ReviewParts.FirstOrDefault(a => a.ReviewTypeId == part.reviewTypeId);
                        p.Score = part.score;
                    }

                    resultmessage = "Review Updated";
                }

                context.SubmitChanges();
                beerhub             hub   = new beerhub();
                Beverage            b     = room.Room2Beverages.FirstOrDefault(a => a.BeverageId == reqiest.beverageId).Beverage;
                List <ReviewTypeVM> types = room.Room2ReviewTypes.Select(a => new ReviewTypeVM(a)).ToList();
                hub.PushReview(room.Code, new BeverageReviewVM(b, types, user, review));


                return(new Result(ResultStatus.SUCCESS, resultmessage));
            }
            catch (Exception ex)
            {
                return(new UserRoomModel(ResultStatus.ERROR, ex.Message));
            }
        }