const router = require('express').Router(); const { authMiddleware, requireRole } = require('../middleware/auth'); const validate = require('../middleware/validate'); const ctrl = require('../controllers/assignmentController'); const MODES = ['exam', 'practice', 'repeat', 'ct']; const createSchema = { body: { title: { type: 'string', required: true, minLen: 1, maxLen: 200 }, subject_slug: { type: 'string', maxLen: 100 }, mode: { type: 'string', oneOf: MODES }, count: { type: 'number', min: 1, max: 200 }, deadline: { type: 'string', maxLen: 30 }, }}; const updateSchema = { body: { title: { type: 'string', required: true, minLen: 1, maxLen: 200 }, subject_slug: { type: 'string', maxLen: 100 }, mode: { type: 'string', oneOf: MODES }, count: { type: 'number', min: 1, max: 200 }, deadline: { type: 'string', maxLen: 30 }, }}; const directSchema = { body: { title: { type: 'string', required: true, minLen: 1, maxLen: 200 }, subject_slug: { type: 'string', maxLen: 100 }, mode: { type: 'string', oneOf: MODES }, count: { type: 'number', min: 1, max: 200 }, deadline: { type: 'string', maxLen: 30 }, student_email: { type: 'string', maxLen: 255 }, }}; const bulkSchema = { body: { title: { type: 'string', required: true, minLen: 1, maxLen: 200 }, class_ids: { type: 'array', required: true }, mode: { type: 'string', oneOf: MODES }, count: { type: 'number', min: 1, max: 200 }, }}; router.use(authMiddleware); router.get('/my', ctrl.myAssignments); router.get('/teacher', requireRole('teacher','admin'), ctrl.teacherAssignments); router.get('/templates', requireRole('teacher','admin'), ctrl.listTemplates); router.post('/templates', requireRole('teacher','admin'), ctrl.saveTemplate); router.delete('/templates/:id', requireRole('teacher','admin'), ctrl.deleteTemplate); router.post('/bulk', requireRole('teacher','admin'), validate(bulkSchema), ctrl.bulkCreateAssignment); router.post('/', requireRole('teacher','admin'), validate(directSchema), ctrl.createDirectAssignment); router.post('/:id/start', ctrl.startAssignment); router.get('/:id/results', requireRole('teacher','admin'), ctrl.assignmentResults); router.get('/:id/question-stats', requireRole('teacher','admin'), ctrl.assignmentQuestionStats); router.get('/:id/sessions/:session_id/review', requireRole('teacher','admin'), ctrl.assignmentSessionReview); router.put('/:id', requireRole('teacher','admin'), validate(updateSchema), ctrl.updateAssignment); router.delete('/:id', requireRole('teacher','admin'), ctrl.deleteAssignment); module.exports = router;