This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user