diff --git a/paladins-webservice/src/main/java/dev/luzifer/data/access/Database.java b/paladins-webservice/src/main/java/dev/luzifer/data/access/Database.java index 50b7368..b2b4202 100644 --- a/paladins-webservice/src/main/java/dev/luzifer/data/access/Database.java +++ b/paladins-webservice/src/main/java/dev/luzifer/data/access/Database.java @@ -796,6 +796,27 @@ public DatabaseResult getIdForRegion(String region) { } } + public DatabaseResult getAllMaps() { + try(Connection connection = DATA_SOURCE.getConnection()) { + try (Statement statement = connection.createStatement()) { + ResultSet resultSet = statement.executeQuery("SELECT mapName FROM MapInfo"); + List maps = new ArrayList<>(); + while(resultSet.next()) { + maps.add(resultSet.getString(1)); + } + return new DatabaseResult<>(maps.toArray(new String[0]), null, DatabaseResult.DatabaseResultType.SUCCESS); + } catch (SQLException e) { + Webservice.DATABASE_LOGGER.log(Level.SEVERE, "Could not get maps", e); + return new DatabaseResult<>(null, "Could not get maps: " + e.getMessage(), + DatabaseResult.DatabaseResultType.ERROR); + } + } catch (SQLException e) { + Webservice.DATABASE_LOGGER.log(Level.SEVERE, "Error getting connection", e); + return new DatabaseResult<>(null, "Error getting connection: " + e.getMessage(), + DatabaseResult.DatabaseResultType.ERROR); + } + } + public DatabaseResult getIdForMap(String mapName) { try(Connection connection = DATA_SOURCE.getConnection()) { int id = -1; diff --git a/paladins-webservice/src/main/java/dev/luzifer/data/access/GameDao.java b/paladins-webservice/src/main/java/dev/luzifer/data/access/GameDao.java index 75c8e9d..cea224d 100644 --- a/paladins-webservice/src/main/java/dev/luzifer/data/access/GameDao.java +++ b/paladins-webservice/src/main/java/dev/luzifer/data/access/GameDao.java @@ -59,6 +59,10 @@ public DatabaseResult saveGameData(GameDto gameDto) { return gameInfoResult; } + + public String[] getAllMaps() { + return database.getAllMaps().getResult().orElse(new String[0]); + } /** * This method checks if the given matchIds are already in the database and returns the ones that are not. diff --git a/paladins-webservice/src/main/java/dev/luzifer/spring/ApplicationAccessPoint.java b/paladins-webservice/src/main/java/dev/luzifer/spring/ApplicationAccessPoint.java index 16f2ef7..639f088 100644 --- a/paladins-webservice/src/main/java/dev/luzifer/spring/ApplicationAccessPoint.java +++ b/paladins-webservice/src/main/java/dev/luzifer/spring/ApplicationAccessPoint.java @@ -18,6 +18,7 @@ public class ApplicationAccessPoint { public static final String DEBUG = API_KEY + "/debug"; // /{apiKey}/debug public static final String LATEST_LOG_DOWNLOAD = "/latestlog"; // /{apiKey}/debug/latestlog public static final String FREE_MATCH_IDS = "/freematchids"; // /{apiKey}/debug/freematchids + public static final String ALL_MAPS = "/allmaps"; // /{apiKey}/debug/allmaps // game - main paths public static final String GAME = API_KEY + "/game"; // /{apiKey}/game diff --git a/paladins-webservice/src/main/java/dev/luzifer/spring/controller/debug/DebugController.java b/paladins-webservice/src/main/java/dev/luzifer/spring/controller/debug/DebugController.java index 4c84339..7bb1151 100644 --- a/paladins-webservice/src/main/java/dev/luzifer/spring/controller/debug/DebugController.java +++ b/paladins-webservice/src/main/java/dev/luzifer/spring/controller/debug/DebugController.java @@ -78,4 +78,23 @@ public ResponseEntity downloadLatestLog(@PathVariable String apiKey, Htt Webservice.REST_LOGGER.severe("Could not find latest log file."); return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); } + + @GetMapping(ApplicationAccessPoint.ALL_MAPS) + @ResponseStatus(HttpStatus.OK) + public DeferredResult getAllMaps(@PathVariable String apiKey) { + if(couldNotVerifyApiKey(apiKey)) { + Webservice.REST_LOGGER.info("Received unauthorized request to get all maps."); + + DeferredResult result = new DeferredResult<>(); + result.setResult(new ResponseEntity<>(HttpStatus.UNAUTHORIZED)); + return result; + } + + DeferredResult> result = new DeferredResult<>(); + TaskForce1.order(() -> timing( + () -> result.setResult(new ResponseEntity<>(gameDao.getAllMaps(), + HttpStatus.OK)), + "All maps have been requested.")); + return result; + } }