184 lines
4.3 KiB
Markdown
184 lines
4.3 KiB
Markdown
# College AI Center — 启动与调试指南
|
||
|
||
## 项目结构
|
||
|
||
- **后端**:`/` 根目录,NestJS + TypeORM(可选 PostgreSQL)
|
||
- **前端**:`web/` 目录,Next.js + Tailwind CSS
|
||
- **四个新模块**:轮转见习、技能视频、执业医师备考、学术交流
|
||
|
||
---
|
||
|
||
## 环境准备
|
||
|
||
复制环境变量模板并按需修改:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
### 核心环境变量(`.env`)
|
||
|
||
| 变量 | 说明 | 默认值 |
|
||
|------|------|--------|
|
||
| `APP_PORT` | 后端服务端口 | `3000` |
|
||
| `NODE_ENV` | 运行环境 | `development` |
|
||
| `DB_ENABLED` | 是否启用 PostgreSQL 持久化 | `false` |
|
||
| `JWT_SECRET` | JWT 签名密钥 | `college-ai-center-dev-secret-change-me` |
|
||
| `JWT_EXPIRES_IN_SECONDS` | Token 有效期(秒) | `7200` |
|
||
| `DB_HOST` / `DB_PORT` / `DB_USERNAME` / `DB_PASSWORD` / `DB_DATABASE` | PostgreSQL 连接 | 见 `.env.example` |
|
||
| `DB_SYNCHRONIZE` | 自动同步数据库结构(仅开发) | `false` |
|
||
| `DB_LOGGING` | SQL 日志 | `false` |
|
||
|
||
> **提示**:`DB_ENABLED=false` 时所有模块使用内存实现,无需安装 PostgreSQL,适合本地快速启动和测试。
|
||
|
||
---
|
||
|
||
## 安装依赖
|
||
|
||
### 后端
|
||
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
### 前端
|
||
|
||
```bash
|
||
cd web && npm install
|
||
```
|
||
|
||
---
|
||
|
||
## 启动命令
|
||
|
||
### 1. 启动后端(开发模式,带热重载)
|
||
|
||
```bash
|
||
npm run start:dev
|
||
```
|
||
|
||
后端运行在 `http://localhost:3000`,API 前缀为 `/api/*`。
|
||
|
||
### 2. 启动前端(开发模式)
|
||
|
||
```bash
|
||
cd web && npm run dev
|
||
```
|
||
|
||
前端运行在 `http://localhost:4100`。
|
||
|
||
### 3. 一键同时启动前后端(后台运行)
|
||
|
||
```bash
|
||
# 在项目根目录执行
|
||
# 1. 启动后端(后台)
|
||
nohup npm run start:dev > backend.log 2>&1 &
|
||
|
||
# 2. 启动前端(后台)
|
||
cd web && nohup npm run dev > ../frontend.log 2>&1 &
|
||
```
|
||
|
||
停止后台进程:
|
||
```bash
|
||
# 查找并停止后端(NestJS)
|
||
pkill -f "nest start"
|
||
|
||
# 查找并停止前端(Next.js)
|
||
pkill -f "next dev"
|
||
```
|
||
|
||
### 4. 生产构建
|
||
|
||
```bash
|
||
# 后端构建
|
||
npm run build
|
||
|
||
# 前端构建
|
||
cd web && npm run build
|
||
```
|
||
|
||
---
|
||
|
||
## 数据库连接(可选)
|
||
|
||
如需启用 PostgreSQL 持久化:
|
||
|
||
1. 确保本地 PostgreSQL 已启动。
|
||
2. 在 `.env` 中设置:
|
||
|
||
```env
|
||
DB_ENABLED=true
|
||
DB_HOST=localhost
|
||
DB_PORT=5432
|
||
DB_USERNAME=postgres
|
||
DB_PASSWORD=postgres
|
||
DB_DATABASE=college_ai_center
|
||
DB_SYNCHRONIZE=true
|
||
```
|
||
|
||
3. 重启后端:`npm run start:dev`
|
||
|
||
TypeORM 会在启动时自动建表(`DB_SYNCHRONIZE=true`)。
|
||
|
||
### 新模块数据库实体
|
||
|
||
- `exam_records` — 执业医师备考答题记录(`src/modules/exam-prep/entities/exam-record.entity.ts`)
|
||
|
||
---
|
||
|
||
## 新模块 API 端点
|
||
|
||
| 模块 | 端点 | 方法 | 说明 |
|
||
|------|------|------|------|
|
||
| **轮转见习** | `/api/rotation/records` | `GET` | 列出轮转记录 |
|
||
| | `/api/rotation/records` | `POST` | 新增轮转记录 |
|
||
| **技能视频** | `/api/skill-videos` | `GET` | 搜索技能视频 |
|
||
| **执业医师备考** | `/api/exam-prep/questions/generate` | `POST` | 生成试题(支持 `builtin` / `ai` / `auto` 模式) |
|
||
| | `/api/exam-prep/questions/:id/answer` | `POST` | 提交答案 |
|
||
| | `/api/exam-prep/stats` | `GET` | 获取备考统计 |
|
||
| | `/api/exam-prep/history` | `GET` | 查看答题历史 |
|
||
| | `/api/exam-prep/history/:recordId` | `DELETE` | 删除单条记录 |
|
||
| | `/api/exam-prep/history` | `DELETE` | 清空全部记录 |
|
||
| **学术交流** | `/api/academic/records` | `GET` | 列出交流记录 |
|
||
| | `/api/academic/records` | `POST` | 新增交流记录 |
|
||
|
||
---
|
||
|
||
## 学生端前端路由
|
||
|
||
| 路径 | 模块 |
|
||
|------|------|
|
||
| `/student/rotation` | 轮转见习 |
|
||
| `/student/skill-video` | 技能视频 |
|
||
| `/student/exam-prep` | 执业医师备考 |
|
||
| `/student/academic` | 学术交流 |
|
||
|
||
---
|
||
|
||
## 常见问题
|
||
|
||
### 1. 后端启动报错 `找不到模块 @nestjs/common`
|
||
|
||
确保已执行根目录的 `npm install`。
|
||
|
||
### 2. 前端无法连接后端 API
|
||
|
||
确认后端已启动,且前端 `.env` 中(如有)的 API 地址正确。开发模式下前端通过代理或直连 `localhost:3000`。
|
||
|
||
### 3. 数据库表未自动创建
|
||
|
||
检查 `.env` 中 `DB_ENABLED=true` 且 `DB_SYNCHRONIZE=true`,然后重启后端。
|
||
|
||
### 4. 答题历史未持久化
|
||
|
||
确认 `DB_ENABLED=true` 并重启后端;否则数据仅保存在进程内存中,重启即丢失。
|
||
|
||
---
|
||
|
||
## Git 提交
|
||
|
||
```bash
|
||
git add -A
|
||
git commit -m "你的提交信息"
|
||
```
|