Files
WebWork/backend/services/studentService.js

71 lines
2.0 KiB
JavaScript

const Score = require('../models/Score');
const Student = require('../models/Student');
const Course = require('../models/Course');
class StudentService {
static async getStudentCourses(userId) {
const student = await Student.findById(userId);
if (!student) {
throw new Error('学生信息不存在');
}
const courses = await Course.findByStudentId(userId);
return courses;
}
static async getCourseDetails(courseId) {
const course = await Course.findDetailsById(courseId);
if (!course) {
throw new Error('课程不存在');
}
return course;
}
static async getStudentGrades(userId) {
// 确认学生是否存在
const student = await Student.findById(userId);
if (!student) {
throw new Error('学生信息不存在');
}
const grades = await Score.findByStudentId(userId);
// 计算统计信息
let totalCredits = 0;
let totalGradePoints = 0;
const totalCourses = grades.length;
grades.forEach(grade => {
const credit = parseFloat(grade.credit);
totalCredits += credit;
if (grade.grade_point) {
totalGradePoints += parseFloat(grade.grade_point) * credit;
}
});
const gpa = totalCredits > 0 ? (totalGradePoints / totalCredits).toFixed(2) : 0;
const averageScore = totalCourses > 0 ?
(grades.reduce((sum, g) => sum + parseFloat(g.score || 0), 0) / totalCourses).toFixed(1) : 0;
return {
grades,
statistics: {
totalCourses,
totalCredits,
gpa,
averageScore
}
};
}
static async getGradeDetails(scoreId, userId) {
const grade = await Score.findDetailsById(scoreId, userId);
if (!grade) {
throw new Error('成绩不存在');
}
return grade;
}
}
module.exports = StudentService;