feat: 实现成绩管理系统核心功能

添加响应工具、错误处理中间件和数据库模型
创建用户、学生、课程和成绩相关服务
实现管理员、教师和学生控制器的基本功能
重构路由处理并优化数据库查询
This commit is contained in:
祀梦
2025-12-21 22:10:48 +08:00
parent bcf2c71fad
commit b9a975004b
20 changed files with 659 additions and 937 deletions

55
backend/models/Score.js Normal file
View File

@@ -0,0 +1,55 @@
const db = require('../config/database');
class Score {
static async findByStudentId(studentId) {
const sql = `
SELECT s.*, c.course_code, c.course_name, c.credit,
u.name as teacher_name
FROM scores s
JOIN courses c ON s.course_id = c.id
JOIN users u ON s.teacher_id = u.id
WHERE s.student_id = ?
ORDER BY s.created_at DESC
`;
return await db.query(sql, [studentId]);
}
static async findDetailsById(scoreId, studentId) {
const sql = `
SELECT s.*, c.course_code, c.course_name, c.credit, c.semester,
u.name as teacher_name, u.email as teacher_email,
st.id as student_number, st.class as class_name
FROM scores s
JOIN courses c ON s.course_id = c.id
JOIN users u ON s.teacher_id = u.id
JOIN students st ON s.student_id = st.id
WHERE s.id = ? AND st.id = ?
`;
const rows = await db.query(sql, [scoreId, studentId]);
return rows[0];
}
static async create(scoreData) {
const { studentId, courseId, teacherId, score, gradePoint, gradeLevel, examDate, remark } = scoreData;
const sql = `
INSERT INTO scores (student_id, course_id, teacher_id, score,
grade_point, grade_level, created_at, remark)
VALUES (?, ?, ?, ?, ?, ?, NOW(), ?)
`;
// 注意:这里用 created_at 替代了 examDate如果数据库有 examDate 列可以改回去
const result = await db.pool.execute(sql, [
studentId, courseId, teacherId, score, gradePoint, gradeLevel, remark
]);
return result[0].insertId;
}
static async findByStudentAndCourse(studentId, courseId) {
const rows = await db.query(
'SELECT * FROM scores WHERE student_id = ? AND course_id = ?',
[studentId, courseId]
);
return rows[0];
}
}
module.exports = Score;