public async Task <IActionResult> Vote(PlayerVotingViewModel model) { var game = await _repo.GetGame(model.GameID); var player = game.Players.SingleOrDefault(x => x.ID == model.PlayerID); if (player == null) { throw new InvalidOperationException("Invalid Player ID"); } player.Votes = model.Votes .Where(x => !string.IsNullOrWhiteSpace(x.GuessPlayerID)) .Select(x => new Vote { FactID = x.FactID, GuessPlayerID = x.GuessPlayerID }) .ToList(); await _repo.UpdateGame(game); TempData["fg-player-voted"] = true; return(RedirectToAction("Index", "Player", new { id = model.GameID })); }
private IActionResult PlayerVoting(Game game) { var vm = new PlayerVotingViewModel { GameID = game.ID.ToString(), GameName = game.Name }; var hasCookie = Request.Cookies.ContainsKey("FactGameGame" + game.ID); if (!hasCookie) { return(View("PlayerVotingNotRegistered", vm)); } var playerId = Request.Cookies["FactGameGame" + game.ID]; var player = game.Players.SingleOrDefault(p => p.ID == playerId); if (player == null) { return(View("PlayerVotingNotRegistered", vm)); } vm.PlayerID = playerId; vm.Players = game.Players .OrderBy(p => p.Name) .Select(p => new SelectListItem { Value = p.ID, Text = p.Name }) .ToList(); vm.Votes = game.Players .OrderBy(p => p.FactID) .Select(p => new PlayerVoteViewModel { Fact = p.Fact, FactID = p.FactID, GuessPlayerID = player.Votes .Where(x => x.FactID == p.FactID) .Select(x => x.GuessPlayerID) .SingleOrDefault() }) .ToList(); return(View("PlayerVoting", vm)); }