Files
QQuiz/README.md

187 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# QQuiz
QQuiz 是一个面向题库管理与刷题训练的全栈应用,支持文档导入、异步解析、题目去重、断点续做、错题本与管理员配置。
## 界面预览
![QQuiz 界面截图](docs/cover.png)
## 核心能力
- 多文件导入与题目去重
- 异步解析进度回传
- 单选、多选、判断、简答题统一管理
- 刷题进度保存与继续作答
- 错题本与错题练习
- 管理员用户管理与系统配置
- 支持 Gemini / OpenAI / Anthropic / Qwen
## 当前架构
- `backend/`FastAPI + SQLAlchemy + Alembic
- `web/`当前主前端Next.js App Router + TypeScript + Tailwind CSS
- `frontend/`:保留中的 legacy Vite 前端,用于单容器兼容路径
说明:
- 分离部署优先使用 `web/`
- 单容器镜像当前仍复用 `frontend/` 构建静态资源
## 快速开始
### 1. 分离部署,推荐
前端运行在 `3000`,后端运行在 `8000`
```bash
cp .env.example .env
docker compose up -d --build
```
访问地址:
- 前端:`http://localhost:3000`
- 后端:`http://localhost:8000`
- 后端健康检查:`http://localhost:8000/health`
### 2. 分离部署 + MySQL
```bash
cp .env.example .env
docker compose -f docker-compose.yml -f docker-compose.mysql.yml up -d --build
```
### 3. 单容器部署
单容器模式会把前端静态资源集成到后端服务中,统一通过 `8000` 提供。
```bash
cp .env.example .env
docker compose -f docker-compose-single.yml up -d --build
```
访问地址:
- 应用:`http://localhost:8000`
- API 文档:`http://localhost:8000/docs`
## 本地开发
### 后端
```bash
cd backend
pip install -r requirements.txt
alembic upgrade head
uvicorn main:app --reload --host 0.0.0.0 --port 8000
```
### 新前端
```bash
cd web
npm install
npm run dev
```
### 旧前端
仅在兼容或迁移场景下需要:
```bash
cd frontend
npm install
npm run dev
```
## 运行要求
- Python 3.11+
- Node.js 18+
- Docker / Docker Compose
## 关键环境变量
| 变量 | 说明 |
| --- | --- |
| `DATABASE_URL` | 数据库连接字符串 |
| `SECRET_KEY` | JWT 密钥,至少 32 位 |
| `ADMIN_PASSWORD` | 默认管理员密码,至少 12 位 |
| `AI_PROVIDER` | `gemini` / `openai` / `anthropic` / `qwen` |
| `GEMINI_API_KEY` | Gemini API Key |
| `OPENAI_API_KEY` | OpenAI API Key |
| `OPENAI_BASE_URL` | OpenAI 或兼容网关地址 |
| `ALLOW_REGISTRATION` | 是否允许注册 |
| `MAX_UPLOAD_SIZE_MB` | 单次上传大小限制 |
| `MAX_DAILY_UPLOADS` | 每日上传次数限制 |
更多示例见 [`.env.example`](.env.example)。
## 目录结构
```text
QQuiz/
├─ backend/ FastAPI 后端
│ ├─ alembic/ 数据库迁移
│ ├─ routers/ API 路由
│ ├─ services/ 业务服务
│ ├─ models.py ORM 模型
│ ├─ schemas.py Pydantic Schema
│ └─ main.py 应用入口
├─ web/ Next.js 前端
│ ├─ src/app/ App Router 页面与 API Route
│ ├─ src/components/ UI 与业务组件
│ └─ src/lib/ 前端 API、鉴权、工具
├─ frontend/ Legacy Vite 前端
├─ docs/ 部署、审计与截图
├─ test_data/ 示例题库文件
├─ docker-compose.yml 前后端分离部署
├─ docker-compose.mysql.yml MySQL overlay
├─ docker-compose-single.yml 单容器部署
└─ Dockerfile 单容器镜像构建
```
## 技术栈
### 后端
- FastAPI
- SQLAlchemy 2.x
- Alembic
- SQLite / MySQL
- httpx
- OpenAI / Anthropic SDK
### 前端
- Next.js 14 App Router
- React 18
- TypeScript
- Tailwind CSS
- TanStack Query
- Radix UI / shadcn 风格组件
## 构建检查
常用检查命令:
```bash
cd web && npm run build
docker compose build backend frontend
```
仓库当前没有完整自动化测试套件,提交前至少建议手动验证:
- 登录 / 退出
- 创建题库 / 上传文档 / 查看解析进度
- 刷题与错题加入
- 管理员用户管理与系统设置
- 大数据量列表分页
## 开源协议
本项目采用 [MIT License](LICENSE)。