chore: relocate backend into apps/api ahead of monorepo merge

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-24 12:20:40 +08:00
co-authored by Claude Sonnet 5
parent af44598df6
commit eaa6d2276a
388 changed files with 0 additions and 13998 deletions
+65
View File
@@ -0,0 +1,65 @@
const router = require("express").Router();
const controller = require("../../controllers/admin/task.controller");
const completionController = require("../../controllers/admin/task_completion.controller");
const { sensitiveOpsLimiter } = require("../../middleware/rateLimiter.middleware");
// NOTE on rate limiting: every route below already sits behind adminLimiter
// (200 req/15min per admin user — applied blanket-wide in admin.routes.js).
// sensitiveOpsLimiter (10 req/hour, ALSO keyed per admin user and shared
// across every route it's attached to) is reserved for genuinely irreversible
// actions — permanent delete — so routine CRUD doesn't compete with those for
// the same tight budget.
// ─── Task Lists ───────────────────────────────────────────────────────────────
router.get("/", controller.getTaskLists);
router.get("/archived", controller.getArchivedTaskLists);
router.get("/field-values", controller.getTaskListFieldValues);
router.post("/", controller.createTaskList);
router.post("/bulk-archive", controller.bulkArchiveTaskLists);
router.post("/bulk-restore", controller.bulkRestoreTaskLists);
router.post("/bulk-delete", sensitiveOpsLimiter, controller.bulkPermanentlyDeleteTaskLists);
// ─── Task List (single) ───────────────────────────────────────────────────────
router.get("/:taskListId", controller.getTaskList);
router.get("/:taskListId/permanent-delete-impact", controller.getTaskListPermanentDeleteImpact);
router.patch("/:taskListId", controller.updateTaskList);
router.delete("/:taskListId", controller.archiveTaskList);
router.delete("/:taskListId/permanent", sensitiveOpsLimiter, controller.permanentlyDeleteTaskList);
router.patch("/:taskListId/restore", controller.restoreTaskList);
// ─── Task List Groups ─────────────────────────────────────────────────────────
router.get("/:taskListId/groups", controller.getTaskListGroups);
router.put("/:taskListId/groups", controller.syncGroups);
router.post("/:taskListId/groups/assign", controller.assignGroups);
router.post("/:taskListId/groups/unassign", controller.unassignGroups);
// ─── Tasks (nested under task-list) ──────────────────────────────────────────
router.get("/:taskListId/tasks", controller.getTasks);
router.get("/:taskListId/tasks/archived", controller.getArchivedTasks);
router.get("/:taskListId/tasks/field-values", controller.getTaskFieldValues);
router.get("/:taskListId/tasks/requirement-completion-check", controller.checkRequirementCompletion);
router.post("/:taskListId/tasks", controller.createTask);
router.post("/:taskListId/tasks/bulk", controller.createTasksBulk);
router.post("/:taskListId/tasks/bulk-archive", controller.bulkArchiveTasks);
router.post("/:taskListId/tasks/bulk-restore", controller.bulkRestoreTasks);
router.post("/:taskListId/tasks/bulk-delete", sensitiveOpsLimiter, controller.bulkPermanentlyDeleteTasks);
router.patch("/:taskListId/tasks/order", controller.reorderTasks);
// ─── Tasks (single) ───────────────────────────────────────────────────────────
router.get("/:taskListId/tasks/:taskId", controller.getTask);
router.patch("/:taskListId/tasks/:taskId", controller.updateTask);
router.delete("/:taskListId/tasks/:taskId", controller.archiveTask);
router.delete("/:taskListId/tasks/:taskId/permanent", sensitiveOpsLimiter, controller.permanentlyDeleteTask);
router.patch("/:taskListId/tasks/:taskId/restore", controller.restoreTask);
// ─── Completions (nested under task) ─────────────────────────────────────────
router.get("/:taskListId/tasks/:taskId/completions", completionController.getCompletions);
router.get("/:taskListId/tasks/:taskId/completions/user/:userId", completionController.getCompletionsByUser);
router.post("/:taskListId/tasks/:taskId/completions/bulk-archive", completionController.bulkArchiveCompletions);
router.post("/:taskListId/tasks/:taskId/completions/bulk-restore", completionController.bulkRestoreCompletions);
router.get("/:taskListId/tasks/:taskId/completions/:completionId", completionController.getCompletion);
router.patch("/:taskListId/tasks/:taskId/completions/:completionId/review", completionController.reviewSubmission);
router.delete("/:taskListId/tasks/:taskId/completions/:completionId", completionController.archiveCompletion);
router.patch("/:taskListId/tasks/:taskId/completions/:completionId/restore", completionController.restoreCompletion);
module.exports = router;