Files
sena_db_api_layer/routes/storyRoutes.js
silverpro89 b7ba1d02b3
All checks were successful
Deploy to Production / deploy (push) Successful in 20s
update
2026-02-18 18:01:45 +07:00

334 lines
8.7 KiB
JavaScript

const express = require('express');
const router = express.Router();
const storyController = require('../controllers/storyController');
const { authenticateToken } = require('../middleware/auth');
/**
* @swagger
* tags:
* name: Stories
* description: Story management system for interactive learning content
*/
/**
* @swagger
* /api/stories:
* post:
* summary: Create a new story
* tags: [Stories]
* security:
* - bearerAuth: []
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* required:
* - name
* properties:
* name:
* type: string
* example: "The Greedy Cat"
* logo:
* type: string
* example: "https://cdn.sena.tech/thumbs/greedy-cat.jpg"
* vocabulary:
* type: array
* items:
* type: string
* example: ["cat", "eat", "apple", "happy", "greedy"]
* context:
* type: array
* items:
* type: object
* properties:
* image:
* type: string
* text:
* type: string
* audio:
* type: string
* order:
* type: integer
* example:
* - image: "https://cdn.sena.tech/story/scene1.jpg"
* text: "Once upon a time, there was a greedy cat."
* audio: "https://cdn.sena.tech/audio/scene1.mp3"
* order: 1
* - image: "https://cdn.sena.tech/story/scene2.jpg"
* text: "The cat loved eating apples every day."
* audio: "https://cdn.sena.tech/audio/scene2.mp3"
* order: 2
* grade:
* type: array
* items:
* type: string
* example: ["Grade 1", "Grade 2"]
* tag:
* type: array
* items:
* type: string
* example: ["animals", "food", "lesson", "health", "fiction"]
* responses:
* 201:
* description: Story created successfully
* 400:
* description: Invalid input
* 500:
* description: Server error
*/
router.post('/', storyController.createStory);
/**
* @swagger
* /api/stories:
* get:
* summary: Get all stories with pagination and filters
* tags: [Stories]
* security:
* - bearerAuth: []
* parameters:
* - in: query
* name: page
* schema:
* type: integer
* default: 1
* description: Page number
* - in: query
* name: limit
* schema:
* type: integer
* default: 20
* description: Items per page
* - in: query
* name: search
* schema:
* type: string
* description: Search in story name
* - in: query
* name: grade_filter
* schema:
* type: string
* description: Filter by grade (e.g., "Grade 1")
* - in: query
* name: tag_filter
* schema:
* type: string
* description: Filter by tag (e.g., "animals")
* - in: query
* name: sort_by
* schema:
* type: string
* default: created_at
* description: Sort by field
* - in: query
* name: sort_order
* schema:
* type: string
* enum: [ASC, DESC]
* default: DESC
* description: Sort order
* responses:
* 200:
* description: List of stories
* 500:
* description: Server error
*/
router.get('/', storyController.getAllStories);
/**
* @swagger
* /api/stories/grade:
* get:
* summary: Get stories by grade level
* tags: [Stories]
* security:
* - bearerAuth: []
* parameters:
* - in: query
* name: grade
* required: true
* schema:
* type: string
* description: Grade level (e.g., "Grade 1")
* responses:
* 200:
* description: List of stories for the specified grade
* 400:
* description: Missing grade parameter
* 500:
* description: Server error
*/
router.get('/grade', storyController.getStoriesByGrade);
/**
* @swagger
* /api/stories/tag:
* get:
* summary: Get stories by tag
* tags: [Stories]
* security:
* - bearerAuth: []
* parameters:
* - in: query
* name: tag
* required: true
* schema:
* type: string
* description: Tag name (e.g., "animals")
* responses:
* 200:
* description: List of stories with the specified tag
* 400:
* description: Missing tag parameter
* 500:
* description: Server error
*/
router.get('/tag', storyController.getStoriesByTag);
/**
* @swagger
* /api/stories/guide:
* get:
* summary: Get comprehensive guide for AI to create stories
* tags: [Stories]
* security:
* - bearerAuth: []
* responses:
* 200:
* description: Complete guide with rules, examples, and data structures
* content:
* application/json:
* schema:
* type: object
* properties:
* guide_version:
* type: string
* last_updated:
* type: string
* data_structure:
* type: object
* context_structure:
* type: object
* vocabulary_guidelines:
* type: object
* grade_levels:
* type: object
* tag_categories:
* type: object
* examples:
* type: object
* validation_checklist:
* type: array
* common_mistakes:
* type: array
* ai_tips:
* type: object
* 500:
* description: Server error
*/
router.get('/guide', storyController.getStoryGuide);
/**
* @swagger
* /api/stories/stats:
* get:
* summary: Get story statistics
* tags: [Stories]
* security:
* - bearerAuth: []
* responses:
* 200:
* description: Story statistics
* 500:
* description: Server error
*/
router.get('/stats', storyController.getStoryStats);
/**
* @swagger
* /api/stories/{id}:
* get:
* summary: Get story by ID
* tags: [Stories]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: string
* description: Story ID (UUID)
* responses:
* 200:
* description: Story details
* 404:
* description: Story not found
* 500:
* description: Server error
*/
router.get('/:id', storyController.getStoryById);
/**
* @swagger
* /api/stories/{id}:
* put:
* summary: Update story
* tags: [Stories]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: string
* description: Story ID (UUID)
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* example:
* name: "The Greedy Cat (Updated)"
* tag: ["animals", "food", "lesson", "health", "fiction", "updated"]
* responses:
* 200:
* description: Story updated successfully
* 404:
* description: Story not found
* 500:
* description: Server error
*/
router.put('/:id', storyController.updateStory);
/**
* @swagger
* /api/stories/{id}:
* delete:
* summary: Delete story
* tags: [Stories]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: string
* description: Story ID (UUID)
* responses:
* 200:
* description: Story deleted successfully
* 404:
* description: Story not found
* 500:
* description: Server error
*/
router.delete('/:id', storyController.deleteStory);
module.exports = router;