From 1914aa67cd7c7409447a311476ae67952d73e861 Mon Sep 17 00:00:00 2001 From: Janis Date: Sat, 6 Dec 2025 10:23:31 +0100 Subject: [PATCH] feat: BAC-27 Implemented endpoint which returns information about the current state --- knockoutwhistfrontend | 2 +- .../app/controllers/StatusController.scala | 58 +------------------ .../app/util/WebsocketEventMapper.scala | 4 +- 3 files changed, 5 insertions(+), 59 deletions(-) diff --git a/knockoutwhistfrontend b/knockoutwhistfrontend index 5d080bb..a04c370 160000 --- a/knockoutwhistfrontend +++ b/knockoutwhistfrontend @@ -1 +1 @@ -Subproject commit 5d080bba47778d51c8dbbb99d4d7c2b156c5316c +Subproject commit a04c370a7509b95385439b7453fdf8d3c7a304ae diff --git a/knockoutwhistweb/app/controllers/StatusController.scala b/knockoutwhistweb/app/controllers/StatusController.scala index a52daab..e2980da 100644 --- a/knockoutwhistweb/app/controllers/StatusController.scala +++ b/knockoutwhistweb/app/controllers/StatusController.scala @@ -9,7 +9,7 @@ import logic.user.SessionManager import model.users.User import play.api.libs.json.{JsValue, Json} import play.api.mvc.{Action, *} -import util.WebUIUtils +import util.{WebUIUtils, WebsocketEventMapper} import javax.inject.Inject @@ -90,61 +90,7 @@ class StatusController @Inject()( private def mapGameState(gameLobby: GameLobby, user: User): JsValue = { val userSession = gameLobby.getUserSession(user.id) - gameLobby.logic.getCurrentState match { - case Lobby => - Json.obj( - "host" -> userSession.host, - "players" -> gameLobby.getUsers.map(p => Json.obj("id" -> p.id, "name" -> p.name, "isSelf" -> (p.id == user.id))) - ) - case SelectTrump => - val findSelector: Option[AbstractPlayer] = gameLobby.logic.getCurrentMatch match { - case Some(matchImpl) => - if (matchImpl.roundlist.isEmpty) None - else { - matchImpl.roundlist.last.winner match { - case Some(winner) => Some(winner) - case None => None - } - } - case None => None - } - - findSelector match { - case Some(selector) => - val isSelf = selector.id == user.id - val playerHand = { - val userPlayer = gameLobby.getPlayerByUser(user) - val handOpt = userPlayer.currentHand() - handOpt match { - case Some(hand) => - WebUIUtils.handToJson(hand) - case None => Json.arr() - } - } - Json.obj( - "selector" -> selector.name, - "isSelf" -> isSelf, - "hand" -> playerHand - ) - case None => Json.obj( - "error" -> "No winner found. Please try again later." - ) - } - case MainMenu => - Json.obj() - case InGame => - Json.obj( - - ) - case TieBreak => - Json.obj( - - ) - case FinishedMatch => - Json.obj( - - ) - } + WebsocketEventMapper.stateToJson(userSession) } } diff --git a/knockoutwhistweb/app/util/WebsocketEventMapper.scala b/knockoutwhistweb/app/util/WebsocketEventMapper.scala index 2a2f011..4e3bb32 100644 --- a/knockoutwhistweb/app/util/WebsocketEventMapper.scala +++ b/knockoutwhistweb/app/util/WebsocketEventMapper.scala @@ -57,12 +57,12 @@ object WebsocketEventMapper { Json.obj( "id" -> ("request-" + java.util.UUID.randomUUID().toString), "event" -> obj.id, - "state" -> toJson(session), + "state" -> stateToJson(session), "data" -> data ) } - def toJson(session: UserSession): JsValue = { + def stateToJson(session: UserSession): JsValue = { session.gameLobby.getLogic.getCurrentState match { case Lobby => Json.toJson(LobbyInfoDTO(session.gameLobby, session.user)) case InGame => Json.toJson(GameInfoDTO(session.gameLobby, session.user))