55 lines
2.0 KiB
JavaScript
55 lines
2.0 KiB
JavaScript
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; |