public ReviewPartVM(ReviewPart model, ReviewTypeVM type) { displayOrder = type.displayOrder; reviewTypeId = type.reviewId; if (model != null) { id = model.Id; score = model.Score; } }
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)); } }