From 3943528d2c4aafe0c1a4425c6cefde20208eb81f Mon Sep 17 00:00:00 2001 From: Steven Tracey Date: Thu, 5 Jan 2023 14:07:32 -0500 Subject: [PATCH] EOD --- .../tech/nevets/todoserver/JSONLoader.java | 1 + .../java/tech/nevets/todoserver/Server.java | 14 ++- .../nevets/todoserver/ToDoListManager.java | 96 +++++++++++++++++++ 3 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 src/main/java/tech/nevets/todoserver/ToDoListManager.java diff --git a/src/main/java/tech/nevets/todoserver/JSONLoader.java b/src/main/java/tech/nevets/todoserver/JSONLoader.java index 7875d41..910c302 100644 --- a/src/main/java/tech/nevets/todoserver/JSONLoader.java +++ b/src/main/java/tech/nevets/todoserver/JSONLoader.java @@ -29,6 +29,7 @@ public class JSONLoader { writer = new FileWriter(jsonFile); writer.write(GSON.toJson(json)); writer.flush(); + writer.close(); } catch (IOException e) { LOGGER.error("Error saving jsonFile..."); e.printStackTrace(); diff --git a/src/main/java/tech/nevets/todoserver/Server.java b/src/main/java/tech/nevets/todoserver/Server.java index eadd4e8..f397540 100644 --- a/src/main/java/tech/nevets/todoserver/Server.java +++ b/src/main/java/tech/nevets/todoserver/Server.java @@ -7,6 +7,8 @@ import spark.Request; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Timer; +import java.util.TimerTask; import static spark.Spark.*; @@ -33,9 +35,12 @@ public class Server { return "To Do List Item: " + req.params("itemId"); }); - post("/create/:listId", (req, res) -> { + post("/create", (req, res) -> { checkAuth(req); + ToDoList toDoList = new ToDoList(); + toDoList.setId(ToDoListManager.getLastIndex()); + return "Create To Do List"; }); @@ -69,6 +74,13 @@ public class Server { }); }); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + ToDoListManager.saveToDoLists(); + } + }, 0, 14400000); } private static void checkAuth(Request req) { diff --git a/src/main/java/tech/nevets/todoserver/ToDoListManager.java b/src/main/java/tech/nevets/todoserver/ToDoListManager.java new file mode 100644 index 0000000..0bc51d8 --- /dev/null +++ b/src/main/java/tech/nevets/todoserver/ToDoListManager.java @@ -0,0 +1,96 @@ +package tech.nevets.todoserver; + +import com.google.gson.Gson; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class ToDoListManager { + public static final List TO_DO_LISTS = new ArrayList<>(); + private static final Logger LOGGER = LoggerFactory.getLogger(ToDoListManager.class); + private static final Gson GSON = new Gson(); + private static boolean isListChanged = false; + private static int lastIndex = 0; + + public static int getLastIndex() { + return lastIndex; + } + + public static List getToDoListsByOwner(String authKey) { // Again, this is terrible security wise, TODO Change with account system + List listList = new ArrayList<>(); + for (ToDoList toDoList : TO_DO_LISTS) { + if (toDoList.getOwnerAuthKey().equals(authKey)) { + listList.add(toDoList); + } + } + return listList; + } + + public static void addToDoList(ToDoList toDoList) { + TO_DO_LISTS.add(toDoList); + isListChanged = true; + } + + public static void updateToDoList(ToDoList toDoList) { + for (int i = 0; i < TO_DO_LISTS.size(); i++) { + if (TO_DO_LISTS.get(i).getId() == toDoList.getId()) { + TO_DO_LISTS.set(i, toDoList); + } + } + isListChanged = true; + } + + public static void loadToDoLists() { + File listDirs = new File("./lists/"); + if (!listDirs.exists()) { + listDirs.mkdirs(); + } + + File[] listFiles = listDirs.listFiles(); + if (listFiles == null) { + LOGGER.info("Lists Directory is empty"); + return; + } + try { + for (File listFile : listFiles) { + TO_DO_LISTS.add(GSON.fromJson(new FileReader(listFile), ToDoList.class)); + } + lastIndex = listFiles.length + 1; + } catch (IOException e) { + LOGGER.error("Error reading todo lists"); + e.printStackTrace(); + } + } + + public static void saveToDoLists() { + if (!isListChanged) { + return; + } + + File listDirs = new File("./lists/"); + if (!listDirs.exists()) { + listDirs.mkdirs(); + } + + for (ToDoList toDoList : TO_DO_LISTS) { + File toDoFile = new File(listDirs.getAbsolutePath() + "/" + toDoList.getId() + ".json"); + FileWriter writer; + try { + writer = new FileWriter(toDoFile); + writer.write(GSON.toJson(toDoList)); + writer.flush(); + writer.close(); + } catch (IOException e) { + LOGGER.error("Error writing todo list to file"); + e.printStackTrace(); + } + } + isListChanged = false; + } +}