update
All checks were successful
Deploy to Production / deploy (push) Successful in 20s

This commit is contained in:
Ken
2026-02-27 09:38:39 +07:00
parent 9af45a7875
commit 6287a019e3
16 changed files with 2032 additions and 18 deletions

View File

@@ -33,4 +33,11 @@ router.put('/:id', categoryController.updateCategory);
// DELETE /api/categories/:id - Delete category
router.delete('/:id', categoryController.deleteCategory);
// ============ Nested Subject Routes ============
// POST /api/categories/:categoryId/subjects - Add subject to category
router.post('/:categoryId/subjects', categoryController.addSubjectToCategory);
// DELETE /api/categories/:categoryId/subjects/:subjectId - Remove subject from category
router.delete('/:categoryId/subjects/:subjectId', categoryController.removeSubjectFromCategory);
module.exports = router;

View File

@@ -25,4 +25,11 @@ router.put('/:id', chapterController.updateChapter);
// Delete chapter
router.delete('/:id', chapterController.deleteChapter);
// ============ Nested Lesson Routes ============
// POST /api/chapters/:chapterId/lessons - Add lesson to chapter
router.post('/:chapterId/lessons', chapterController.addLessonToChapter);
// DELETE /api/chapters/:chapterId/lessons/:lessonId - Remove lesson from chapter
router.delete('/:chapterId/lessons/:lessonId', chapterController.removeLessonFromChapter);
module.exports = router;

View File

@@ -247,4 +247,137 @@ router.delete('/:id', lessonController.deleteLesson);
*/
router.post('/:id/complete', lessonController.completeLesson);
// ============ Nested Story Routes ============
/**
* @swagger
* /api/lessons/{lessonId}/stories:
* get:
* tags: [Lessons]
* summary: Lấy danh sách stories trong một lesson
* parameters:
* - in: path
* name: lessonId
* required: true
* schema:
* type: string
* format: uuid
* - in: query
* name: page
* schema:
* type: integer
* default: 1
* - in: query
* name: limit
* schema:
* type: integer
* default: 20
* responses:
* 200:
* description: Danh sách stories trong lesson
*/
router.get('/:lessonId/stories', lessonController.getStoriesByLesson);
/**
* @swagger
* /api/lessons/{lessonId}/stories:
* post:
* tags: [Lessons]
* summary: Thêm story vào lesson
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: lessonId
* required: true
* schema:
* type: string
* format: uuid
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* required:
* - story_id
* properties:
* story_id:
* type: string
* format: uuid
* display_order:
* type: integer
* default: 0
* is_required:
* type: boolean
* default: true
* responses:
* 201:
* description: Story đã được thêm vào lesson
*/
router.post('/:lessonId/stories', lessonController.addStoryToLesson);
/**
* @swagger
* /api/lessons/{lessonId}/stories/{storyId}:
* put:
* tags: [Lessons]
* summary: Cập nhật story trong lesson (display_order, is_required)
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: lessonId
* required: true
* schema:
* type: string
* format: uuid
* - in: path
* name: storyId
* required: true
* schema:
* type: string
* format: uuid
* requestBody:
* content:
* application/json:
* schema:
* type: object
* properties:
* display_order:
* type: integer
* is_required:
* type: boolean
* responses:
* 200:
* description: Cập nhật thành công
*/
router.put('/:lessonId/stories/:storyId', lessonController.updateStoryInLesson);
/**
* @swagger
* /api/lessons/{lessonId}/stories/{storyId}:
* delete:
* tags: [Lessons]
* summary: Xóa story khỏi lesson
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: lessonId
* required: true
* schema:
* type: string
* format: uuid
* - in: path
* name: storyId
* required: true
* schema:
* type: string
* format: uuid
* responses:
* 200:
* description: Story đã được xóa khỏi lesson
*/
router.delete('/:lessonId/stories/:storyId', lessonController.removeStoryFromLesson);
module.exports = router;

View File

@@ -386,4 +386,100 @@ router.put('/:id', storyController.updateStory);
*/
router.delete('/:id', storyController.deleteStory);
// ============ Nested Lesson Routes ============
/**
* @swagger
* /api/stories/{storyId}/lessons:
* get:
* tags: [Stories]
* summary: Lấy danh sách lessons sử dụng story này
* parameters:
* - in: path
* name: storyId
* required: true
* schema:
* type: string
* format: uuid
* - in: query
* name: page
* schema:
* type: integer
* default: 1
* - in: query
* name: limit
* schema:
* type: integer
* default: 20
* responses:
* 200:
* description: Danh sách lessons sử dụng story
*/
router.get('/:storyId/lessons', storyController.getLessonsByStory);
/**
* @swagger
* /api/stories/{storyId}/lessons:
* post:
* tags: [Stories]
* summary: Thêm lesson vào story (alternative way)
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: storyId
* required: true
* schema:
* type: string
* format: uuid
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* required:
* - lesson_id
* properties:
* lesson_id:
* type: string
* format: uuid
* display_order:
* type: integer
* default: 0
* is_required:
* type: boolean
* default: true
* responses:
* 201:
* description: Lesson đã được thêm vào story
*/
router.post('/:storyId/lessons', storyController.addLessonToStory);
/**
* @swagger
* /api/stories/{storyId}/lessons/{lessonId}:
* delete:
* tags: [Stories]
* summary: Xóa lesson khỏi story
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: storyId
* required: true
* schema:
* type: string
* format: uuid
* - in: path
* name: lessonId
* required: true
* schema:
* type: string
* format: uuid
* responses:
* 200:
* description: Lesson đã được xóa khỏi story
*/
router.delete('/:storyId/lessons/:lessonId', storyController.removeLessonFromStory);
module.exports = router;

View File

@@ -33,4 +33,11 @@ router.put('/:id', subjectController.updateSubject);
// DELETE /api/subjects/:id - Delete subject
router.delete('/:id', subjectController.deleteSubject);
// ============ Nested Chapter Routes ============
// POST /api/subjects/:subjectId/chapters - Add chapter to subject
router.post('/:subjectId/chapters', subjectController.addChapterToSubject);
// DELETE /api/subjects/:subjectId/chapters/:chapterId - Remove chapter from subject
router.delete('/:subjectId/chapters/:chapterId', subjectController.removeChapterFromSubject);
module.exports = router;