refactor(auth): 重构认证模块适配Bootstrap 5样式 feat(controller): 在登录响应中返回用户对象 feat(server): 添加学生个人中心路由 refactor(models): 重构学生和成绩模型结构 style: 更新登录和注册页面UI设计 chore: 添加数据库备份脚本和空备份文件
61 lines
2.5 KiB
JavaScript
61 lines
2.5 KiB
JavaScript
const db = require('../config/database');
|
||
|
||
class Score {
|
||
static async findByStudentId(studentId) {
|
||
const sql = `
|
||
SELECT s.id, s.student_id, s.course_id, s.teacher_id,
|
||
s.total_score as score, s.grade_point, s.grade_level, s.created_at,
|
||
c.course_code, c.course_name, c.credit,
|
||
u.name as teacher_name
|
||
FROM grades 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.id, s.student_id, s.course_id, s.teacher_id,
|
||
s.usual_score, s.midterm_score, s.final_score, s.total_score as score,
|
||
s.grade_point, s.grade_level, s.created_at, s.remark,
|
||
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 grades 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, remark } = scoreData;
|
||
// 既然TeacherService只传了score,我们默认把它作为 final_score 和 total_score
|
||
// 如果需要支持平时分/期中分,需要修改前端和Controller
|
||
const sql = `
|
||
INSERT INTO grades (student_id, course_id, teacher_id, final_score, total_score,
|
||
grade_point, grade_level, created_at, remark)
|
||
VALUES (?, ?, ?, ?, ?, ?, ?, NOW(), ?)
|
||
`;
|
||
const result = await db.pool.execute(sql, [
|
||
studentId, courseId, teacherId, score, score, gradePoint, gradeLevel, remark
|
||
]);
|
||
return result[0].insertId;
|
||
}
|
||
|
||
static async findByStudentAndCourse(studentId, courseId) {
|
||
const rows = await db.query(
|
||
'SELECT * FROM grades WHERE student_id = ? AND course_id = ?',
|
||
[studentId, courseId]
|
||
);
|
||
return rows[0];
|
||
}
|
||
}
|
||
|
||
module.exports = Score; |