This commit is contained in:
Ken
2026-01-19 09:33:35 +07:00
parent 374dc12b2d
commit 70838a4bc1
103 changed files with 16929 additions and 2 deletions

View File

@@ -0,0 +1,33 @@
const express = require('express');
const router = express.Router();
const academicYearController = require('../controllers/academicYearController');
/**
* Academic Year Routes
*/
// GET /api/academic-years - Get all academic years with pagination
router.get('/', academicYearController.getAllAcademicYears);
// GET /api/academic-years/current - Get current academic year
router.get('/current', academicYearController.getCurrentAcademicYear);
// GET /api/academic-years/datatypes/schema - Get academic year datatypes
router.get('/datatypes/schema', academicYearController.getAcademicYearDatatypes);
// GET /api/academic-years/:id - Get academic year by ID
router.get('/:id', academicYearController.getAcademicYearById);
// POST /api/academic-years - Create new academic year
router.post('/', academicYearController.createAcademicYear);
// PUT /api/academic-years/:id - Update academic year
router.put('/:id', academicYearController.updateAcademicYear);
// PUT /api/academic-years/:id/set-current - Set as current academic year
router.put('/:id/set-current', academicYearController.setCurrentAcademicYear);
// DELETE /api/academic-years/:id - Delete academic year
router.delete('/:id', academicYearController.deleteAcademicYear);
module.exports = router;

View File

@@ -0,0 +1,27 @@
const express = require('express');
const router = express.Router();
const attendanceController = require('../controllers/attendanceController');
/**
* Attendance Routes
*/
// Get attendance logs with pagination
router.get('/logs', attendanceController.getAttendanceLogs);
// Create attendance log (QR scan)
router.post('/logs', attendanceController.createAttendanceLog);
// Get daily attendance summary
router.get('/daily', attendanceController.getDailyAttendance);
// Process daily attendance (aggregate from logs)
router.post('/process', attendanceController.processAttendance);
// Get attendance statistics
router.get('/stats', attendanceController.getAttendanceStats);
// Get attendance datatypes
router.get('/datatypes/schema', attendanceController.getAttendanceDatatypes);
module.exports = router;

24
routes/authRoutes.js Normal file
View File

@@ -0,0 +1,24 @@
const express = require('express');
const router = express.Router();
const authController = require('../controllers/authController');
/**
* Authentication Routes - /api/auth
*/
// Login
router.post('/login', authController.login);
// Register
router.post('/register', authController.register);
// Verify token
router.post('/verify-token', authController.verifyToken);
// Logout
router.post('/logout', authController.logout);
// Get current user
router.get('/me', authController.me);
module.exports = router;

28
routes/chapterRoutes.js Normal file
View File

@@ -0,0 +1,28 @@
const express = require('express');
const router = express.Router();
const chapterController = require('../controllers/chapterController');
/**
* Chapter Routes
* Base path: /api/chapters
*/
// Get all chapters
router.get('/', chapterController.getAllChapters);
// Get chapter by ID
router.get('/:id', chapterController.getChapterById);
// Get lessons in a chapter
router.get('/:id/lessons', chapterController.getLessonsByChapter);
// Create new chapter
router.post('/', chapterController.createChapter);
// Update chapter
router.put('/:id', chapterController.updateChapter);
// Delete chapter
router.delete('/:id', chapterController.deleteChapter);
module.exports = router;

33
routes/classRoutes.js Normal file
View File

@@ -0,0 +1,33 @@
const express = require('express');
const router = express.Router();
const classController = require('../controllers/classController');
/**
* Class Routes
*/
// GET /api/classes - Get all classes with pagination
router.get('/', classController.getAllClasses);
// GET /api/classes/statistics - Get class statistics
router.get('/statistics', classController.getClassStatistics);
// GET /api/classes/datatypes/schema - Get class datatypes
router.get('/datatypes/schema', classController.getClassDatatypes);
// GET /api/classes/:id - Get class by ID
router.get('/:id', classController.getClassById);
// GET /api/classes/:id/students - Get students in a class
router.get('/:id/students', classController.getStudentsByClass);
// POST /api/classes - Create new class
router.post('/', classController.createClass);
// PUT /api/classes/:id - Update class
router.put('/:id', classController.updateClass);
// DELETE /api/classes/:id - Delete class
router.delete('/:id', classController.deleteClass);
module.exports = router;

34
routes/gameRoutes.js Normal file
View File

@@ -0,0 +1,34 @@
const express = require('express');
const router = express.Router();
const gameController = require('../controllers/gameController');
/**
* Game Routes
* Base path: /api/games
*/
// Get all games
router.get('/', gameController.getAllGames);
// Get game statistics
router.get('/stats', gameController.getGameStats);
// Get games by type
router.get('/type/:type', gameController.getGamesByType);
// Get game by ID
router.get('/:id', gameController.getGameById);
// Create new game
router.post('/', gameController.createGame);
// Update game
router.put('/:id', gameController.updateGame);
// Delete game
router.delete('/:id', gameController.deleteGame);
// Increment play count
router.post('/:id/play', gameController.incrementPlayCount);
module.exports = router;

