package de.fd.fh.server.game.web; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import de.fd.fh.server.game.Game; import de.fd.fh.server.game.GameId; import de.fd.fh.server.game.GameService; import de.fd.fh.server.user.UserId; import de.fd.fh.shared.network.messages.CreateGameRequest; import lombok.RequiredArgsConstructor; import spark.Request; import spark.Response; import java.io.IOException; import java.util.List; @RequiredArgsConstructor public class GameController { private final ObjectMapper objectMapper = new ObjectMapper(); private final GameService service; public Response createGame(final Request request, final Response response) throws IOException { final CreateGameRequest createRequest = objectMapper.readValue(request.body(), CreateGameRequest.class); final UserId whiteUser = UserId.of(createRequest.getWhiteUserId()); final UserId blackUser = UserId.of(createRequest.getBlackUserId()); final GameId gameId = service.createGame(blackUser, whiteUser); if (gameId == null) { response.status(400); } else { response.body(objectMapper.writeValueAsString(gameId)); response.status(201); } return response; } public Response findGameById(final Request request, final Response response) throws JsonProcessingException { final GameId gameId = GameId.of(request.params(":game_id")); final Game game = service.findGameById(gameId); if (game == null) { response.status(404); } else { response.body(objectMapper.writeValueAsString(game)); response.status(200); } return response; } public Response findRunningGamesOfUser(final Request request, final Response response) throws JsonProcessingException { final UserId userId = UserId.of(request.params(":user_id")); final List games = service.findRunningGamesOfUser(userId); if (games == null) { response.status(404); } else { response.body(objectMapper.writeValueAsString(games)); response.status(200); } return response; } }