@Override
  public void endTurn(Integer playerID) {
    Player player = playerRepository.getPlayerByPlayerId(playerID);
    Game game = player.getGame();
    if (!player.isTurnEnded()) {
      int commandPoints = player.getCommandPoints();
      player.setCommandPoints(commandPoints + COMMANDPOINTS_PER_TURN);
      player.setTurnEnded(true);

      boolean allTurnsEnded = true;
      List<Player> players = game.getPlayers();
      for (Player p : players) {
        if (!p.isTurnEnded()) {
          allTurnsEnded = false;
        }
      }
      if (allTurnsEnded) {
        for (Player p : players) {
          p.setTurnEnded(false);
        }
      }
    } else {
      throw new SpaceCrackNotAcceptableException("Turn is already ended");
    }
    gameSynchronizer.updateGame(game);
  }
  @Override
  public void buildShip(Integer colonyId) {
    Ship shipOnPlanet = null;

    Colony colony = colonyRepository.getColonyById(colonyId);
    Player player = colony.getPlayer();

    Game game = player.getGame();
    if (player.getCommandPoints() < BUILDSHIP_COST || player.isTurnEnded()) {
      throw new SpaceCrackNotAcceptableException(
          "Dear Sir or Lady, you have either run out of command points or your turn has ended, please wait for the other players to end their turn.");
    }
    for (Ship ship : player.getShips()) {
      if (ship.getPlanet().getName().equals(colony.getPlanet().getName())) {
        shipOnPlanet = ship;
      }
    }

    Ship ship;
    if (shipOnPlanet == null) {
      ship = new Ship();
      ship.setStrength(NEW_SHIP_STRENGTH);
      ship.setPlayer(player);
      ship.setPlanet(colony.getPlanet());
    } else {
      shipOnPlanet.setStrength(shipOnPlanet.getStrength() + NEW_SHIP_STRENGTH);
    }

    player.setCommandPoints(player.getCommandPoints() - BUILDSHIP_COST);
    gameSynchronizer.updateGame(game);
  }
 @Override
 public void acceptGameInvite(int gameId) {
   Game game = getGameByGameId(gameId);
   for (Player p : game.getPlayers()) {
     p.setRequestAccepted(true);
   }
   gameSynchronizer.updateGame(game);
 }
 @Override
 public void moveShip(Integer shipId, String planetName) {
   Ship ship = shipRepository.getShipByShipId(shipId);
   Game game = ship.getPlayer().getGame();
   Planet destinationPlanet = planetRepository.getPlanetByName(planetName);
   validateActionMakeSureGameIsNotFinishedYet(game);
   moveShipHandler.validateMove(ship, destinationPlanet);
   moveShipHandler.moveShip(ship, destinationPlanet);
   checkLost(game);
   gameSynchronizer.updateGame(game);
 }