33
routes/gradeRoutes.js Normal file
View File

@@ -0,0 +1,33 @@
const express = require('express');
const router = express.Router();
const gradeController = require('../controllers/gradeController');
/**
* Grade Routes
*/
// Get grade datatypes (must be before /:id route)
router.get('/datatypes/schema', gradeController.getGradeDatatypes);
// Get student grade summary (must be before /:id route)
router.get('/summary/:student_id/:academic_year_id', gradeController.getStudentGradeSummary);
// Calculate student GPA
router.post('/calculate-gpa', gradeController.calculateGPA);
// Get all grades with pagination
router.get('/', gradeController.getAllGrades);
// Get grade by ID
router.get('/:id', gradeController.getGradeById);
// Create new grade
router.post('/', gradeController.createGrade);
// Update grade
router.put('/:id', gradeController.updateGrade);
// Delete grade
router.delete('/:id', gradeController.deleteGrade);
module.exports = router;

View File

@@ -0,0 +1,30 @@
const express = require('express');
const router = express.Router();
const parentTaskController = require('../controllers/parentTaskController');
/**
* Parent Task Routes
*/
// Get task stats
router.get('/stats', parentTaskController.getTaskStats);
// Get parent's assigned tasks
router.get('/parent/:parent_id', parentTaskController.getParentTasks);
// Get student's tasks
router.get('/student/:student_id', parentTaskController.getStudentTasks);
// Parent assigns task to student
router.post('/assign', parentTaskController.assignTask);
// Complete task
router.put('/:id/complete', parentTaskController.completeTask);
// Update task status
router.put('/:id/status', parentTaskController.updateTaskStatus);
// Delete task
router.delete('/:id', parentTaskController.deleteTask);
module.exports = router;

30
routes/roomRoutes.js Normal file
View File

@@ -0,0 +1,30 @@
const express = require('express');
const router = express.Router();
const roomController = require('../controllers/roomController');
/**
* Room Routes
*/
// Get room datatypes (must be before /:id route)
router.get('/datatypes/schema', roomController.getRoomDatatypes);
// Get rooms by school (must be before /:id route)
router.get('/school/:school_id', roomController.getRoomsBySchool);
// Get all rooms with pagination
router.get('/', roomController.getAllRooms);
// Get room by ID
router.get('/:id', roomController.getRoomById);
// Create new room
router.post('/', roomController.createRoom);
// Update room
router.put('/:id', roomController.updateRoom);
// Delete room
router.delete('/:id', roomController.deleteRoom);
module.exports = router;

73
routes/schoolRoutes.js Normal file
View File

@@ -0,0 +1,73 @@
const express = require('express');
const router = express.Router();
const schoolController = require('../controllers/schoolController');
// const { authenticate, authorize } = require('../middleware/auth'); // Auth middleware
/**
* School Routes
* Base path: /api/schools
*/
/**
* @route GET /api/schools/datatypes/schema
* @desc Get school data types
* @access Protected
*/
router.get('/datatypes/schema', schoolController.getSchoolDatatypes);
/**
* @route GET /api/schools
* @desc Get all schools with pagination
* @query page, limit, type, city, is_active
* @access Public (or Protected based on requirements)
*/
router.get('/', schoolController.getAllSchools);
/**
* @route GET /api/schools/:id
* @desc Get school by ID
* @access Public
*/
router.get('/:id', schoolController.getSchoolById);
/**
* @route GET /api/schools/:id/stats
* @desc Get school statistics
* @access Protected
*/
router.get('/:id/stats', schoolController.getSchoolStats);
/**
* @route POST /api/schools
* @desc Create new school
* @access Protected - Admin only
*/
router.post('/',
// authenticate,
// authorize(['system_admin', 'center_manager']),
schoolController.createSchool
);
/**
* @route PUT /api/schools/:id
* @desc Update school
* @access Protected - Admin only
*/
router.put('/:id',
// authenticate,
// authorize(['system_admin', 'center_manager']),
schoolController.updateSchool
);
/**
* @route DELETE /api/schools/:id
* @desc Delete (soft delete) school
* @access Protected - System Admin only
*/
router.delete('/:id',
// authenticate,
// authorize(['system_admin']),
schoolController.deleteSchool
);
module.exports = router;

27
routes/studentRoutes.js Normal file
View File

