add: ver()

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
2026-07-08 11:31:40 +08:00
parent 0e4cd86119
commit bb7e8fde08
29 changed files with 2234 additions and 780 deletions
+64
View File
@@ -0,0 +1,64 @@
/***********************************************************************************************************************************************************************
* 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)
// Guards are applied by admin.routes.js (authenticate → requireAdmin → adminLimiter)
// ── static segments first ─────────────────────────────────────────────────────
router.get("/", ctrl.getUnits);
router.post("/", ctrl.createUnit);
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);
// ── 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;