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

View File

@@ -0,0 +1,70 @@
const AuthService = require('../services/authService');
const { success, error } = require('../utils/response');
class AuthController {
static async login(req, res) {
try {
const { id, password, role } = req.body;
if (!id || !password || !role) {
return error(res, '请输入完整的登录信息', 400);
}
const user = await AuthService.login(id, password, role);
// 设置 Session
req.session.user = user;
success(res, user, '登录成功');
} catch (err) {
if (err.message === '用户名或密码错误') {
return error(res, err.message, 401);
}
console.error('Login Error:', err);
error(res, '服务器错误');
}
}
static async register(req, res) {
try {
const { id, name, password, role, class: userClass } = req.body;
if (!id || !name || !password || !role) {
return error(res, '请填写所有必填字段', 400);
}
if ((role === 'student' || role === 'teacher') && !userClass) {
return error(res, '学生和教师需要填写班级', 400);
}
await AuthService.register(req.body);
success(res, null, '注册成功');
} catch (err) {
if (err.message === '用户ID已存在') {
return error(res, err.message, 400);
}
console.error('Register Error:', err);
error(res, '服务器错误');
}
}
static async logout(req, res) {
req.session.destroy((err) => {
if (err) {
return error(res, '注销失败');
}
res.clearCookie('session_cookie');
success(res, null, '注销成功');
});
}
static async getCurrentUser(req, res) {
if (req.session.user) {
success(res, { user: req.session.user });
} else {
// 不返回 401只返回 success: false方便前端判断
res.json({ success: false, message: '未登录' });
}
}
}
module.exports = AuthController;