mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
71 lines
4.6 KiB
JavaScript
71 lines
4.6 KiB
JavaScript
/***********************************************************************************************************************************************************************
|
|
* File Name: units.routes.js (admin)
|
|
* Type of Program: Router
|
|
* Description: Standalone Unit library — Units run independently of Courses.
|
|
* Course membership (attach/detach/reorder) stays under
|
|
* /admin/courses/:courseId/units.
|
|
*
|
|
* Author: Kenneth Obsequio (@lash0000)
|
|
* Date Created: Jul. 7, 2026
|
|
***********************************************************************************************************************************************************************/
|
|
const router = require("express").Router();
|
|
const ctrl = require("../../controllers/admin/units.controller");
|
|
const questionCtrl = require("../../controllers/admin/courses.controller"); // shared quiz-question handlers (keyed by quizId)
|
|
const requirementsCtrl = require("../../controllers/admin/completion_requirements.controller");
|
|
|
|
// Guards are applied by admin.routes.js (authenticate → requireAdmin → adminLimiter)
|
|
|
|
// ── static segments first ─────────────────────────────────────────────────────
|
|
router.get("/", ctrl.getUnits);
|
|
router.post("/", ctrl.createUnit);
|
|
router.post("/full", ctrl.createUnitFull);
|
|
router.get("/flat", ctrl.getUnitsFlat);
|
|
router.get("/field-values", ctrl.getUnitFieldValues);
|
|
router.delete("/bulk", ctrl.bulkArchiveUnits);
|
|
router.delete("/bulk/permanent", ctrl.bulkPermanentlyDeleteUnits);
|
|
router.get("/archives", ctrl.getArchivedUnits);
|
|
router.patch("/restore/bulk", ctrl.bulkRestoreUnits);
|
|
router.get("/archives/:unitId", ctrl.getArchivedUnit);
|
|
|
|
// ── then :unitId ──────────────────────────────────────────────────────────────
|
|
router.patch("/:unitId/restore", ctrl.restoreUnit);
|
|
router.get("/:unitId/archive-impact", ctrl.getUnitArchiveImpact);
|
|
router.get("/:unitId/permanent-delete-impact", ctrl.getUnitPermanentDeleteImpact);
|
|
router.get("/:unitId", ctrl.getUnit);
|
|
router.put("/:unitId", ctrl.updateUnit);
|
|
router.delete("/:unitId", ctrl.archiveUnit);
|
|
router.delete("/:unitId/permanent", ctrl.permanentlyDeleteUnit);
|
|
|
|
// ── Completion requirements (shared with the nested courses.routes.js mount) ──
|
|
router.get("/:unitId/requirements", requirementsCtrl.getUnitRequirements);
|
|
router.put("/:unitId/requirements", requirementsCtrl.syncUnitRequirements);
|
|
|
|
// ── Lesson membership (attach / detach / reorder) ─────────────────────────────
|
|
router.post("/:unitId/lessons", ctrl.attachLessons);
|
|
router.put("/:unitId/lessons/order", ctrl.reorderLessons);
|
|
router.delete("/:unitId/lessons/:lessonId", ctrl.detachLesson);
|
|
|
|
// ── Unit quiz (travels with the Unit) ─────────────────────────────────────────
|
|
router.get("/:unitId/quiz", ctrl.getQuiz);
|
|
router.post("/:unitId/quiz", ctrl.createQuiz);
|
|
router.get("/:unitId/quiz/archives", ctrl.getArchivedQuiz);
|
|
router.patch("/:unitId/quiz/:quizId", ctrl.updateQuiz);
|
|
router.delete("/:unitId/quiz/:quizId", ctrl.deleteQuiz);
|
|
router.patch("/:unitId/quiz/:quizId/restore", ctrl.restoreQuiz);
|
|
|
|
// ── Quiz questions (shared handlers — keyed by quizId only) ───────────────────
|
|
router.get("/:unitId/quiz/:quizId/questions", questionCtrl.getQuestions);
|
|
router.post("/:unitId/quiz/:quizId/questions", questionCtrl.createQuestion);
|
|
router.delete("/:unitId/quiz/:quizId/questions/bulk", questionCtrl.bulkArchiveQuestions);
|
|
router.patch("/:unitId/quiz/:quizId/questions/restore/bulk", questionCtrl.bulkRestoreQuestions);
|
|
router.put("/:unitId/quiz/:quizId/questions/bulk-sync", questionCtrl.bulkSyncQuestions);
|
|
router.get("/:unitId/quiz/:quizId/questions/archives/:questionId", questionCtrl.getArchivedQuestion);
|
|
router.patch("/:unitId/quiz/:quizId/questions/:questionId", questionCtrl.updateQuestion);
|
|
router.delete("/:unitId/quiz/:quizId/questions/:questionId", questionCtrl.deleteQuestion);
|
|
router.patch("/:unitId/quiz/:quizId/questions/:questionId/restore", questionCtrl.restoreQuestion);
|
|
|
|
// ── Quiz completions ──────────────────────────────────────────────────────────
|
|
router.get("/:unitId/quiz/:quizId/completions", questionCtrl.getQuizCompletions);
|
|
|
|
module.exports = router;
|