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);
|
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());
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user