diff --git a/server/api/scheduler/tasks/[id]/toggle.post.ts b/server/api/scheduler/tasks/[id]/toggle.post.ts new file mode 100644 index 0000000..e213ecb --- /dev/null +++ b/server/api/scheduler/tasks/[id]/toggle.post.ts @@ -0,0 +1,20 @@ +import { toggleTask } from "../../../../service/scheduler"; +import { reloadTask, removeTask } from "../../../../scheduler/engine"; + +export default defineWrappedResponseHandler(async (event) => { + const id = getRouterParam(event, "id"); + if (!id) return R.throwError(400, "Missing id", null); + + const body = await readBody<{ enabled: boolean }>(event); + + const task = await toggleTask(id, body.enabled); + if (!task) return R.throwError(404, "Task not found", null); + + if (task.enabled) { + reloadTask(id); + } else { + removeTask(id); + } + + return R.success(task); +}); diff --git a/server/api/scheduler/tasks/[id]/trigger.post.ts b/server/api/scheduler/tasks/[id]/trigger.post.ts new file mode 100644 index 0000000..b28a511 --- /dev/null +++ b/server/api/scheduler/tasks/[id]/trigger.post.ts @@ -0,0 +1,11 @@ +import { triggerTask } from "../../../../scheduler/engine"; + +export default defineWrappedResponseHandler(async (event) => { + const id = getRouterParam(event, "id"); + if (!id) return R.throwError(400, "Missing id", null); + + // Fire and forget — trigger returns immediately, execution is async + triggerTask(id).catch(() => {}); + + return R.success({ triggered: true }); +});