feat: initialize AutoTeacher Next.js project structure
This commit is contained in:
112
README.md
Normal file
112
README.md
Normal file
@ -0,0 +1,112 @@
|
||||
# AutoTeacher Next.js
|
||||
|
||||
使用 Next.js (App Router) 重写的 AutoTeacher 教学辅助应用
|
||||
|
||||
- 学生端:课程 / 班级 / 作业级联选择,动态表单填写,PDF 文件上传(存储于 S3 兼容对象存储),支持填写学号与姓名并限制同一学号仅提交一次,提交信息写入 PostgreSQL。
|
||||
- 教师端:创建课程、班级、作业,自定义表单 JSON 配置,支持设置评分标准并选择学生提交后自动评分或手动触发评分。
|
||||
- 后端:Next.js API Route + Prisma + PostgreSQL,文件持久化到 S3。
|
||||
|
||||
## 快速开始
|
||||
|
||||
1. **安装依赖**
|
||||
|
||||
```bash
|
||||
npm install
|
||||
# 或 pnpm install / yarn install
|
||||
```
|
||||
|
||||
2. **配置环境变量**
|
||||
|
||||
复制 `.env.example` 为 `.env.local` 并根据实际环境修改:
|
||||
|
||||
```bash
|
||||
cp .env.example .env.local
|
||||
```
|
||||
|
||||
关键变量说明:
|
||||
|
||||
| 变量 | 说明 |
|
||||
|------|------|
|
||||
| `DATABASE_URL` | PostgreSQL 连接字符串 |
|
||||
| `AUTOTEACHER_S3_BUCKET` | S3 Bucket 名称 |
|
||||
| `AUTOTEACHER_S3_REGION` | S3 区域;若使用自建兼容服务可留空 |
|
||||
| `AUTOTEACHER_S3_ENDPOINT_URL` | (可选)S3 兼容 Endpoint,如 `https://s3.example.com` |
|
||||
| `AUTOTEACHER_S3_ACCESS_KEY_ID` / `AUTOTEACHER_S3_SECRET_ACCESS_KEY` | 访问凭证 |
|
||||
| `AUTOTEACHER_S3_PUBLIC_BASE_URL` | (可选)对外访问地址前缀,例如 CDN |
|
||||
| `AUTOTEACHER_S3_USE_SSL` | 默认为 `true`,如需禁用 TLS 可设为 `false` |
|
||||
|
||||
3. **数据库迁移**
|
||||
|
||||
```bash
|
||||
npx prisma migrate dev --name init
|
||||
npx prisma generate
|
||||
```
|
||||
|
||||
4. **启动开发服务器**
|
||||
|
||||
```bash
|
||||
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 表单示例(默认值):
|
||||
|
||||
```json
|
||||
{
|
||||
"fields": [
|
||||
{
|
||||
"name": "student_id",
|
||||
"label": "学号",
|
||||
"type": "text",
|
||||
"placeholder": "请输入学号",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"file_upload": {
|
||||
"accept": [".pdf"],
|
||||
"label": "上传作业文件"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
如需扩展字段,可添加 `textarea` 或更多 `text` 输入项;学生提交时的字段值会以 JSON 格式存入 `Submission.formPayload`。
|
||||
|
||||
## 生产部署提示
|
||||
|
||||
- 推荐设置独立的 S3 Bucket 权限策略,仅允许应用上传指定前缀。
|
||||
- 上传接口已限制 Word 文件后缀,必要时可在 `src/app/api/assignments/[assignmentId]/submissions/route.ts` 添加 MIME 校验或病毒扫描。
|
||||
- 若切换到其他存储(如 MinIO),只需调整环境变量(Endpoint/凭证)。
|
||||
- 使用 `npm run build && npm run start` 可运行生产模式,Prisma `migrate deploy` 适用于 CI/CD。
|
||||
Reference in New Issue
Block a user