added new requirements for lessons and units

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
2026-07-15 16:26:09 +08:00
parent b7d62b3b18
commit 9c82b0de09
25 changed files with 1569 additions and 233 deletions
+18
View File
@@ -1,6 +1,7 @@
const router = require("express").Router();
const ctrl = require("../../controllers/admin/courses.controller");
const progressCtrl = require("../../controllers/admin/course_reading_progress.controller");
const requirementsCtrl = require("../../controllers/admin/completion_requirements.controller");
const { authenticate } = require("../../middleware/auth.middleware");
const { requireAdmin } = require("../../middleware/rbac.middleware");
@@ -59,6 +60,13 @@ router.put("/:courseId/achievements", ctrl.syncCourseAchievements);
router.get("/:courseId/prerequisites", ctrl.getPrerequisites);
router.put("/:courseId/prerequisites", ctrl.syncPrerequisites);
// ══════════════════════════════════════════════════════════════════════════════
// COMPLETION REQUIREMENTS
// ══════════════════════════════════════════════════════════════════════════════
router.get("/:courseId/requirements", requirementsCtrl.getCourseRequirements);
router.put("/:courseId/requirements", requirementsCtrl.syncCourseRequirements);
// ══════════════════════════════════════════════════════════════════════════════
// COURSE ASSESSMENT
// ══════════════════════════════════════════════════════════════════════════════
@@ -117,6 +125,9 @@ router.put("/:courseId/units/:unitId", ctrl.updateUnit);
router.delete("/:courseId/units/:unitId", ctrl.archiveUnit);
router.delete("/:courseId/units/:unitId/permanent", ctrl.permanentlyDeleteUnit);
router.get("/:courseId/units/:unitId/requirements", requirementsCtrl.getUnitRequirements);
router.put("/:courseId/units/:unitId/requirements", requirementsCtrl.syncUnitRequirements);
// ══════════════════════════════════════════════════════════════════════════════
// UNIT QUIZ
// ══════════════════════════════════════════════════════════════════════════════
@@ -177,6 +188,13 @@ router.delete("/:courseId/units/:unitId/lessons/:lessonId/permanent", ctrl.perma
router.get("/:courseId/units/:unitId/lessons/:lessonId/page", ctrl.getLessonPage);
router.put("/:courseId/units/:unitId/lessons/:lessonId/page", ctrl.upsertLessonPage);
// ══════════════════════════════════════════════════════════════════════════════
// LESSON COMPLETION REQUIREMENTS
// ══════════════════════════════════════════════════════════════════════════════
router.get("/:courseId/units/:unitId/lessons/:lessonId/requirements", requirementsCtrl.getLessonRequirements);
router.put("/:courseId/units/:unitId/lessons/:lessonId/requirements", requirementsCtrl.syncLessonRequirements);
// ══════════════════════════════════════════════════════════════════════════════
// COURSE READING PROGRESS
// ══════════════════════════════════════════════════════════════════════════════
+5
View File
@@ -10,6 +10,7 @@
***********************************************************************************************************************************************************************/
const router = require("express").Router();
const ctrl = require("../../controllers/admin/lessons.controller");
const requirementsCtrl = require("../../controllers/admin/completion_requirements.controller");
// Guards are applied by admin.routes.js (authenticate → requireAdmin → adminLimiter)
@@ -36,4 +37,8 @@ router.delete("/:lessonId/permanent", ctrl.permanentlyDeleteLesson);
router.get("/:lessonId/page", ctrl.getLessonPage);
router.put("/:lessonId/page", ctrl.upsertLessonPage);
// ── Completion requirements (shared with the nested courses.routes.js mount) ──
router.get("/:lessonId/requirements", requirementsCtrl.getLessonRequirements);
router.put("/:lessonId/requirements", requirementsCtrl.syncLessonRequirements);
module.exports = router;
+5
View File
@@ -11,6 +11,7 @@
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)
@@ -35,6 +36,10 @@ 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);
+2
View File
@@ -44,5 +44,7 @@ router.get( '/:courseId/progress/summary', prog
router.get( '/:courseId/progress', progressCtrl.getCourseProgress);
router.get( '/:courseId/task-context', progressCtrl.getCourseTaskContext);
router.post('/:courseId/units/:unitId/lessons/:lessonId/progress', progressCtrl.upsertLessonProgress);
router.post('/:courseId/units/:unitId/lessons/:lessonId/watch-progress', progressCtrl.upsertWatchProgress);
router.post('/:courseId/units/:unitId/lessons/:lessonId/mark-complete', progressCtrl.markLessonComplete);
module.exports = router;
+2
View File
@@ -18,5 +18,7 @@ const ctrl = require('../../controllers/client/units.controller');
router.get('/', ctrl.getLessons);
router.get('/:uuid', ctrl.getLessonByUuid);
router.post('/:uuid/progress', ctrl.upsertStandaloneLessonProgress);
router.post('/:uuid/watch-progress', ctrl.upsertStandaloneWatchProgress);
router.post('/:uuid/mark-complete', ctrl.markStandaloneLessonComplete);
module.exports = router;