예제 #1
0
        public BeverageReviewVM(Beverage b, List <ReviewTypeVM> types, User user, BeverageReview model)

        {
            beverageId = b.Id;

            if (user != null)
            {
                username = user.Name;
                userId   = user.Id;
            }
            else
            {
                username = model.User.Name;
                userId   = model.User.Id;
            }
            parts = new List <ReviewPartVM>();

            if (model != null)
            {
                includeInCalculations = true;
                id         = model.Id;
                totalScore = model.TotalScore;
                model.ReviewParts.ToList().ForEach(a => parts.Add(new ReviewPartVM(a, types.FirstOrDefault(c => c.reviewId == a.ReviewTypeId))));
                comment = model.Comment;
            }
            else
            {
                Random rnd       = new Random(Guid.NewGuid().GetHashCode());
                int    rndnumber = rnd.Next();
                id = rndnumber;
                includeInCalculations = false;
                totalScore            = 0;
                types.ForEach(a => parts.Add(new ReviewPartVM(null, a)));
                comment = "";
            }
            parts = parts.OrderBy(a => a.displayOrder).ToList();
        }
예제 #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));
            }
        }
예제 #3
0
        public BeverageModelVM(Room2Beverage model, List <ReviewTypeVM> types, List <BeverageReview> allReviews, BeverageReview reviewFromUser = null)
        {
            Beverage b = model.Beverage;

            id                = model.Id;
            beverageId        = model.BeverageId;
            IBU               = b.IBU;
            displayOrder      = model.DisplayOrder;
            name              = b.Name;
            manufacturer      = b.Brewery.Name;
            alcoholPercentage = b.AlcoholPercentage;
            groupName         = b.BeverageGroup.Name;
            typeName          = b.BeverageType.Name;
            isLocked          = model.IsLocked;
            imageUrlSm        = b.LableSm;
            imageUrlMed       = b.LableMed;

            if (reviewFromUser != null)
            {
                review = new BeverageReviewVM(b, types, null, reviewFromUser);
            }
            else
            {
                review = new BeverageReviewVM();
            }

            if (allReviews.Any())
            {
                finalScore = allReviews.Average(a => a.TotalScore);
            }
            else
            {
                finalScore = -1;
            }
        }