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(); }
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)); } }
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; } }