From 9c59bd0d9dcc80f3f58f607a77435f8ec272c10f Mon Sep 17 00:00:00 2001 From: rdavidek Date: Sun, 28 Dec 2025 20:28:17 +0100 Subject: [PATCH] chnaged file to memory --- src/main/java/cz/kamma/darts/App.java | 40 +++++++++++++++------------ src/main/resources/web/index.html | 17 ++++++++++++ 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/main/java/cz/kamma/darts/App.java b/src/main/java/cz/kamma/darts/App.java index 41d6546..c2cac8c 100644 --- a/src/main/java/cz/kamma/darts/App.java +++ b/src/main/java/cz/kamma/darts/App.java @@ -16,7 +16,7 @@ import java.util.stream.Collectors; public class App { private static final Gson GSON = new Gson(); - private static final String DATA_FILE = "stats.json"; + private static final List GAMES_CACHE = Collections.synchronizedList(new ArrayList<>()); private static final long MAX_UPLOAD_SIZE = 5 * 1024 * 1024; // 5MB public static void main(String[] args) throws IOException { @@ -26,6 +26,7 @@ public class App { server.createContext("/", new StaticHandler()); server.createContext("/api/stats", new StatsHandler()); server.createContext("/api/upload", new UploadHandler()); + server.createContext("/api/clear", new ClearHandler()); server.setExecutor(null); System.out.println("Server started on port " + port); @@ -103,7 +104,8 @@ public class App { List rawGames = GSON.fromJson(body, new TypeToken>(){}.getType()); List convertedGames = convertRawToGames(rawGames); - Files.writeString(Paths.get(DATA_FILE), GSON.toJson(convertedGames)); + GAMES_CACHE.clear(); + GAMES_CACHE.addAll(convertedGames); String response = "Upload successful"; byte[] responseBytes = response.getBytes(StandardCharsets.UTF_8); @@ -181,8 +183,7 @@ public class App { return; } - List games = loadGames(); - StatsResponse response = aggregateStats(games); + StatsResponse response = aggregateStats(new ArrayList<>(GAMES_CACHE)); String json = GSON.toJson(response); byte[] bytes = json.getBytes(StandardCharsets.UTF_8); @@ -194,19 +195,6 @@ public class App { os.close(); } - private List loadGames() { - try { - if (!Files.exists(Paths.get(DATA_FILE))) { - return Collections.emptyList(); - } - String content = Files.readString(Paths.get(DATA_FILE)); - return GSON.fromJson(content, new TypeToken>(){}.getType()); - } catch (IOException e) { - e.printStackTrace(); - return Collections.emptyList(); - } - } - private StatsResponse aggregateStats(List games) { Map> byPlayer = games.stream() .collect(Collectors.groupingBy(DartsGame::getPlayer)); @@ -240,4 +228,22 @@ public class App { .build(); } } + + static class ClearHandler implements HttpHandler { + @Override + public void handle(HttpExchange exchange) throws IOException { + if (!"POST".equals(exchange.getRequestMethod())) { + exchange.sendResponseHeaders(405, -1); + return; + } + + GAMES_CACHE.clear(); + String response = "Cache cleared"; + byte[] responseBytes = response.getBytes(StandardCharsets.UTF_8); + exchange.sendResponseHeaders(200, responseBytes.length); + try (OutputStream os = exchange.getResponseBody()) { + os.write(responseBytes); + } + } + } } diff --git a/src/main/resources/web/index.html b/src/main/resources/web/index.html index 1712380..f220926 100644 --- a/src/main/resources/web/index.html +++ b/src/main/resources/web/index.html @@ -166,6 +166,7 @@

Upload Stats JSON

+ @@ -230,6 +231,22 @@ reader.readAsText(file); } + async function clearCache() { + if (!confirm('Are you sure you want to clear all data?')) return; + const status = document.getElementById('uploadStatus'); + try { + const response = await fetch('/api/clear', { method: 'POST' }); + if (response.ok) { + status.innerText = 'Cache cleared!'; + loadStats(); + } else { + status.innerText = 'Clear failed: ' + await response.text(); + } + } catch (err) { + status.innerText = 'Error: ' + err.message; + } + } + async function loadStats() { const response = await fetch('/api/stats'); const data = await response.json();