You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.3 KiB

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<Game> games = service.findRunningGamesOfUser(userId);
if (games == null)
{
response.status(404);
}
else
{
response.body(objectMapper.writeValueAsString(games));
response.status(200);
}
return response;
}
}