AutoTeacher Next.js
使用 Next.js (App Router) 重写的 AutoTeacher 教学辅助应用
- 学生端:课程 / 班级 / 作业级联选择,动态表单填写,PDF 文件上传(存储于 S3 兼容对象存储),支持填写学号与姓名并限制同一学号仅提交一次,提交信息写入 PostgreSQL。
- 教师端:创建课程、班级、作业,自定义表单 JSON 配置,支持设置评分标准并选择学生提交后自动评分或手动触发评分,支持为班级导入 Excel 名册并强制学生提交校验。
- 后端:Next.js API Route + Prisma + PostgreSQL,文件持久化到 S3。
快速开始
-
安装依赖
npm install # 或 pnpm install / yarn install -
配置环境变量
复制
.env.example为.env.local并根据实际环境修改:cp .env.example .env.local关键变量说明:
变量 说明 DATABASE_URLPostgreSQL 连接字符串 AUTOTEACHER_S3_BUCKETS3 Bucket 名称 AUTOTEACHER_S3_REGIONS3 区域;若使用自建兼容服务可留空 AUTOTEACHER_S3_ENDPOINT_URL(可选)S3 兼容 Endpoint,如 https://s3.example.comAUTOTEACHER_S3_ACCESS_KEY_ID/AUTOTEACHER_S3_SECRET_ACCESS_KEY访问凭证 AUTOTEACHER_S3_PUBLIC_BASE_URL(可选)对外访问地址前缀,例如 CDN AUTOTEACHER_S3_USE_SSL默认为 true,如需禁用 TLS 可设为false -
数据库迁移
npx prisma migrate dev --name init npx prisma generate -
启动开发服务器
npm run dev访问:
- 学生端:
http://localhost:3000/ - 教师后台:
http://localhost:3000/teacher
- 学生端:
目录结构
autoteacher-next/
prisma/
schema.prisma # 数据模型定义
src/
app/
api/ # Next API Routes (课程/班级/作业/提交)
page.tsx # 学生端提交界面
teacher/page.tsx # 教师后台
layout.tsx
lib/
prisma.ts # Prisma 客户端
s3.ts # S3 上传工具
api.ts # 前端请求封装
validators.ts # zod 校验
styles/
globals.css # 全局样式
types/
index.ts # 共享类型定义
package.json
next.config.js
tsconfig.json
.env.example
README.md
表单配置示例
创建作业时的 JSON 表单示例(默认值):
{
"fields": [
{
"name": "student_id",
"label": "学号",
"type": "text",
"placeholder": "请输入学号",
"required": true
}
],
"file_upload": {
"accept": [".pdf"],
"label": "上传作业文件"
}
}
如需扩展字段,可添加 textarea 或更多 text 输入项;学生提交时的字段值会以 JSON 格式存入 Submission.formPayload。
班级名单导入与校验
- Excel 格式:仅需两列,第一列是学号、第二列是姓名,表头可选;若保留表头,建议包含 “学号/Student/ID” 与 “姓名/Name” 等字样以便自动识别。
- 导入流程:教师后台 → “班级管理” → 选择班级 → 使用“班级名单导入”上传 Excel。上传后会用文件内容替换该班级的全部名册并展示已导入人数。
- 学生提交校验:学生在提交作业时需先选择班级,其输入的学号与姓名必须与该班级名册中的记录完全匹配,否则返回 “不在此班级内” 并禁止提交。每个学号仍然只能提交一次。
生产部署提示
- 推荐设置独立的 S3 Bucket 权限策略,仅允许应用上传指定前缀。
- 上传接口已限制 Word 文件后缀,必要时可在
src/app/api/assignments/[assignmentId]/submissions/route.ts添加 MIME 校验或病毒扫描。 - 若切换到其他存储(如 MinIO),只需调整环境变量(Endpoint/凭证)。
- 使用
npm run build && npm run start可运行生产模式,Prismamigrate deploy适用于 CI/CD。
Description
Languages
TypeScript
97%
Dockerfile
2%
JavaScript
0.7%
CSS
0.3%