internal Result UnlockBeer(string roomCode, int beerId) { Room room = context.Rooms.FirstOrDefault(a => a.Code == roomCode); if (room == null) { return(new Result(ResultStatus.ERROR, "Room not found")); } List <Room2Beverage> beers = room.Room2Beverages.ToList(); if (!beers.Any(a => a.BeverageId == beerId)) { return(new Result(ResultStatus.ERROR, "Beer not found")); } foreach (var b in beers) { if (b.BeverageId == beerId) { b.IsLocked = false; } else { b.IsLocked = true; } } context.SubmitChanges(); beerhub hub = new beerhub(); hub.OpenBeerForUser(roomCode, beerId); return(new Result(ResultStatus.SUCCESS, "Beer unlocked")); }
internal ReviewResults FinishReview(string roomCode, int beerId) { Room room = context.Rooms.FirstOrDefault(a => a.Code == roomCode); Room2Beverage beer = room.Room2Beverages.FirstOrDefault(a => a.BeverageId == beerId); List <BeverageReview> reviews = room.BeverageReviews.Where(a => a.BeverageId == beerId).ToList(); if (!reviews.Any()) { return(new ReviewResults(ResultStatus.ERROR, "No reviews has been added!")); } beer.ReviewFinished = true; List <ReviewTypeVM> reviewTypes = room.Room2ReviewTypes.Select(a => new ReviewTypeVM(a)).ToList(); context.SubmitChanges(); ReviewResults result = new ReviewResults(reviews, reviewTypes); beerhub hub = new beerhub(); hub.PushFinalScore(roomCode, beerId, result.totalScore); return(result); }
internal JoinRoomResponse JoinRoom(JoinRoomRequest request) { try { Room roomToJoin = context.Rooms.FirstOrDefault(a => a.Code == request.roomCode); if (roomToJoin == null) { return(new JoinRoomResponse(ResultStatus.ERROR, "Room code or pin is incorrect")); } if (roomToJoin.Pin != request.pin) { return(new JoinRoomResponse(ResultStatus.ERROR, "Room code or pin is incorrect")); } if (roomToJoin.Users.Any(a => a.Name == request.username)) { return(new JoinRoomResponse(ResultStatus.ERROR, "Username taken")); } Guid userId = Guid.NewGuid(); roomToJoin.Users.Add(new User() { Id = userId, DateCreated = DateTime.Now, IsOwner = false, Name = request.username }); context.SubmitChanges(); beerhub hub = new beerhub(); hub.NewUserJoined(request.roomCode, request.username, userId); return(new JoinRoomResponse(userId)); } catch (Exception ex) { return(new JoinRoomResponse(ResultStatus.ERROR, ex.Message)); } }
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 void TestSignalR() { beerhub hub = new beerhub(); //hub.Ping("PTLJ"); }