const express = require('express'); const router = express.Router(); const db = require('../config/database'); const { requireAuth, requireRole } = require('../middleware/auth'); // 获取学生成绩 router.get('/grades', requireAuth, requireRole(['student']), async (req, res) => { try { const userId = req.session.user.id; // 获取学生信息 const students = await db.pool.execute( 'SELECT id FROM students WHERE user_id = ?', [userId] ); if (students[0].length === 0) { return res.status(404).json({ success: false, message: '学生信息不存在' }); } const studentId = students[0][0].id; // 获取成绩信息 const grades = await db.pool.execute(` 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.exam_date DESC `, [studentId]); // 计算统计信息 let totalCredits = 0; let totalGradePoints = 0; let totalCourses = grades.length; grades.forEach(grade => { totalCredits += parseFloat(grade.credit); if (grade.grade_point) { totalGradePoints += parseFloat(grade.grade_point) * parseFloat(grade.credit); } }); const gpa = totalCredits > 0 ? (totalGradePoints / totalCredits).toFixed(2) : 0; res.json({ success: true, grades, statistics: { totalCourses, totalCredits, gpa, averageScore: totalCourses > 0 ? (grades.reduce((sum, g) => sum + parseFloat(g.score || 0), 0) / totalCourses).toFixed(1) : 0 } }); } catch (error) { console.error('获取成绩错误:', error); res.status(500).json({ success: false, message: '服务器错误' }); } }); // 获取成绩详情 router.get('/grades/:id', requireAuth, requireRole(['student']), async (req, res) => { try { const gradeId = req.params.id; const userId = req.session.user.id; const grades = await db.pool.execute(` SELECT s.*, c.course_code, c.course_name, c.credit, c.semester, u.full_name as teacher_name, u.email as teacher_email, st.student_id as student_number, st.class_name, st.major 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.user_id = ? `, [gradeId, userId]); if (grades[0].length === 0) { return res.status(404).json({ success: false, message: '成绩不存在' }); } res.json({ success: true, grade: grades[0] }); } catch (error) { console.error('获取成绩详情错误:', error); res.status(500).json({ success: false, message: '服务器错误' }); } }); // 获取学生个人信息 router.get('/profile', requireAuth, requireRole(['student']), async (req, res) => { try { const userId = req.session.user.id; const students = await db.pool.execute(` SELECT s.*, u.username, u.email, u.created_at as account_created FROM students s JOIN users u ON s.user_id = u.id WHERE u.id = ? `, [userId]); if (students[0].length === 0) { return res.status(404).json({ success: false, message: '学生信息不存在' }); } res.json({ success: true, profile: students[0] }); } catch (error) { console.error('获取个人信息错误:', error); res.status(500).json({ success: false, message: '服务器错误' }); } }); module.exports = router;