refactor: move db logic for tasks into service

This commit is contained in:
anthorob committed 2024-10-05 10:15:06 -04:00
1 parent 5a8e606a89
commit 5baa69ffe9
5 files changed
+96 -75

No files matched your search

@@ -100,7 +100,7 @@ public class ReactionCommand extends AbstractAdminCommand {
} }
task.addEmoji(emoji, role); task.addEmoji(emoji, role);
TaskManager.getInstance().persistTask(task); TaskManager.getInstance().getTaskService().persistTask(task);
return CommandExecutionResult.success("Added emoji to message successfully!"); return CommandExecutionResult.success("Added emoji to message successfully!");
} }
@@ -114,7 +114,7 @@ public class ReactionCommand extends AbstractAdminCommand {
} }
task.removeEmoji(emoji); task.removeEmoji(emoji);
TaskManager.getInstance().persistTask(task); TaskManager.getInstance().getTaskService().persistTask(task);
return CommandExecutionResult.success("Removed emoji from message successfully!"); return CommandExecutionResult.success("Removed emoji from message successfully!");
} }
@@ -125,7 +125,7 @@ public class ReactionCommand extends AbstractAdminCommand {
return CommandExecutionResult.error("The message ID provided isn't registered with the bot"); return CommandExecutionResult.error("The message ID provided isn't registered with the bot");
} }
TaskManager.getInstance().unpersistTask(task); TaskManager.getInstance().getTaskService().unpersistTask(task);
return CommandExecutionResult.success("Unregistered the message ID successfully!"); return CommandExecutionResult.success("Unregistered the message ID successfully!");
} }
} }
@@ -10,14 +10,12 @@ import me.bobert.netneutrality.context.tasks.ModalTaskContext;
import me.bobert.netneutrality.core.LogHandler; import me.bobert.netneutrality.core.LogHandler;
import me.bobert.netneutrality.core.context.CommandContext; import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.core.context.TaskContext; import me.bobert.netneutrality.core.context.TaskContext;
import me.bobert.netneutrality.core.tasks.persistence.TaskRegistry;
import me.bobert.netneutrality.core.tasks.trait.Deletable; import me.bobert.netneutrality.core.tasks.trait.Deletable;
import me.bobert.netneutrality.core.tasks.trait.NotAcknowledgeable; import me.bobert.netneutrality.core.tasks.trait.NotAcknowledgeable;
import me.bobert.netneutrality.core.tasks.trait.WithChildren; import me.bobert.netneutrality.core.tasks.trait.WithChildren;
import me.bobert.netneutrality.core.tasks.trait.WithParent; import me.bobert.netneutrality.core.tasks.trait.WithParent;
import me.bobert.netneutrality.core.thread.ThreadManager; import me.bobert.netneutrality.core.thread.ThreadManager;
import me.bobert.netneutrality.db.entities.OTask; import me.bobert.netneutrality.db.service.TaskService;
import me.bobert.netneutrality.db.repository.TaskRepository;
import me.bobert.netneutrality.exceptions.TaskExecutionException; import me.bobert.netneutrality.exceptions.TaskExecutionException;
import me.bobert.netneutrality.thread.CleanupTaskThread; import me.bobert.netneutrality.thread.CleanupTaskThread;
import net.dv8tion.jda.api.interactions.InteractionHook; import net.dv8tion.jda.api.interactions.InteractionHook;
@@ -36,7 +34,7 @@ public class TaskManager {
private static final Logger logger = LogManager.getLogger(TaskManager.class); private static final Logger logger = LogManager.getLogger(TaskManager.class);
private static final ScheduledExecutorService executor = ThreadManager.getScheduledExecutor(); private static final ScheduledExecutorService executor = ThreadManager.getScheduledExecutor();
private static TaskManager instance; private static TaskManager instance;
private final TaskRegistry taskRegistry; private final TaskService taskService;
private final Map<String, Task> tasks; private final Map<String, Task> tasks;
private final Map<String, PersistableTask> persistableTasks; private final Map<String, PersistableTask> persistableTasks;
private final Map<String, CommandContext> deletableTasksContext; private final Map<String, CommandContext> deletableTasksContext;
@@ -46,7 +44,7 @@ public class TaskManager {
this.tasks = new HashMap<>(); this.tasks = new HashMap<>();
this.persistableTasks = new HashMap<>(); this.persistableTasks = new HashMap<>();
this.deletableTasksContext = new HashMap<>(); this.deletableTasksContext = new HashMap<>();
this.taskRegistry = new TaskRegistry(); this.taskService = new TaskService(this);
} }
public static TaskManager getInstance() { public static TaskManager getInstance() {
@@ -58,7 +56,11 @@ public class TaskManager {
} }
public void init() { public void init() {
taskRegistry.loadTasks(); taskService.loadTasks();
}
public TaskService getTaskService() {
return taskService;
} }
public Task getTask(String id) { public Task getTask(String id) {
@@ -107,7 +109,7 @@ public class TaskManager {
logger.info("Inserting task: {}", task); logger.info("Inserting task: {}", task);
if (task instanceof PersistableTask) { if (task instanceof PersistableTask) {
persistTask((PersistableTask) task); taskService.persistTask((PersistableTask) task);
persistableTasks.put(id, (PersistableTask) task); persistableTasks.put(id, (PersistableTask) task);
} else { } else {
tasks.put(id, task); tasks.put(id, task);
@@ -180,34 +182,6 @@ public class TaskManager {
} }
} }
public void persistTask(PersistableTask task) {
String taskClass = task.getClass().getName();
if (taskRegistry.getTaskCreator(taskClass) == null) {
logger.error("No TaskCreator found for class: {}", taskClass);
return;
}
TaskRepository taskRepository = new TaskRepository();
OTask oTask = taskRepository.findById(task.getId());
if (oTask == null) {
oTask = new OTask();
}
oTask.setTaskId(task.getId());
oTask.setTaskClass(task.getClass().getName());
oTask.setPayload(task.toPayload());
taskRepository.save(oTask);
}
public void unpersistTask(PersistableTask task) {
logger.debug("Unpersisting task: {}", task);
TaskRepository taskRepository = new TaskRepository();
taskRepository.deleteBy(task.getId());
persistableTasks.remove(task.getId());
}
private void deleteInteraction(Task task) { private void deleteInteraction(Task task) {
if (task instanceof WithParent<?> taskWithParent) { if (task instanceof WithParent<?> taskWithParent) {
Task parent = (Task) taskWithParent.getParentTask(); Task parent = (Task) taskWithParent.getParentTask();
@@ -6,9 +6,6 @@ package me.bobert.netneutrality.core.tasks.persistence;
*/ */
import me.bobert.netneutrality.core.tasks.PersistableTask; import me.bobert.netneutrality.core.tasks.PersistableTask;
import me.bobert.netneutrality.core.tasks.TaskManager;
import me.bobert.netneutrality.db.entities.OTask;
import me.bobert.netneutrality.db.repository.TaskRepository;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@@ -19,7 +16,6 @@ import java.io.FileNotFoundException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
public class TaskRegistry { public class TaskRegistry {
@@ -29,19 +25,17 @@ public class TaskRegistry {
} }
private static final Logger logger = LogManager.getLogger(TaskRegistry.class); private static final Logger logger = LogManager.getLogger(TaskRegistry.class);
private final Map<String, TaskCreator> taskCreators = new HashMap<>(); private static final Map<String, TaskCreator> taskCreators = new HashMap<>();
private final TaskRepository taskRepository;
public TaskRegistry() { public TaskRegistry() {
taskRepository = new TaskRepository();
loadTaskConfig(); loadTaskConfig();
} }
public TaskCreator getTaskCreator(String className) { public static TaskCreator getTaskCreator(String className) {
return taskCreators.get(className); return taskCreators.get(className);
} }
private void loadTaskConfig() { private static void loadTaskConfig() {
String fileName = "persistable-tasks.json"; String fileName = "persistable-tasks.json";
try (InputStream is = TaskFactory.class.getClassLoader().getResourceAsStream(fileName)) { try (InputStream is = TaskFactory.class.getClassLoader().getResourceAsStream(fileName)) {
@@ -73,29 +67,4 @@ public class TaskRegistry {
logger.error(e); logger.error(e);
} }
} }
public void loadTasks() {
logger.info("Loading persistable tasks...");
List<OTask> tasks = taskRepository.findAll();
for (OTask oTask : tasks) {
String taskClass = oTask.getTaskClass();
String payload = oTask.getPayload();
try {
TaskCreator creator = getTaskCreator(taskClass);
if (creator == null) {
throw new IllegalArgumentException("No task creator registered for class: " + taskClass);
}
JSONObject json = new JSONObject(payload);
PersistableTask task = creator.fromPayload(json);
logger.info("Loaded task: {}", task);
TaskManager.getInstance().getPersistableTaskMap().put(task.getId(), task);
} catch (Exception e) {
logger.error("Error loading task: {}", payload, e);
}
}
}
} }
@@ -10,8 +10,6 @@ import me.bobert.netneutrality.core.db.SessionManager;
import me.bobert.netneutrality.db.Repository; import me.bobert.netneutrality.db.Repository;
import me.bobert.netneutrality.db.entities.OTask; import me.bobert.netneutrality.db.entities.OTask;
import me.bobert.netneutrality.utils.JpaUtils; import me.bobert.netneutrality.utils.JpaUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.query.Query; import org.hibernate.query.Query;
@@ -19,7 +17,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class TaskRepository implements Repository<OTask> { public class TaskRepository implements Repository<OTask> {
private static final Logger logger = LogManager.getLogger(TaskRepository.class);
@Override @Override
public List<OTask> findAll() { public List<OTask> findAll() {
@@ -0,0 +1,81 @@
package me.bobert.netneutrality.db.service;
/*
* Copyright (c) anthorob
*
* https://discord.gg/qUa6zNFZsd
*/
import me.bobert.netneutrality.core.tasks.PersistableTask;
import me.bobert.netneutrality.core.tasks.TaskManager;
import me.bobert.netneutrality.core.tasks.persistence.TaskRegistry;
import me.bobert.netneutrality.db.entities.OTask;
import me.bobert.netneutrality.db.repository.TaskRepository;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONObject;
import java.util.List;
public class TaskService {
private static final Logger logger = LogManager.getLogger(TaskService.class);
private final TaskManager taskManager;
private final TaskRepository taskRepository;
public TaskService(TaskManager taskManager) {
this.taskManager = taskManager;
this.taskRepository = new TaskRepository();
}
public void loadTasks() {
logger.info("Loading persistable tasks...");
List<OTask> tasks = taskRepository.findAll();
for (OTask oTask : tasks) {
String taskClass = oTask.getTaskClass();
String payload = oTask.getPayload();
try {
TaskRegistry.TaskCreator creator = TaskRegistry.getTaskCreator(taskClass);
if (creator == null) {
throw new IllegalArgumentException("No task creator registered for class: " + taskClass);
}
JSONObject json = new JSONObject(payload);
PersistableTask task = creator.fromPayload(json);
logger.info("Loaded task: {}", task);
TaskManager.getInstance().getPersistableTaskMap().put(task.getId(), task);
} catch (Exception e) {
logger.error("Error loading task: {}", payload, e);
}
}
}
public void persistTask(PersistableTask task) {
String taskClass = task.getClass().getName();
if (TaskRegistry.getTaskCreator(taskClass) == null) {
logger.error("No TaskCreator found for class: {}", taskClass);
return;
}
TaskRepository taskRepository = new TaskRepository();
OTask oTask = taskRepository.findById(task.getId());
if (oTask == null) {
oTask = new OTask();
}
oTask.setTaskId(task.getId());
oTask.setTaskClass(task.getClass().getName());
oTask.setPayload(task.toPayload());
taskRepository.save(oTask);
}
public void unpersistTask(PersistableTask task) {
logger.debug("Unpersisting task: {}", task);
TaskRepository taskRepository = new TaskRepository();
taskRepository.deleteBy(task.getId());
taskManager.getPersistableTaskMap().remove(task.getId());
}
}