public ActionResult MakeMove(long id, Move move) { var game = GetChessGame(id); var gameManager = new GameManager(game); if (!IsPlayersMove(game, CurrentUser)) throw new Exception("It is not your turn!"); try { var movingTeam = gameManager.TeamToMove(); gameManager.MovePiece(move); if (gameManager.IsDraw()) gameManager.MarkGameAsDraw(); else if (gameManager.IsCheckmate()) gameManager.MarkWinningTeam(movingTeam); UnitOfWork.Commit(); var model = GetGameModel(game); return Json(model, JsonRequestBehavior.AllowGet); } catch (Exception ex) { throw NewMoveFailureException(move, ex); } }