refactor: move db logic for tasks into service
This commit is contained in:
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);
|
||||
TaskManager.getInstance().persistTask(task);
|
||||
TaskManager.getInstance().getTaskService().persistTask(task);
|
||||
return CommandExecutionResult.success("Added emoji to message successfully!");
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ public class ReactionCommand extends AbstractAdminCommand {
|
||||
}
|
||||
|
||||
task.removeEmoji(emoji);
|
||||
TaskManager.getInstance().persistTask(task);
|
||||
TaskManager.getInstance().getTaskService().persistTask(task);
|
||||
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");
|
||||
}
|
||||
|
||||
TaskManager.getInstance().unpersistTask(task);
|
||||
TaskManager.getInstance().getTaskService().unpersistTask(task);
|
||||
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.context.CommandContext;
|
||||
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.NotAcknowledgeable;
|
||||
import me.bobert.netneutrality.core.tasks.trait.WithChildren;
|
||||
import me.bobert.netneutrality.core.tasks.trait.WithParent;
|
||||
import me.bobert.netneutrality.core.thread.ThreadManager;
|
||||
import me.bobert.netneutrality.db.entities.OTask;
|
||||
import me.bobert.netneutrality.db.repository.TaskRepository;
|
||||
import me.bobert.netneutrality.db.service.TaskService;
|
||||
import me.bobert.netneutrality.exceptions.TaskExecutionException;
|
||||
import me.bobert.netneutrality.thread.CleanupTaskThread;
|
||||
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 ScheduledExecutorService executor = ThreadManager.getScheduledExecutor();
|
||||
private static TaskManager instance;
|
||||
private final TaskRegistry taskRegistry;
|
||||
private final TaskService taskService;
|
||||
private final Map<String, Task> tasks;
|
||||
private final Map<String, PersistableTask> persistableTasks;
|
||||
private final Map<String, CommandContext> deletableTasksContext;
|
||||
@@ -46,7 +44,7 @@ public class TaskManager {
|
||||
this.tasks = new HashMap<>();
|
||||
this.persistableTasks = new HashMap<>();
|
||||
this.deletableTasksContext = new HashMap<>();
|
||||
this.taskRegistry = new TaskRegistry();
|
||||
this.taskService = new TaskService(this);
|
||||
}
|
||||
|
||||
public static TaskManager getInstance() {
|
||||
@@ -58,7 +56,11 @@ public class TaskManager {
|
||||
}
|
||||
|
||||
public void init() {
|
||||
taskRegistry.loadTasks();
|
||||
taskService.loadTasks();
|
||||
}
|
||||
|
||||
public TaskService getTaskService() {
|
||||
return taskService;
|
||||
}
|
||||
|
||||
public Task getTask(String id) {
|
||||
@@ -107,7 +109,7 @@ public class TaskManager {
|
||||
logger.info("Inserting task: {}", task);
|
||||
|
||||
if (task instanceof PersistableTask) {
|
||||
persistTask((PersistableTask) task);
|
||||
taskService.persistTask((PersistableTask) task);
|
||||
persistableTasks.put(id, (PersistableTask) task);
|
||||
} else {
|
||||
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) {
|
||||
if (task instanceof WithParent<?> taskWithParent) {
|
||||
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.TaskManager;
|
||||
import me.bobert.netneutrality.db.entities.OTask;
|
||||
import me.bobert.netneutrality.db.repository.TaskRepository;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@@ -19,7 +16,6 @@ import java.io.FileNotFoundException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class TaskRegistry {
|
||||
@@ -29,19 +25,17 @@ public class TaskRegistry {
|
||||
}
|
||||
|
||||
private static final Logger logger = LogManager.getLogger(TaskRegistry.class);
|
||||
private final Map<String, TaskCreator> taskCreators = new HashMap<>();
|
||||
private final TaskRepository taskRepository;
|
||||
private static final Map<String, TaskCreator> taskCreators = new HashMap<>();
|
||||
|
||||
public TaskRegistry() {
|
||||
taskRepository = new TaskRepository();
|
||||
loadTaskConfig();
|
||||
}
|
||||
|
||||
public TaskCreator getTaskCreator(String className) {
|
||||
public static TaskCreator getTaskCreator(String className) {
|
||||
return taskCreators.get(className);
|
||||
}
|
||||
|
||||
private void loadTaskConfig() {
|
||||
private static void loadTaskConfig() {
|
||||
String fileName = "persistable-tasks.json";
|
||||
|
||||
try (InputStream is = TaskFactory.class.getClassLoader().getResourceAsStream(fileName)) {
|
||||
@@ -73,29 +67,4 @@ public class TaskRegistry {
|
||||
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.entities.OTask;
|
||||
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.query.Query;
|
||||
|
||||
@@ -19,7 +17,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class TaskRepository implements Repository<OTask> {
|
||||
private static final Logger logger = LogManager.getLogger(TaskRepository.class);
|
||||
|
||||
@Override
|
||||
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());
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user