@@ -0,0 +1,27 @@
const express = require('express');
const router = express.Router();
const studentController = require('../controllers/studentController');
/**
* Student Routes
*/
// Get student datatypes (must be before /:id route)
router.get('/datatypes/schema', studentController.getStudentDatatypes);
// Get all students with pagination
router.get('/', studentController.getAllStudents);
// Get student by ID
router.get('/:id', studentController.getStudentById);
// Create new student
router.post('/', studentController.createStudent);
// Update student
router.put('/:id', studentController.updateStudent);
// Delete student (update status to dropped)
router.delete('/:id', studentController.deleteStudent);
module.exports = router;

36
routes/subjectRoutes.js Normal file
View File

@@ -0,0 +1,36 @@
const express = require('express');
const router = express.Router();
const subjectController = require('../controllers/subjectController');
/**
* Subject Routes
*/
// GET /api/subjects - Get all subjects with pagination
router.get('/', subjectController.getAllSubjects);
// GET /api/subjects/active - Get all active subjects
router.get('/active', subjectController.getActiveSubjects);
// GET /api/subjects/datatypes/schema - Get subject datatypes
router.get('/datatypes/schema', subjectController.getSubjectDatatypes);
// GET /api/subjects/code/:code - Get subject by code
router.get('/code/:code', subjectController.getSubjectByCode);
// GET /api/subjects/:id - Get subject by ID
router.get('/:id', subjectController.getSubjectById);
// GET /api/subjects/:id/chapters - Get chapters by subject
router.get('/:id/chapters', subjectController.getChaptersBySubject);
// POST /api/subjects - Create new subject
router.post('/', subjectController.createSubject);
// PUT /api/subjects/:id - Update subject
router.put('/:id', subjectController.updateSubject);
// DELETE /api/subjects/:id - Delete subject
router.delete('/:id', subjectController.deleteSubject);
module.exports = router;

View File

@@ -0,0 +1,24 @@
const express = require('express');
const router = express.Router();
const subscriptionController = require('../controllers/subscriptionController');
/**
* Subscription Routes
*/
// Get all subscription plans
router.get('/plans', subscriptionController.getPlans);
// Get subscription stats
router.get('/stats', subscriptionController.getSubscriptionStats);
// Get user subscription status
router.get('/user/:user_id', subscriptionController.getUserSubscription);
// Purchase subscription
router.post('/purchase', subscriptionController.purchaseSubscription);
// Cancel subscription
router.post('/:id/cancel', subscriptionController.cancelSubscription);
module.exports = router;

30
routes/teacherRoutes.js Normal file
View File

@@ -0,0 +1,30 @@
const express = require('express');
const router = express.Router();
const teacherController = require('../controllers/teacherController');
/**
* Teacher Routes
*/
// Get teacher datatypes (must be before /:id route)
router.get('/datatypes/schema', teacherController.getTeacherDatatypes);
// Get all teachers with pagination
router.get('/', teacherController.getAllTeachers);
// Get teacher by ID
router.get('/:id', teacherController.getTeacherById);
// Create new teacher
router.post('/', teacherController.createTeacher);
// Update teacher
router.put('/:id', teacherController.updateTeacher);
// Update teacher profile (separate endpoint for user self-update)
router.put('/:id/profile', teacherController.updateTeacherProfile);
// Delete teacher (update status to resigned)
router.delete('/:id', teacherController.deleteTeacher);
module.exports = router;

27
routes/trainingRoutes.js Normal file
View File

@@ -0,0 +1,27 @@
const express = require('express');
const router = express.Router();
const trainingController = require('../controllers/trainingController');
/**
* Training Routes
*/
// Get training stats
router.get('/stats', trainingController.getTrainingStats);
// Get staff training assignments
router.get('/assignments/:staff_id', trainingController.getStaffAssignments);
// Assign training to staff
router.post('/assignments', trainingController.assignTraining);
// Update assignment status
router.put('/assignments/:id/status', trainingController.updateAssignmentStatus);
// Get staff achievements/certificates
router.get('/achievements/:staff_id', trainingController.getStaffAchievements);
// Create achievement record
router.post('/achievements', trainingController.createAchievement);
module.exports = router;

41
routes/userRoutes.js Normal file
View File

@@ -0,0 +1,41 @@
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');
/**
* User Routes
*/
// === Authentication Routes ===
// Login
router.post('/login', userController.login);
// Register
router.post('/register', userController.register);
// Verify token
router.post('/verify-token', userController.verifyToken);
// Logout
router.post('/logout', userController.logout);
// === User Management Routes ===
// Get user datatypes (must be before /:id route)
router.get('/datatypes/schema', userController.getUserDatatypes);
// Get all users with pagination
router.get('/', userController.getAllUsers);
// Get user by ID
router.get('/:id', userController.getUserById);
// Create new user
router.post('/', userController.createUser);
// Update user
router.put('/:id', userController.updateUser);
// Delete user (soft delete)
router.delete('/:id', userController.deleteUser);
module.exports = router;