diff --git a/app/controllers/Game.scala b/app/controllers/Game.scala index c2f99917d4..386bf288b5 100644 --- a/app/controllers/Game.scala +++ b/app/controllers/Game.scala @@ -138,7 +138,8 @@ final class Game( clocks = getBoolOpt("clocks", req) | extended, evals = getBoolOpt("evals", req) | extended, opening = getBoolOpt("opening", req) | extended, - literate = getBoolOpt("literate", req) | false + literate = getBoolOpt("literate", req) | false, + pgnInJson = getBoolOpt("pgnInJson", req) | false ) private[controllers] def gameContentType(config: GameApiV2.Config) = config.format match { diff --git a/modules/api/src/main/GameApiV2.scala b/modules/api/src/main/GameApiV2.scala index 6962e44891..0b27423c00 100644 --- a/modules/api/src/main/GameApiV2.scala +++ b/modules/api/src/main/GameApiV2.scala @@ -125,8 +125,13 @@ final class GameApiV2( initialFen: Option[FEN], analysisOption: Option[Analysis], withFlags: WithFlags - ): Fu[JsObject] = gameLightUsers(g) map { lightUsers => - Json + ): Fu[JsObject] = + for { + lightUsers <- gameLightUsers(g) + pgn <- withFlags.pgnInJson ?? pgnDump + .toPgnString(g, initialFen, analysisOption, withFlags) + .dmap(some) + } yield Json .obj( "id" -> g.id, "rated" -> g.rated, @@ -154,6 +159,7 @@ final class GameApiV2( .add("winner" -> g.winnerColor.map(_.name)) .add("opening" -> g.opening.ifTrue(withFlags.opening)) .add("moves" -> withFlags.moves.option(g.pgnMoves mkString " ")) + .add("pgn" -> pgn) .add("daysPerTurn" -> g.daysPerTurn) .add("analysis" -> analysisOption.ifTrue(withFlags.evals).map(analysisJson.moves(_, withGlyph = false))) .add("tournament" -> g.tournamentId) @@ -164,7 +170,6 @@ final class GameApiV2( "totalTime" -> clock.estimateTotalSeconds ) }) - } private def gameLightUsers(game: Game): Fu[List[Option[LightUser]]] = (game.whitePlayer.userId ?? getLightUser) zip (game.blackPlayer.userId ?? getLightUser) map { diff --git a/modules/game/src/main/PgnDump.scala b/modules/game/src/main/PgnDump.scala index a2d488a81e..a766be7f6a 100644 --- a/modules/game/src/main/PgnDump.scala +++ b/modules/game/src/main/PgnDump.scala @@ -163,7 +163,8 @@ object PgnDump { tags: Boolean = true, evals: Boolean = true, opening: Boolean = true, - literate: Boolean = false + literate: Boolean = false, + pgnInJson: Boolean = false ) def result(game: Game) =