From 31916e68a6d3608837686e75d841eeb642bd8cbe Mon Sep 17 00:00:00 2001 From: handsomezhuzhu <2658601135@qq.com> Date: Fri, 17 Apr 2026 19:48:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=96=87=E6=A1=A3=E4=B8=8E?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E8=BF=81=E7=A7=BB=EF=BC=8C=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E5=BC=80=E6=BA=90=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 4 - .github/workflows/docker-publish.yml | 22 +- .gitignore | 3 + AGENTS.md | 34 + LICENSE | 21 + README.md | 377 ++-- backend/Dockerfile | 29 +- backend/routers/admin.py | 129 +- backend/routers/exam.py | 55 +- backend/schemas.py | 45 +- backend/services/llm_service.py | 26 +- docker-compose-single.yml | 3 +- docker-compose.mysql.yml | 29 + docker-compose.yml | 54 +- docs/PLAN.md | 86 + docs/TASKS.md | 92 + docs/audit/architecture.md | 70 + docs/audit/backend-findings.md | 86 + docs/audit/deployment-findings.md | 49 + docs/audit/frontend-migration.md | 70 + docs/cover.png | Bin 0 -> 380032 bytes frontend/index.html | 8 - frontend/src/api/client.js | 80 +- frontend/src/context/AuthContext.jsx | 12 +- frontend/src/pages/ExamDetail.jsx | 23 +- frontend/src/pages/Login.jsx | 106 +- frontend/src/pages/QuestionBank.jsx | 24 +- frontend/vite.config.js | 10 +- scripts/smoke_e2e.ps1 | 225 ++ web/.dockerignore | 5 + web/.env.example | 1 + web/Dockerfile | 33 + web/README.md | 15 + web/components.json | 18 + web/next-env.d.ts | 5 + web/next.config.mjs | 6 + web/package-lock.json | 1817 +++++++++++++++++ web/package.json | 34 + web/postcss.config.mjs | 6 + web/src/app/(app)/admin/page.tsx | 44 + web/src/app/(app)/admin/settings/page.tsx | 17 + web/src/app/(app)/dashboard/page.tsx | 107 + web/src/app/(app)/exams/[examId]/page.tsx | 19 + web/src/app/(app)/exams/page.tsx | 28 + web/src/app/(app)/layout.tsx | 29 + web/src/app/(app)/mistake-quiz/page.tsx | 11 + web/src/app/(app)/mistakes/page.tsx | 28 + web/src/app/(app)/questions/page.tsx | 43 + web/src/app/(app)/quiz/[examId]/page.tsx | 15 + web/src/app/(auth)/login/page.tsx | 111 + web/src/app/(auth)/register/page.tsx | 94 + web/src/app/api/auth/login/route.ts | 37 + web/src/app/api/auth/logout/route.ts | 17 + web/src/app/api/auth/me/route.ts | 30 + .../app/api/exams/[examId]/progress/route.ts | 42 + web/src/app/api/proxy/[...path]/route.ts | 82 + web/src/app/globals.css | 47 + web/src/app/layout.tsx | 27 + web/src/app/loading.tsx | 7 + web/src/app/not-found.tsx | 24 + web/src/app/page.tsx | 7 + web/src/components/admin/settings-panel.tsx | 186 ++ .../admin/user-management-panel.tsx | 358 ++++ web/src/components/app-shell/app-sidebar.tsx | 77 + .../app-shell/feature-placeholder.tsx | 65 + .../components/app-shell/logout-button.tsx | 33 + web/src/components/app-shell/page-header.tsx | 27 + web/src/components/app-shell/stat-card.tsx | 38 + web/src/components/app-shell/status-badge.tsx | 15 + .../components/exams/exam-detail-client.tsx | 232 +++ .../components/exams/exams-page-client.tsx | 219 ++ .../mistakes/mistake-list-client.tsx | 143 ++ .../practice/mistake-practice-client.tsx | 263 +++ .../practice/quiz-player-client.tsx | 287 +++ .../components/providers/query-provider.tsx | 22 + .../components/questions/question-list.tsx | 73 + web/src/components/ui/badge.tsx | 33 + web/src/components/ui/button.tsx | 54 + web/src/components/ui/card.tsx | 68 + web/src/components/ui/input.tsx | 22 + web/src/components/ui/pagination-controls.tsx | 138 ++ web/src/components/ui/separator.tsx | 26 + web/src/lib/api/browser.ts | 57 + web/src/lib/api/config.ts | 23 + web/src/lib/api/server.ts | 50 + web/src/lib/auth/guards.ts | 21 + web/src/lib/auth/session.ts | 17 + web/src/lib/formatters.ts | 50 + web/src/lib/pagination.ts | 41 + web/src/lib/types.ts | 149 ++ web/src/lib/utils.ts | 6 + web/src/middleware.ts | 31 + web/tailwind.config.ts | 72 + web/tsconfig.json | 25 + 94 files changed, 7019 insertions(+), 480 deletions(-) create mode 100644 AGENTS.md create mode 100644 LICENSE create mode 100644 docker-compose.mysql.yml create mode 100644 docs/PLAN.md create mode 100644 docs/TASKS.md create mode 100644 docs/audit/architecture.md create mode 100644 docs/audit/backend-findings.md create mode 100644 docs/audit/deployment-findings.md create mode 100644 docs/audit/frontend-migration.md create mode 100644 docs/cover.png create mode 100644 scripts/smoke_e2e.ps1 create mode 100644 web/.dockerignore create mode 100644 web/.env.example create mode 100644 web/Dockerfile create mode 100644 web/README.md create mode 100644 web/components.json create mode 100644 web/next-env.d.ts create mode 100644 web/next.config.mjs create mode 100644 web/package-lock.json create mode 100644 web/package.json create mode 100644 web/postcss.config.mjs create mode 100644 web/src/app/(app)/admin/page.tsx create mode 100644 web/src/app/(app)/admin/settings/page.tsx create mode 100644 web/src/app/(app)/dashboard/page.tsx create mode 100644 web/src/app/(app)/exams/[examId]/page.tsx create mode 100644 web/src/app/(app)/exams/page.tsx create mode 100644 web/src/app/(app)/layout.tsx create mode 100644 web/src/app/(app)/mistake-quiz/page.tsx create mode 100644 web/src/app/(app)/mistakes/page.tsx create mode 100644 web/src/app/(app)/questions/page.tsx create mode 100644 web/src/app/(app)/quiz/[examId]/page.tsx create mode 100644 web/src/app/(auth)/login/page.tsx create mode 100644 web/src/app/(auth)/register/page.tsx create mode 100644 web/src/app/api/auth/login/route.ts create mode 100644 web/src/app/api/auth/logout/route.ts create mode 100644 web/src/app/api/auth/me/route.ts create mode 100644 web/src/app/api/exams/[examId]/progress/route.ts create mode 100644 web/src/app/api/proxy/[...path]/route.ts create mode 100644 web/src/app/globals.css create mode 100644 web/src/app/layout.tsx create mode 100644 web/src/app/loading.tsx create mode 100644 web/src/app/not-found.tsx create mode 100644 web/src/app/page.tsx create mode 100644 web/src/components/admin/settings-panel.tsx create mode 100644 web/src/components/admin/user-management-panel.tsx create mode 100644 web/src/components/app-shell/app-sidebar.tsx create mode 100644 web/src/components/app-shell/feature-placeholder.tsx create mode 100644 web/src/components/app-shell/logout-button.tsx create mode 100644 web/src/components/app-shell/page-header.tsx create mode 100644 web/src/components/app-shell/stat-card.tsx create mode 100644 web/src/components/app-shell/status-badge.tsx create mode 100644 web/src/components/exams/exam-detail-client.tsx create mode 100644 web/src/components/exams/exams-page-client.tsx create mode 100644 web/src/components/mistakes/mistake-list-client.tsx create mode 100644 web/src/components/practice/mistake-practice-client.tsx create mode 100644 web/src/components/practice/quiz-player-client.tsx create mode 100644 web/src/components/providers/query-provider.tsx create mode 100644 web/src/components/questions/question-list.tsx create mode 100644 web/src/components/ui/badge.tsx create mode 100644 web/src/components/ui/button.tsx create mode 100644 web/src/components/ui/card.tsx create mode 100644 web/src/components/ui/input.tsx create mode 100644 web/src/components/ui/pagination-controls.tsx create mode 100644 web/src/components/ui/separator.tsx create mode 100644 web/src/lib/api/browser.ts create mode 100644 web/src/lib/api/config.ts create mode 100644 web/src/lib/api/server.ts create mode 100644 web/src/lib/auth/guards.ts create mode 100644 web/src/lib/auth/session.ts create mode 100644 web/src/lib/formatters.ts create mode 100644 web/src/lib/pagination.ts create mode 100644 web/src/lib/types.ts create mode 100644 web/src/lib/utils.ts create mode 100644 web/src/middleware.ts create mode 100644 web/tailwind.config.ts create mode 100644 web/tsconfig.json diff --git a/.env.example b/.env.example index 70e2275..250549f 100644 --- a/.env.example +++ b/.env.example @@ -52,7 +52,3 @@ CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000 # Upload Directory UPLOAD_DIR=./uploads - -# ESA Human Verification -VITE_ESA_PREFIX= -VITE_ESA_SCENE_ID= diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 57a2c32..e2687f0 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -1,4 +1,4 @@ -name: Build and Publish Docker Image +name: Build and Publish Docker Images on: push: @@ -18,6 +18,15 @@ jobs: permissions: contents: read packages: write + strategy: + matrix: + include: + - image_suffix: backend + context: ./backend + file: ./backend/Dockerfile + - image_suffix: frontend + context: ./web + file: ./web/Dockerfile steps: - name: Checkout repository @@ -37,7 +46,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-${{ matrix.image_suffix }} tags: | type=ref,event=branch type=semver,pattern={{version}} @@ -45,16 +54,17 @@ jobs: type=raw,value=latest,enable={{is_default_branch}} - name: Build and push Docker image + id: build uses: docker/build-push-action@v5 with: - context: . - file: ./Dockerfile + context: ${{ matrix.context }} + file: ${{ matrix.file }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha - cache-to: type=gha,mode=max + cache-to: type=gha,mode=max,scope=${{ matrix.image_suffix }} platforms: linux/amd64,linux/arm64 - name: Image digest - run: echo "Image pushed with digest ${{ steps.build-and-push.outputs.digest }}" + run: echo "Image pushed with digest ${{ steps.build.outputs.digest }}" diff --git a/.gitignore b/.gitignore index 4f510a9..3d49bab 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,9 @@ yarn-error.log # Build frontend/build/ frontend/dist/ +.next/ +web/.next/ +web/out/ # Testing .coverage diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..6c99ff3 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,34 @@ +# Repository Guidelines + +## Project Structure & Module Organization +- `backend/`: FastAPI API. Keep HTTP entrypoints in `routers/`, reusable business logic in `services/`, database definitions in `models.py`, request/response schemas in `schemas.py`, and migrations in `alembic/`. +- `frontend/`: React 18 + Vite client. Put route screens in `src/pages/`, shared UI in `src/components/`, auth state in `src/context/`, API wrappers in `src/api/`, and helpers in `src/utils/`. +- `docs/` holds deployment and architecture notes, `scripts/run_local.sh` bootstraps local Linux/macOS development, `test_data/` contains sample question files, and `.github/workflows/docker-publish.yml` publishes container images. + +## Build, Test, and Development Commands +- `docker compose up -d --build`: start MySQL, backend on `:8000`, and frontend on `:3000`. +- `docker compose -f docker-compose-single.yml up -d --build`: start the single-container SQLite deployment. +- `cd backend && pip install -r requirements.txt && alembic upgrade head && uvicorn main:app --reload --host 0.0.0.0 --port 8000`: run the API locally. +- `cd frontend && npm install && npm run dev`: start the Vite dev server. +- `cd frontend && npm run build`: create a production frontend bundle. + +## Coding Style & Naming Conventions +- Python uses 4-space indentation, `snake_case` for modules/functions, and `PascalCase` for ORM or Pydantic classes. +- React files use `PascalCase.jsx` for pages/components and `camelCase` for state, helpers, and API wrappers. +- Keep route handlers thin: validation in schemas, orchestration in routers, reusable logic in `backend/services/`. +- No formatter or lint script is enforced today, so match surrounding style before making broad formatting changes. + +## Testing Guidelines +- The repository currently has no committed automated test suite or coverage gate. +- Before opening a PR, smoke-test auth, exam creation/upload, parsing progress, quiz playback, mistake review, and admin settings. +- Use `test_data/sample_questions*.txt` for parser and import checks. +- If you add tests, place backend tests under `backend/tests/test_*.py` and frontend tests under `frontend/src/__tests__/`. + +## Commit & Pull Request Guidelines +- Recent history favors short, focused subjects, often imperative and sometimes Chinese, such as `安全修复和管理员账号密码自定义`. +- Keep each commit scoped to one change. PRs should include a summary, affected areas, config or migration notes, linked issues, and UI screenshots or GIFs for frontend changes. + +## Security & Configuration Tips +- Copy `.env.example` to `.env`; never commit real API keys or passwords. +- `SECRET_KEY` must be at least 32 characters, and `ADMIN_PASSWORD` at least 12. +- Update `.env.example` and relevant docs whenever configuration keys or security-sensitive defaults change. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..edd3fe7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 handsomezhuzhu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 76e5e56..8deef42 100644 --- a/README.md +++ b/README.md @@ -1,281 +1,186 @@ -# QQuiz - 智能刷题与题库管理平台 +# QQuiz -QQuiz 是一个支持 Docker/源码双模部署的智能刷题平台,核心功能包括多文件上传、自动去重、异步解析、断点续做和错题本管理。 +QQuiz 是一个面向题库管理与刷题训练的全栈应用,支持文档导入、异步解析、题目去重、断点续做、错题本与管理员配置。 -## 功能特性 +## 界面预览 -- 📚 **多文件上传与去重**: 支持向同一题库追加文档,自动识别并过滤重复题目 -- 🤖 **AI 智能解析**: 支持 Google Gemini (推荐) / OpenAI / Anthropic / Qwen 多种 AI 提供商 -- 📄 **原生 PDF 理解**: Gemini 支持直接处理 PDF(最多1000页),完整保留图片、表格、公式等内容 -- 🎓 **AI 参考答案**: 对于没有提供答案的题目,自动生成 AI 参考答案 -- 📊 **断点续做**: 自动记录刷题进度,随时继续 -- ❌ **错题本管理**: 自动收集错题,支持手动添加/移除 -- 🎯 **多题型支持**: 单选、多选、判断、简答 -- 🔐 **权限管理**: 管理员配置、用户隔离 -- 📱 **移动端优先**: 完美适配手机端 +![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. 分离部署,推荐 -直接使用 GitHub 自动构建的镜像,无需等待本地构建: +前端运行在 `3000`,后端运行在 `8000`。 ```bash -# 1. 拉取最新镜像 -docker pull ghcr.io/handsomezhuzhu/qquiz:latest - -# 2. 配置环境变量 cp .env.example .env -# 编辑 .env,填入你的 API Key -# 3. 运行容器 -docker run -d \ - --name qquiz \ - -p 8000:8000 \ - -v $(pwd)/qquiz_data:/app/qquiz_data \ - --env-file .env \ - ghcr.io/handsomezhuzhu/qquiz:latest - -# 4. 访问应用: http://localhost:8000 +docker compose up -d --build ``` -**镜像说明:** -- **镜像地址**: `ghcr.io/handsomezhuzhu/qquiz:latest` -- **构建来源**: GitHub Actions 自动构建,每次 push 到 main 分支自动更新 -- **架构支持**: linux/amd64, linux/arm64(支持树莓派、Apple Silicon 等) -- **大小**: 约 400-500MB(包含前后端完整运行环境) -- **标签说明**: - - `latest`: 最新主分支版本 - - `v1.0.0`: 特定版本号(如果有 tag) +访问地址: -**数据持久化:** 使用 `-v` 参数挂载 `qquiz_data` 目录,包含 SQLite 数据库和上传文件,确保数据不会丢失。 +- 前端:`http://localhost:3000` +- 后端:`http://localhost:8000` +- 后端健康检查:`http://localhost:8000/health` -### 单容器部署(自行构建) - -从源码构建,一个容器包含前后端和 SQLite 数据库: +### 2. 分离部署 + MySQL ```bash -# 1. 配置环境变量(必须提供强密码和密钥) cp .env.example .env -# 编辑 .env,填入至少 32 位的 SECRET_KEY 和至少 12 位的 ADMIN_PASSWORD(建议使用随机生成值) -# 2. 启动服务(未设置强密码/密钥会直接报错终止) -SECRET_KEY=$(openssl rand -base64 48) \ -ADMIN_PASSWORD=$(openssl rand -base64 16) \ -docker-compose -f docker-compose-single.yml up -d - -# 3. 访问应用: http://localhost:8000 -# API 文档: http://localhost:8000/docs +docker compose -f docker-compose.yml -f docker-compose.mysql.yml up -d --build ``` -### 传统部署(3 个容器) +### 3. 单容器部署 -前后端分离 + MySQL: +单容器模式会把前端静态资源集成到后端服务中,统一通过 `8000` 提供。 ```bash -# 启动服务(建议直接在命令行生成强密钥和管理员密码) -SECRET_KEY=$(openssl rand -base64 48) \ -ADMIN_PASSWORD=$(openssl rand -base64 16) \ -docker-compose up -d +cp .env.example .env -# 前端: http://localhost:3000 -# 后端: http://localhost:8000 +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+ -- MySQL 8.0+ 或 Docker (用于运行 MySQL) +- Docker / Docker Compose -**Linux/macOS 用户:** -```bash -# 1. 配置环境变量 -cp .env.example .env -# 编辑 .env,修改 DATABASE_URL 为本地数据库地址 +## 关键环境变量 -# 2. 启动 MySQL -# macOS: brew services start mysql -# Linux: sudo systemctl start mysql +| 变量 | 说明 | +| --- | --- | +| `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` | 每日上传次数限制 | -# 3. 运行启动脚本 -chmod +x scripts/run_local.sh -./scripts/run_local.sh -``` +更多示例见 [`.env.example`](.env.example)。 -**MySQL 安装指南:** 详见 [docs/MYSQL_SETUP.md](docs/MYSQL_SETUP.md) +## 目录结构 -## GitHub Actions 自动构建设置 - -如果你 fork 了本项目并想启用自动构建 Docker 镜像功能: - -1. **启用 GitHub Actions**: - - 进入你的仓库 Settings → Actions → General - - 确保 "Actions permissions" 设置为 "Allow all actions" - -2. **启用 Packages 写入权限**: - - Settings → Actions → General - - 找到 "Workflow permissions" - - 选择 "Read and write permissions" - - 勾选 "Allow GitHub Actions to create and approve pull requests" - -3. **触发构建**: - - 推送代码到 `main` 分支会自动触发构建 - - 或者创建 tag(如 `v1.0.0`)会构建带版本号的镜像 - - 也可以在 Actions 页面手动触发 "Build and Publish Docker Image" workflow - -4. **查看构建的镜像**: - - 构建完成后,镜像会自动发布到 `ghcr.io/handsomezhuzhu/qquiz` - - 在仓库主页右侧 "Packages" 可以看到已发布的镜像 - - 镜像默认是私有的,如需公开:进入 Package 页面 → Package settings → Change visibility - -**镜像地址:** -```bash -# 拉取最新镜像 -docker pull ghcr.io/handsomezhuzhu/qquiz:latest -``` - -## 默认账户 - -**管理员账户:** -- 用户名: `admin` -- 密码: 取自环境变量 `ADMIN_PASSWORD`(必须至少 12 位,建议随机生成) - -⚠️ **重要**: 在部署前就必须设置强管理员密码;如果需要轮换密码,请更新环境变量后重启服务。 - -## 项目结构 - -``` +```text QQuiz/ -├── backend/ # FastAPI 后端 -│ ├── alembic/ # 数据库迁移 -│ ├── routers/ # API 路由 -│ ├── services/ # 业务逻辑 -│ ├── models.py # 数据模型 -│ ├── database.py # 数据库配置 -│ ├── main.py # 应用入口 -│ └── requirements.txt # Python 依赖 -├── frontend/ # React 前端 -│ ├── src/ -│ │ ├── api/ # API 客户端 -│ │ ├── pages/ # 页面组件 -│ │ ├── components/ # 通用组件 -│ │ └── App.jsx # 应用入口 -│ ├── package.json # Node 依赖 -│ └── vite.config.js # Vite 配置 -├── scripts/ # 部署和启动脚本 -│ └── run_local.sh # Linux/macOS 启动脚本 -├── docs/ # 文档目录 -│ ├── MYSQL_SETUP.md # MySQL 安装配置指南 -│ └── PROJECT_STRUCTURE.md # 项目架构详解 -├── test_data/ # 测试数据 -│ └── sample_questions.txt # 示例题目 -├── docker-compose.yml # Docker 编排 -├── .env.example # 环境变量模板 -└── README.md # 项目说明 +├─ 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 单容器镜像构建 ``` -## 核心业务流程 - -### 1. 创建题库 -用户首次上传文档时,创建新的 Exam (题库容器) - -### 2. 追加文档 -在已有题库详情页点击 "添加题目文档",上传新文件 - -### 3. 去重逻辑 -- 对题目内容进行标准化处理 (去空格、标点、转小写) -- 计算 MD5 Hash -- 仅在当前题库范围内查询去重 -- 仅插入 Hash 不存在的题目 - -### 4. 异步处理 -- 后台任务处理 AI 解析 -- 状态: `pending` → `processing` → `ready` / `failed` -- 前端轮询状态,自动刷新 - -### 5. 刷题体验 -- 基于 `current_index` 实现断点续做 -- 错题自动加入错题本 -- 简答题 AI 评分 - -## 环境变量说明 - -| 变量 | 说明 | 默认值 | -|------|------|--------| -| `DATABASE_URL` | 数据库连接字符串 | - | -| `SECRET_KEY` | JWT 密钥(必须至少 32 位随机字符串) | - | -| `ADMIN_PASSWORD` | 默认管理员密码(必须至少 12 位,建议随机生成) | - | -| `AI_PROVIDER` | AI 提供商 (gemini/openai/anthropic/qwen) | gemini | -| `GEMINI_API_KEY` | Google Gemini API 密钥 | - | -| `GEMINI_BASE_URL` | Gemini API 地址(可选,支持代理) | https://generativelanguage.googleapis.com | -| `GEMINI_MODEL` | Gemini 模型 | gemini-2.0-flash-exp | -| `OPENAI_API_KEY` | OpenAI API 密钥 | - | -| `OPENAI_BASE_URL` | OpenAI API 地址 | https://api.openai.com/v1 | -| `OPENAI_MODEL` | OpenAI 模型 | gpt-4o-mini | -| `ANTHROPIC_API_KEY` | Anthropic API 密钥 | - | -| `ANTHROPIC_MODEL` | Anthropic 模型 | claude-3-haiku-20240307 | -| `QWEN_API_KEY` | 通义千问 API 密钥 | - | -| `QWEN_BASE_URL` | 通义千问 API 地址 | https://dashscope.aliyuncs.com/compatible-mode/v1 | -| `QWEN_MODEL` | 通义千问模型 | qwen-plus | -| `ALLOW_REGISTRATION` | 是否允许注册 | true | -| `MAX_UPLOAD_SIZE_MB` | 最大上传文件大小 (MB) | 10 | -| `MAX_DAILY_UPLOADS` | 每日上传次数限制 | 20 | - -### AI 提供商对比 - -| 提供商 | PDF 原生支持 | 文本解析 | 推荐度 | 说明 | -|--------|--------------|----------|--------|------| -| **Google Gemini** | ✅ | ✅ | ⭐⭐⭐⭐⭐ | 支持原生 PDF(最多1000页),保留图片、表格、公式 | -| OpenAI | ❌ | ✅ | ⭐⭐⭐⭐ | 仅文本提取,PDF 会丢失格式和图片 | -| Anthropic | ❌ | ✅ | ⭐⭐⭐⭐ | 仅文本提取,PDF 会丢失格式和图片 | -| Qwen (通义千问) | ❌ | ✅ | ⭐⭐⭐ | 仅文本提取,PDF 会丢失格式和图片 | - -**推荐使用 Gemini**:如果你的题库包含 PDF 文件(特别是含有图片、公式、表格的学科试卷),强烈推荐使用 Gemini。 - -### 如何获取 API Key - -- **Google Gemini**: https://aistudio.google.com/apikey (免费额度充足) -- **OpenAI**: https://platform.openai.com/api-keys -- **Anthropic**: https://console.anthropic.com/settings/keys -- **Qwen (通义千问)**: https://dashscope.console.aliyun.com/apiKey - -### AI 配置方式 - -QQuiz 支持两种配置方式: - -1. **环境变量配置** (`.env` 文件):适合 Docker 部署和开发环境 -2. **数据库配置** (管理员后台):适合生产环境,支持在线修改,无需重启服务 - -**推荐流程**:首次部署使用环境变量,部署成功后通过管理员后台修改配置。 - -**Gemini 自定义代理**: 如果需要使用 Key 轮训服务或代理,可以在管理员后台配置 `GEMINI_BASE_URL`,支持自定义 Gemini API 地址。 - ## 技术栈 -**后端:** -- FastAPI - 现代化 Python Web 框架 -- SQLAlchemy 2.0 - 异步 ORM -- Alembic - 数据库迁移 -- MySQL 8.0 - 数据库 -- aiomysql - MySQL 异步驱动 -- Pydantic - 数据验证 +### 后端 -**前端:** -- React 18 - UI 框架 -- Vite - 构建工具 -- Tailwind CSS - 样式框架 -- React Router - 路由 -- Axios - HTTP 客户端 +- FastAPI +- SQLAlchemy 2.x +- Alembic +- SQLite / MySQL +- httpx +- OpenAI / Anthropic SDK -## 开发进度 +### 前端 -- [x] **Step 1**: Foundation & Models ✅ -- [ ] **Step 2**: Backend Core Logic -- [ ] **Step 3**: Frontend Config & API -- [ ] **Step 4**: Frontend Complex UI +- Next.js 14 App Router +- React 18 +- TypeScript +- Tailwind CSS +- TanStack Query +- Radix UI / shadcn 风格组件 -## License +## 构建检查 -MIT +常用检查命令: + +```bash +cd web && npm run build +docker compose build backend frontend +``` + +仓库当前没有完整自动化测试套件,提交前至少建议手动验证: + +- 登录 / 退出 +- 创建题库 / 上传文档 / 查看解析进度 +- 刷题与错题加入 +- 管理员用户管理与系统设置 +- 大数据量列表分页 + +## 开源协议 + +本项目采用 [MIT License](LICENSE)。 diff --git a/backend/Dockerfile b/backend/Dockerfile index 01cb0d5..27a876e 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,24 +1,35 @@ +FROM python:3.11-slim AS builder + +WORKDIR /app + +# Install build dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + libmagic1 \ + && rm -rf /var/lib/apt/lists/* + +RUN python -m venv /opt/venv +ENV PATH="/opt/venv/bin:$PATH" + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + FROM python:3.11-slim WORKDIR /app -# Install system dependencies (gcc for compiling Python packages) RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ + libmagic1 \ && rm -rf /var/lib/apt/lists/* -# Copy requirements and install Python dependencies -COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt +ENV PATH="/opt/venv/bin:$PATH" +ENV PYTHONUNBUFFERED=1 -# Copy application code +COPY --from=builder /opt/venv /opt/venv COPY . . -# Create uploads directory RUN mkdir -p uploads -# Expose port EXPOSE 8000 -# Run database migrations and start server CMD alembic upgrade head && uvicorn main:app --host 0.0.0.0 --port 8000 diff --git a/backend/routers/admin.py b/backend/routers/admin.py index 2bf2b82..81e7a53 100644 --- a/backend/routers/admin.py +++ b/backend/routers/admin.py @@ -2,7 +2,7 @@ Admin Router - 完备的管理员功能模块 参考 OpenWebUI 设计 """ -from fastapi import APIRouter, Depends, HTTPException, status +from fastapi import APIRouter, Depends, HTTPException, status, Query from fastapi.responses import StreamingResponse, FileResponse from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, func, and_, or_, desc @@ -16,7 +16,8 @@ from database import get_db, engine from models import User, SystemConfig, Exam, Question, UserMistake, ExamStatus from schemas import ( SystemConfigUpdate, SystemConfigResponse, - UserResponse, UserCreate, UserUpdate, UserListResponse + UserResponse, UserCreate, UserUpdate, UserListResponse, + UserPasswordResetRequest, AdminUserSummary ) from services.auth_service import get_current_admin_user @@ -36,6 +37,11 @@ async def get_default_admin_id(db: AsyncSession) -> Optional[int]: return None +async def get_admin_count(db: AsyncSession) -> int: + result = await db.execute(select(func.count(User.id)).where(User.is_admin == True)) + return result.scalar() or 0 + + @router.get("/config", response_model=SystemConfigResponse) async def get_system_config( current_admin: User = Depends(get_current_admin_user), @@ -84,6 +90,9 @@ async def update_system_config( update_data = config_update.dict(exclude_unset=True) for key, value in update_data.items(): + if key.endswith("_api_key") and isinstance(value, str) and "..." in value: + continue + result = await db.execute( select(SystemConfig).where(SystemConfig.key == key) ) @@ -108,9 +117,9 @@ async def update_system_config( @router.get("/users", response_model=UserListResponse) async def get_users( - skip: int = 0, - limit: int = 50, - search: Optional[str] = None, + skip: int = Query(0, ge=0), + limit: int = Query(50, ge=1, le=100), + search: Optional[str] = Query(None, min_length=1, max_length=50), current_admin: User = Depends(get_current_admin_user), db: AsyncSession = Depends(get_db) ): @@ -121,10 +130,11 @@ async def get_users( - search: 搜索关键词(用户名) """ query = select(User) + normalized_search = search.strip() if search else None # 搜索过滤 - if search: - query = query.where(User.username.ilike(f"%{search}%")) + if normalized_search: + query = query.where(User.username.ilike(f"%{normalized_search}%")) # 统计总数 count_query = select(func.count()).select_from(query.subquery()) @@ -136,34 +146,41 @@ async def get_users( result = await db.execute(query) users = result.scalars().all() - # 为每个用户添加统计信息 + user_ids = [user.id for user in users] + exam_count_map = {} + mistake_count_map = {} + + if user_ids: + exam_count_result = await db.execute( + select(Exam.user_id, func.count(Exam.id)) + .where(Exam.user_id.in_(user_ids)) + .group_by(Exam.user_id) + ) + exam_count_map = {user_id: count for user_id, count in exam_count_result.all()} + + mistake_count_result = await db.execute( + select(UserMistake.user_id, func.count(UserMistake.id)) + .where(UserMistake.user_id.in_(user_ids)) + .group_by(UserMistake.user_id) + ) + mistake_count_map = { + user_id: count for user_id, count in mistake_count_result.all() + } + user_list = [] for user in users: - # 统计用户的题库数 - exam_count_query = select(func.count(Exam.id)).where(Exam.user_id == user.id) - exam_result = await db.execute(exam_count_query) - exam_count = exam_result.scalar() + user_list.append( + AdminUserSummary( + id=user.id, + username=user.username, + is_admin=user.is_admin, + created_at=user.created_at, + exam_count=exam_count_map.get(user.id, 0), + mistake_count=mistake_count_map.get(user.id, 0) + ) + ) - # 统计用户的错题数 - mistake_count_query = select(func.count(UserMistake.id)).where(UserMistake.user_id == user.id) - mistake_result = await db.execute(mistake_count_query) - mistake_count = mistake_result.scalar() - - user_list.append({ - "id": user.id, - "username": user.username, - "is_admin": user.is_admin, - "created_at": user.created_at, - "exam_count": exam_count, - "mistake_count": mistake_count - }) - - return { - "users": user_list, - "total": total, - "skip": skip, - "limit": limit - } + return UserListResponse(users=user_list, total=total, skip=skip, limit=limit) @router.post("/users", response_model=UserResponse) @@ -215,7 +232,19 @@ async def update_user( detail="User not found" ) + if user_data.username and user_data.username != user.username: + existing_user_result = await db.execute( + select(User).where(User.username == user_data.username) + ) + existing_user = existing_user_result.scalar_one_or_none() + if existing_user: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="Username already exists" + ) + protected_admin_id = await get_default_admin_id(db) + admin_count = await get_admin_count(db) # 不允许修改默认管理员的管理员状态 if protected_admin_id and user.id == protected_admin_id and user_data.is_admin is not None: @@ -224,6 +253,12 @@ async def update_user( detail="Cannot modify default admin user's admin status" ) + if user.is_admin and user_data.is_admin is False and admin_count <= 1: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail="At least one admin user must remain" + ) + # 更新字段 update_data = user_data.dict(exclude_unset=True) if "password" in update_data: @@ -238,6 +273,29 @@ async def update_user( return user +@router.post("/users/{user_id}/reset-password") +async def reset_user_password( + user_id: int, + payload: UserPasswordResetRequest, + current_admin: User = Depends(get_current_admin_user), + db: AsyncSession = Depends(get_db) +): + """重置用户密码(仅管理员)""" + result = await db.execute(select(User).where(User.id == user_id)) + user = result.scalar_one_or_none() + + if not user: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="User not found" + ) + + user.hashed_password = pwd_context.hash(payload.new_password) + await db.commit() + + return {"message": "Password reset successfully"} + + @router.delete("/users/{user_id}") async def delete_user( user_id: int, @@ -255,6 +313,7 @@ async def delete_user( ) protected_admin_id = await get_default_admin_id(db) + admin_count = await get_admin_count(db) # 不允许删除默认管理员 if protected_admin_id and user.id == protected_admin_id: @@ -270,6 +329,12 @@ async def delete_user( detail="Cannot delete yourself" ) + if user.is_admin and admin_count <= 1: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail="At least one admin user must remain" + ) + await db.delete(user) await db.commit() diff --git a/backend/routers/exam.py b/backend/routers/exam.py index 9223841..b0dac2a 100644 --- a/backend/routers/exam.py +++ b/backend/routers/exam.py @@ -4,7 +4,7 @@ Exam Router - Handles exam creation, file upload, and deduplication from fastapi import APIRouter, Depends, HTTPException, status, UploadFile, File, Form, BackgroundTasks, Request from fastapi.responses import StreamingResponse from sqlalchemy.ext.asyncio import AsyncSession -from sqlalchemy import select, func, and_ +from sqlalchemy import select, func, and_, case from typing import List, Optional from datetime import datetime, timedelta import os @@ -17,7 +17,7 @@ from database import get_db from models import User, Exam, Question, ExamStatus, SystemConfig from schemas import ( ExamCreate, ExamResponse, ExamListResponse, - ExamUploadResponse, ParseResult, QuizProgressUpdate + ExamUploadResponse, ParseResult, QuizProgressUpdate, ExamSummaryResponse ) from services.auth_service import get_current_user from services.document_parser import document_parser @@ -684,6 +684,57 @@ async def get_user_exams( return ExamListResponse(exams=exams, total=total) +@router.get("/summary", response_model=ExamSummaryResponse) +async def get_exam_summary( + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db) +): + """Get aggregated exam statistics for current user.""" + + summary_query = select( + func.count(Exam.id), + func.coalesce(func.sum(Exam.total_questions), 0), + func.coalesce(func.sum(Exam.current_index), 0), + func.coalesce( + func.sum( + case((Exam.status == ExamStatus.PROCESSING, 1), else_=0) + ), + 0 + ), + func.coalesce( + func.sum( + case((Exam.status == ExamStatus.READY, 1), else_=0) + ), + 0 + ), + func.coalesce( + func.sum( + case((Exam.status == ExamStatus.FAILED, 1), else_=0) + ), + 0 + ) + ).where(Exam.user_id == current_user.id) + + result = await db.execute(summary_query) + ( + total_exams, + total_questions, + completed_questions, + processing_exams, + ready_exams, + failed_exams + ) = result.one() + + return ExamSummaryResponse( + total_exams=total_exams or 0, + total_questions=total_questions or 0, + completed_questions=completed_questions or 0, + processing_exams=processing_exams or 0, + ready_exams=ready_exams or 0, + failed_exams=failed_exams or 0 + ) + + @router.get("/{exam_id}", response_model=ExamResponse) async def get_exam_detail( exam_id: int, diff --git a/backend/schemas.py b/backend/schemas.py index 16f8f74..e4d3abb 100644 --- a/backend/schemas.py +++ b/backend/schemas.py @@ -38,6 +38,11 @@ class UserLogin(BaseModel): password: str +class PasswordChangeRequest(BaseModel): + old_password: str = Field(..., min_length=1) + new_password: str = Field(..., min_length=6) + + class Token(BaseModel): access_token: str token_type: str = "bearer" @@ -53,14 +58,23 @@ class UserResponse(BaseModel): from_attributes = True +class AdminUserSummary(UserResponse): + exam_count: int = 0 + mistake_count: int = 0 + + class UserListResponse(BaseModel): """用户列表响应(包含分页信息)""" - users: List[dict] # 包含额外统计信息的用户列表 + users: List[AdminUserSummary] total: int skip: int limit: int +class UserPasswordResetRequest(BaseModel): + new_password: str = Field(..., min_length=6) + + # ============ System Config Schemas ============ class SystemConfigUpdate(BaseModel): allow_registration: Optional[bool] = None @@ -124,6 +138,15 @@ class ExamListResponse(BaseModel): total: int +class ExamSummaryResponse(BaseModel): + total_exams: int + total_questions: int + completed_questions: int + processing_exams: int + ready_exams: int + failed_exams: int + + class ExamUploadResponse(BaseModel): exam_id: int title: str @@ -140,19 +163,31 @@ class ParseResult(BaseModel): # ============ Question Schemas ============ -class QuestionBase(BaseModel): +class QuestionPublicBase(BaseModel): content: str type: QuestionType options: Optional[List[str]] = None - answer: str analysis: Optional[str] = None +class QuestionBase(QuestionPublicBase): + answer: str + + class QuestionCreate(QuestionBase): exam_id: int -class QuestionResponse(QuestionBase): +class QuestionResponse(QuestionPublicBase): + id: int + exam_id: int + created_at: datetime + + class Config: + from_attributes = True + + +class QuestionWithAnswerResponse(QuestionBase): id: int exam_id: int created_at: datetime @@ -194,7 +229,7 @@ class MistakeResponse(BaseModel): id: int user_id: int question_id: int - question: QuestionResponse + question: QuestionWithAnswerResponse created_at: datetime class Config: diff --git a/backend/services/llm_service.py b/backend/services/llm_service.py index 5554e3d..2411e98 100644 --- a/backend/services/llm_service.py +++ b/backend/services/llm_service.py @@ -15,6 +15,25 @@ from utils import calculate_content_hash class LLMService: """Service for interacting with various LLM providers""" + @staticmethod + def _normalize_openai_base_url(base_url: Optional[str], default: str) -> str: + normalized = (base_url or default).rstrip("/") + if normalized.endswith("/v1"): + return normalized + + if normalized.count("/") <= 2: + return f"{normalized}/v1" + + return normalized + + @staticmethod + def _openai_compat_headers() -> Dict[str, str]: + """ + Some OpenAI-compatible gateways block the default OpenAI SDK user agent. + Use a neutral UA so requests behave like a generic HTTP client. + """ + return {"User-Agent": "QQuiz/1.0"} + def __init__(self, config: Optional[Dict[str, str]] = None): """ Initialize LLM Service with optional configuration. @@ -28,7 +47,10 @@ class LLMService: if self.provider == "openai": api_key = (config or {}).get("openai_api_key") or os.getenv("OPENAI_API_KEY") - base_url = (config or {}).get("openai_base_url") or os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1") + base_url = self._normalize_openai_base_url( + (config or {}).get("openai_base_url") or os.getenv("OPENAI_BASE_URL"), + "https://api.openai.com/v1" + ) self.model = (config or {}).get("openai_model") or os.getenv("OPENAI_MODEL", "gpt-4o-mini") if not api_key: @@ -37,6 +59,7 @@ class LLMService: self.client = AsyncOpenAI( api_key=api_key, base_url=base_url, + default_headers=self._openai_compat_headers(), timeout=120.0, # 增加超时时间到 120 秒 max_retries=3 # 自动重试 3 次 ) @@ -69,6 +92,7 @@ class LLMService: self.client = AsyncOpenAI( api_key=api_key, base_url=base_url, + default_headers=self._openai_compat_headers(), timeout=120.0, # 增加超时时间到 120 秒 max_retries=3 # 自动重试 3 次 ) diff --git a/docker-compose-single.yml b/docker-compose-single.yml index 17a096d..799ee1a 100644 --- a/docker-compose-single.yml +++ b/docker-compose-single.yml @@ -16,6 +16,7 @@ services: environment: # 数据库配置(SQLite 默认,使用持久化卷) - DATABASE_URL=sqlite+aiosqlite:////app/data/qquiz.db + - UPLOAD_DIR=/app/uploads volumes: # 持久化数据卷 @@ -25,7 +26,7 @@ services: restart: unless-stopped healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8000/health"] + test: ["CMD", "python", "-c", "import sys, urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=5); sys.exit(0)"] interval: 30s timeout: 10s retries: 3 diff --git a/docker-compose.mysql.yml b/docker-compose.mysql.yml new file mode 100644 index 0000000..08ebb43 --- /dev/null +++ b/docker-compose.mysql.yml @@ -0,0 +1,29 @@ +services: + mysql: + image: mysql:8.0 + container_name: qquiz_mysql + environment: + MYSQL_ROOT_PASSWORD: root_password + MYSQL_DATABASE: qquiz_db + MYSQL_USER: qquiz + MYSQL_PASSWORD: qquiz_password + volumes: + - mysql_data:/var/lib/mysql + ports: + - "3306:3306" + command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "qquiz", "-pqquiz_password"] + interval: 10s + timeout: 5s + retries: 5 + + backend: + environment: + - DATABASE_URL=mysql+aiomysql://qquiz:qquiz_password@mysql:3306/qquiz_db + depends_on: + mysql: + condition: service_healthy + +volumes: + mysql_data: diff --git a/docker-compose.yml b/docker-compose.yml index 535a97e..c21d5c2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,61 +1,47 @@ services: - mysql: - image: mysql:8.0 - container_name: qquiz_mysql - environment: - MYSQL_ROOT_PASSWORD: root_password - MYSQL_DATABASE: qquiz_db - MYSQL_USER: qquiz - MYSQL_PASSWORD: qquiz_password - volumes: - - mysql_data:/var/lib/mysql - ports: - - "3306:3306" - command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci - healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "qquiz", "-pqquiz_password"] - interval: 10s - timeout: 5s - retries: 5 - backend: build: context: ./backend dockerfile: Dockerfile container_name: qquiz_backend environment: - - DATABASE_URL=mysql+aiomysql://qquiz:qquiz_password@mysql:3306/qquiz_db + - DATABASE_URL=sqlite+aiosqlite:////app/data/qquiz.db - SECRET_KEY=${SECRET_KEY:?Set SECRET_KEY to a random string of at least 32 characters} - ADMIN_PASSWORD=${ADMIN_PASSWORD:?Set ADMIN_PASSWORD to a strong password of at least 12 characters} + - UPLOAD_DIR=/app/uploads env_file: - .env volumes: - - ./backend:/app + - sqlite_data:/app/data - upload_files:/app/uploads ports: - "8000:8000" - depends_on: - mysql: - condition: service_healthy - command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload + healthcheck: + test: ["CMD", "python", "-c", "import sys, urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=5); sys.exit(0)"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 40s frontend: build: - context: ./frontend + context: ./web dockerfile: Dockerfile container_name: qquiz_frontend - volumes: - - ./frontend:/app - - /app/node_modules ports: - "3000:3000" environment: - - VITE_API_URL=/api - - REACT_APP_API_URL=http://backend:8000 + - API_BASE_URL=http://backend:8000 depends_on: - - backend - command: npm start + backend: + condition: service_started + healthcheck: + test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/login').then((r) => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 40s volumes: - mysql_data: + sqlite_data: upload_files: diff --git a/docs/PLAN.md b/docs/PLAN.md new file mode 100644 index 0000000..3c11c36 --- /dev/null +++ b/docs/PLAN.md @@ -0,0 +1,86 @@ +# QQuiz Execution Plan + +更新时间:2026-04-17 + +## 目标 + +把当前项目推进到可以持续开发和稳定验收的状态,重点落实: + +1. 默认 SQLite,兼容 MySQL +2. 前端界面简洁、可直接操作、少说明文字 +3. 用户管理达到可上市产品的基础要求 +4. push 后 GitHub 自动构建镜像 +5. 逐步完成旧 Vite 前端到新 Next 前端的替换 + +## 已完成的代码级工作 + +- 默认 Docker 拓扑已切到 SQLite +- MySQL 兼容拓扑已拆到 `docker-compose.mysql.yml` +- 新前端容器已接入并替换 Docker 默认前端 +- 管理员用户管理已经接入真实接口 +- 管理员设置页已经接入真实配置接口 +- 侧边栏选中态 bug 已修复 +- 新前端色彩已收敛为更简洁的产品风格 + +## 当前代码扫描后的主要问题 + +### 后端 + +1. 数据库迁移体系仍然不完整 +2. `LLMService` 仍存在启动期副作用 +3. 文档解析任务仍依赖进程内后台任务 +4. 题库导入并发与去重约束还没彻底补完 +5. 管理模块还缺用户状态、审计、批量能力 + +### 前端 + +1. Exam detail / Question / Mistake / Quiz 仍是占位或半占位页面 +2. 部分页面仍有旧迁移骨架内容,需要继续清理 +3. 确认类交互还没统一替换为更正式的对话框方案 +4. 视觉层还需要统一列表、表单、状态、分页组件 + +### 部署与文档 + +1. Compose 仍缺 dev/prod 分离 +2. 文档体系仍需把运行方式统一到 SQLite 默认 + MySQL 兼容 +3. CI 只有主干镜像构建,还缺 PR 验证与 smoke test + +## 后续执行顺序 + +### 第一阶段:后端稳定性 + +1. Alembic 基线迁移 +2. 去掉 `create_all` 正式职责 +3. 去掉 LLM import side effect +4. 统一事务边界 +5. 补用户状态字段与审计日志模型 + +### 第二阶段:前端业务页 + +1. 接通 `exams/[examId]` +2. 接通 `questions` +3. 接通 `mistakes` +4. 接通 `quiz/[examId]` +5. 接通 `mistake-quiz` + +### 第三阶段:用户管理产品化 + +1. 用户状态管理 +2. 审计日志 +3. 批量操作 +4. 更完整的密码与安全策略 + +### 第四阶段:工程化 + +1. Compose dev/prod 分离 +2. PR workflow +3. SQLite/MySQL 双栈 smoke +4. 文档统一 + +## 前端视觉要求 + +1. 主色:深蓝,作为动作与选中态 +2. 背景:浅灰蓝,不用大面积高饱和装饰 +3. 卡片:白底、细边框、轻阴影 +4. 状态色:成功绿、警告橙、错误红 +5. 页面信息结构:标题、数据、动作优先,减少解释文字 diff --git a/docs/TASKS.md b/docs/TASKS.md new file mode 100644 index 0000000..bbd5a13 --- /dev/null +++ b/docs/TASKS.md @@ -0,0 +1,92 @@ +# QQuiz Task Checklist + +更新时间:2026-04-17 + +## P0 运行基线 + +- [x] 默认 Docker 拓扑切回 SQLite +- [x] 保留 MySQL 兼容 Compose 覆盖文件 +- [x] 前后端容器可启动并完成最小探活 +- [x] GitHub Actions 改成 push 后自动构建 backend/frontend 镜像 +- [ ] 补开发/生产分离 Compose +- [ ] 补 PR 级别 build/smoke workflow +- [ ] 清理根目录 Docker 文档漂移 + +## P1 后端稳定性 + +- [x] 管理员配置接口忽略打码后的密钥回写 +- [x] 用户列表返回改为强类型 +- [x] 用户列表统计去掉 N+1 查询 +- [x] 最后一个管理员保护 +- [x] 管理员密码重置接口 +- [ ] 去掉启动期 `create_all` 作为正式迁移方式 +- [ ] 建 Alembic 初始迁移 +- [ ] 去掉 `LLMService` import side effect +- [ ] 收敛事务边界 +- [ ] 修 ingestion 并发与唯一约束 +- [ ] 规范健康检查和错误模型 + +## P2 用户管理 + +- [x] 用户搜索 +- [x] 创建用户 +- [x] 编辑用户 +- [x] 重置密码 +- [x] 删除用户 +- [ ] 用户状态字段(启用/禁用/锁定) +- [ ] 审计日志 +- [ ] 批量操作 +- [ ] 密码强度与重置流程优化 +- [ ] 默认管理员保护策略文档化 + +## P3 新前端基础层 + +- [x] Next.js App Router 骨架 +- [x] BFF 登录/登出/`/me` 代理 +- [x] 同源 API 代理 +- [x] SSE 代理入口 +- [x] 移除旧前端 ESA 人机验证 +- [ ] 中间件与服务端守卫完善 +- [ ] 错误页/空状态统一 +- [ ] URL 状态策略统一 + +## P4 页面迁移 + +### 已接入真实数据 + +- [x] Dashboard +- [x] Exams list +- [x] Exam detail +- [x] Questions list +- [x] Mistakes list +- [x] Quiz player +- [x] Mistake quiz +- [x] Admin user management +- [x] Admin settings + +### 待继续 + +- [ ] 上传/进度/失败重试链路 + +## P5 前端视觉与交互 + +- [x] 侧边栏选中态修复 +- [x] 新前端配色收敛为更简洁的产品风格 +- [x] 去掉大段迁移说明文案 +- [ ] 统一表格、表单、按钮、状态徽标 +- [ ] 清理页面中的占位内容 +- [ ] 替换 `window.confirm` 为统一对话框 +- [ ] 移动端布局细化 + +## P6 测试与验收 + +- [x] 旧前端构建通过 +- [x] 新前端构建通过 +- [x] Docker 最小登录链路验证 +- [x] 管理员配置、用户管理、上传解析、题目、错题、刷题链路验证 +- [x] 管理员与普通用户登录验证 +- [x] PowerShell smoke 脚本固化全流程验证 +- [ ] 后端集成测试 +- [ ] 前端 E2E 烟测 +- [ ] SQLite / MySQL 双栈验证 +- [ ] 用户管理回归用例 diff --git a/docs/audit/architecture.md b/docs/audit/architecture.md new file mode 100644 index 0000000..5abbf18 --- /dev/null +++ b/docs/audit/architecture.md @@ -0,0 +1,70 @@ +# QQuiz Architecture Audit + +## Scope + +This document records the current system shape and the approved target +direction for the ongoing refactor. + +Audit date: 2026-04-17 + +## Current Architecture + +### Backend + +- Runtime: FastAPI + SQLAlchemy async +- Database access: direct ORM session injection per request +- Task execution: in-process `BackgroundTasks` +- Progress streaming: in-memory `ProgressService` +- Schema management: mixed `create_all()` and Alembic placeholders + +### Frontend + +- Runtime: React 18 + Vite SPA +- Routing: `react-router-dom` +- Auth state: client-only `localStorage` token + context +- API transport: axios interceptor with browser redirects +- Styling: Tailwind CSS with page-local utility classes + +### Deployment + +- `docker-compose.yml`: development-oriented split stack +- `docker-compose-single.yml`: monolith container with SQLite +- `Dockerfile`: FastAPI serves the built SPA as static assets + +## Target Architecture + +### Backend + +- Keep FastAPI as the system API boundary +- Move heavy router logic into typed services +- Use Alembic as the only schema migration path +- Introduce durable ingestion execution semantics +- Replace implicit transaction patterns with explicit service-level boundaries + +### Frontend + +- New app in `web/` +- Stack: Next.js App Router + TypeScript + Tailwind + shadcn/ui +- Auth: `HttpOnly` session cookie mediated by Next route handlers +- Data fetching: `fetch` wrappers for server/client usage +- Streaming: Next proxy route for exam progress SSE + +### Deployment + +- Split deployment becomes the primary production shape +- Monolith mode remains secondary compatibility mode +- Development and production Compose files must be separated + +## Core Constraints + +1. Do not overwrite existing uncommitted user changes in the legacy frontend. +2. Keep the legacy `frontend/` app available until the new `web/` app reaches functional parity. +3. Preserve backend API contracts where possible during the frontend migration. +4. Fix deployment/documentation drift before treating new frontend work as production-ready. + +## Immediate Workstreams + +1. Remove abandoned ESA captcha wiring from the legacy frontend. +2. Write audit documents and freeze the migration backlog. +3. Scaffold the new `web/` frontend without disturbing the legacy app. +4. Fix first-order deployment issues such as health checks and documented mount paths. diff --git a/docs/audit/backend-findings.md b/docs/audit/backend-findings.md new file mode 100644 index 0000000..f13b814 --- /dev/null +++ b/docs/audit/backend-findings.md @@ -0,0 +1,86 @@ +# Backend Findings + +## Critical Findings + +### Schema lifecycle is unsafe + +- App startup still calls `create_all()` +- Alembic metadata exists but the migration chain is effectively empty +- This prevents controlled upgrades and rollbacks + +Files: + +- `backend/main.py` +- `backend/database.py` +- `backend/alembic/versions/.gitkeep` + +### Parsing tasks are not durable + +- Document ingestion runs inside FastAPI `BackgroundTasks` +- Progress state lives in-process only +- Process restarts or horizontal scaling can strand exams in `pending` or `processing` + +Files: + +- `backend/routers/exam.py` +- `backend/services/progress_service.py` + +### Transaction boundaries are inconsistent + +- `get_db()` performs commit/rollback automatically +- Routers and background tasks also call `commit()` directly +- SSE endpoints keep a database dependency open for long-lived streams + +Files: + +- `backend/database.py` +- `backend/routers/exam.py` + +## High-Priority Bugs + +### Admin config can destroy secrets + +- `GET /api/admin/config` masks API keys +- `PUT /api/admin/config` persists whatever the frontend sends back +- A round-trip save can replace the real secret with the masked placeholder + +Files: + +- `backend/routers/admin.py` + +### LLM service has import-time side effects + +- `LLMService()` is instantiated at module import time +- Missing environment variables can break startup before DB-backed config is loaded + +Files: + +- `backend/services/llm_service.py` + +### Ingestion deduplication is race-prone + +- No unique DB constraint on `(exam_id, content_hash)` +- Multiple append operations can race and insert duplicates + +Files: + +- `backend/models.py` +- `backend/routers/exam.py` + +### Answer checking degrades incorrectly on infra failure + +- Short-answer grading failures are converted into zero scores +- User mistake data can be polluted by provider outages or config errors + +Files: + +- `backend/services/llm_service.py` +- `backend/routers/question.py` + +## Refactor Order + +1. Replace runtime schema creation with Alembic-first migrations. +2. Move ingestion, config, and answer checking into service classes. +3. Introduce explicit transaction boundaries and idempotent ingestion rules. +4. Add durable task execution and real status/error semantics. +5. Add integration tests for config round-trips, ingestion races, and answer normalization. diff --git a/docs/audit/deployment-findings.md b/docs/audit/deployment-findings.md new file mode 100644 index 0000000..c47b0f4 --- /dev/null +++ b/docs/audit/deployment-findings.md @@ -0,0 +1,49 @@ +# Deployment Findings + +## Current Problems + +### Monolith persistence documentation is wrong + +- Existing `docker run` examples mounted the wrong path +- SQLite and upload persistence must target `/app/data` and `/app/uploads` + +### Monolith health check was broken + +- `docker-compose-single.yml` used `curl` +- The image does not guarantee `curl` exists +- The health check has been switched to Python stdlib HTTP probing + +### Split Compose is development-oriented + +- Source mounts are enabled +- Backend runs with `uvicorn --reload` +- Frontend runs a dev server +- This is not a production deployment model + +### Security posture is weak + +- Compose contains hard-coded MySQL credentials +- MySQL is exposed on `3306` +- Environment guidance is inconsistent across README, Compose, and `.env.example` + +## Approved Direction + +1. Treat split deployment as the default production topology. +2. Keep monolith deployment as a compatibility target only. +3. Separate development assets from production assets. +4. Validate all release images with smoke checks before publishing. + +## Backlog + +### Short term + +- Create `compose.dev.yml` and `compose.prod.yml` +- Remove dev-server assumptions from production documentation +- Add backend runtime dependencies explicitly to image builds +- Align README with actual mount paths and health checks + +### Medium term + +- Add PR build, typecheck, lint, and smoke-test workflows +- Publish separate images for API and Next web app +- Document rollback by image tag and Compose profile diff --git a/docs/audit/frontend-migration.md b/docs/audit/frontend-migration.md new file mode 100644 index 0000000..1632258 --- /dev/null +++ b/docs/audit/frontend-migration.md @@ -0,0 +1,70 @@ +# Frontend Migration Plan + +## Decision + +The legacy Vite SPA remains in `frontend/` as a fallback. + +The new frontend is being built in `web/` with: + +- Next.js App Router +- TypeScript +- Tailwind CSS +- shadcn/ui component model + +The abandoned ESA captcha integration has been removed from the legacy login page. + +## Why a Rewrite Instead of an In-Place Port + +The legacy frontend mixes too many browser-only assumptions into core runtime +boundaries: + +- token storage in `localStorage` +- `window.location` redirects inside transport code +- client-only route protection +- SSE token passing in query strings + +Those patterns do not map cleanly onto Next App Router and server-first auth. + +## New Runtime Model + +### Auth + +- Login goes through Next route handlers +- Backend JWT is stored in an `HttpOnly` cookie +- Browser code never reads the raw token + +### Data + +- Server pages use server-side fetch helpers +- Client mutations use browser-side fetch helpers against Next proxy routes +- URL state is used for pagination and filters + +### Streaming + +- Browser connects to a same-origin Next progress route +- The route reads the session cookie and proxies backend SSE +- Backend URL tokens are hidden from the browser + +## Directory Map + +```text +web/ + src/app/ + src/components/ + src/lib/ + src/middleware.ts +``` + +## Migration Order + +1. Auth shell, layouts, middleware, and proxy routes +2. Dashboard, exams list, questions list, and admin overview +3. Exam detail upload and progress streaming +4. Quiz and mistake-practice flows +5. Cutover, smoke testing, and legacy frontend retirement + +## Non-Goals for This First Slice + +- No immediate removal of the legacy `frontend/` +- No backend contract rewrite yet +- No server actions as the primary data mutation layer diff --git a/docs/cover.png b/docs/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..438d4d5b895330dd560ff3da2f486a237525f82b GIT binary patch literal 380032 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≪uD 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
diff --git a/frontend/src/api/client.js b/frontend/src/api/client.js index ff44b3a..70f2415 100644 --- a/frontend/src/api/client.js +++ b/frontend/src/api/client.js @@ -4,9 +4,53 @@ import axios from 'axios' import toast from 'react-hot-toast' +export const API_BASE_URL = import.meta.env.VITE_API_URL || '/api' +export const AUTH_TOKEN_STORAGE_KEY = 'access_token' + +const AUTH_USER_STORAGE_KEY = 'user' +const PUBLIC_REQUEST_PATHS = ['/auth/login', '/auth/register'] + +const getRequestPath = (config) => { + const url = config?.url || '' + + if (!url) return '' + + if (url.startsWith('http://') || url.startsWith('https://')) { + try { + return new URL(url).pathname + } catch (error) { + return url + } + } + + return url.startsWith('/') ? url : `/${url}` +} + +const isPublicRequest = (config) => { + if (config?.skipAuthHandling === true) { + return true + } + + const path = getRequestPath(config) + return PUBLIC_REQUEST_PATHS.some((publicPath) => path.endsWith(publicPath)) +} + +export const buildApiUrl = (path) => { + const base = API_BASE_URL.endsWith('/') ? API_BASE_URL.slice(0, -1) : API_BASE_URL + const normalizedPath = path.startsWith('/') ? path : `/${path}` + return `${base}${normalizedPath}` +} + +export const getAccessToken = () => localStorage.getItem(AUTH_TOKEN_STORAGE_KEY) + +export const clearAuthStorage = () => { + localStorage.removeItem(AUTH_TOKEN_STORAGE_KEY) + localStorage.removeItem(AUTH_USER_STORAGE_KEY) +} + // Create axios instance const api = axios.create({ - baseURL: import.meta.env.VITE_API_URL || '/api', + baseURL: API_BASE_URL, timeout: 30000, headers: { 'Content-Type': 'application/json' @@ -16,8 +60,9 @@ const api = axios.create({ // Request interceptor - Add auth token api.interceptors.request.use( (config) => { - const token = localStorage.getItem('access_token') - if (token) { + const token = getAccessToken() + if (token && !isPublicRequest(config)) { + config.headers = config.headers || {} config.headers.Authorization = `Bearer ${token}` } return config @@ -31,19 +76,26 @@ api.interceptors.request.use( api.interceptors.response.use( (response) => response, (error) => { + const status = error.response?.status const message = error.response?.data?.detail || 'An error occurred' + const requestConfig = error.config || {} + const hasAuthHeader = Boolean( + requestConfig.headers?.Authorization || requestConfig.headers?.authorization + ) - if (error.response?.status === 401) { - // Unauthorized - Clear token and redirect to login - localStorage.removeItem('access_token') - localStorage.removeItem('user') - window.location.href = '/login' + if (status === 401 && !isPublicRequest(requestConfig) && hasAuthHeader) { + clearAuthStorage() + if (window.location.pathname !== '/login') { + window.location.href = '/login' + } toast.error('Session expired. Please login again.') - } else if (error.response?.status === 403) { - toast.error('Permission denied') - } else if (error.response?.status === 429) { + } else if (status === 401) { toast.error(message) - } else if (error.response?.status >= 500) { + } else if (status === 403) { + toast.error('Permission denied') + } else if (status === 429) { + toast.error(message) + } else if (status >= 500) { toast.error('Server error. Please try again later.') } else { toast.error(message) @@ -56,10 +108,10 @@ api.interceptors.response.use( // ============ Auth APIs ============ export const authAPI = { register: (username, password) => - api.post('/auth/register', { username, password }), + api.post('/auth/register', { username, password }, { skipAuthHandling: true }), login: (username, password) => - api.post('/auth/login', { username, password }), + api.post('/auth/login', { username, password }, { skipAuthHandling: true }), getCurrentUser: () => api.get('/auth/me'), diff --git a/frontend/src/context/AuthContext.jsx b/frontend/src/context/AuthContext.jsx index e3ab9d7..ae38602 100644 --- a/frontend/src/context/AuthContext.jsx +++ b/frontend/src/context/AuthContext.jsx @@ -2,7 +2,7 @@ * Authentication Context */ import React, { createContext, useContext, useState, useEffect } from 'react' -import { authAPI } from '../api/client' +import { authAPI, AUTH_TOKEN_STORAGE_KEY, clearAuthStorage } from '../api/client' import toast from 'react-hot-toast' const AuthContext = createContext(null) @@ -22,15 +22,14 @@ export const AuthProvider = ({ children }) => { // Load user from localStorage on mount useEffect(() => { const loadUser = async () => { - const token = localStorage.getItem('access_token') + const token = localStorage.getItem(AUTH_TOKEN_STORAGE_KEY) if (token) { try { const response = await authAPI.getCurrentUser() setUser(response.data) } catch (error) { console.error('Failed to load user:', error) - localStorage.removeItem('access_token') - localStorage.removeItem('user') + clearAuthStorage() } } setLoading(false) @@ -45,7 +44,7 @@ export const AuthProvider = ({ children }) => { const { access_token } = response.data // Save token - localStorage.setItem('access_token', access_token) + localStorage.setItem(AUTH_TOKEN_STORAGE_KEY, access_token) // Get user info const userResponse = await authAPI.getCurrentUser() @@ -71,8 +70,7 @@ export const AuthProvider = ({ children }) => { } const logout = () => { - localStorage.removeItem('access_token') - localStorage.removeItem('user') + clearAuthStorage() setUser(null) toast.success('Logged out successfully') } diff --git a/frontend/src/pages/ExamDetail.jsx b/frontend/src/pages/ExamDetail.jsx index a175e91..730a1ed 100644 --- a/frontend/src/pages/ExamDetail.jsx +++ b/frontend/src/pages/ExamDetail.jsx @@ -3,7 +3,7 @@ */ import React, { useState, useEffect, useRef } from 'react' import { useParams, useNavigate } from 'react-router-dom' -import { examAPI, questionAPI } from '../api/client' +import { examAPI, buildApiUrl, getAccessToken } from '../api/client' import ParsingProgress from '../components/ParsingProgress' import { ArrowLeft, Upload, Play, Loader, FileText, AlertCircle, RefreshCw, ArrowRight @@ -51,6 +51,8 @@ export const ExamDetail = () => { // Connect to SSE if exam is processing if (examRes.data.status === 'processing') { connectSSE() + } else { + setProgress(null) } } catch (error) { console.error('Failed to load exam:', error) @@ -68,8 +70,14 @@ export const ExamDetail = () => { console.log('[SSE] Connecting to progress stream for exam', examId) - const token = localStorage.getItem('token') - const url = `/api/exams/${examId}/progress?token=${encodeURIComponent(token)}` + const token = getAccessToken() + + if (!token) { + console.error('[SSE] Missing access token') + return + } + + const url = `${buildApiUrl(`/exams/${examId}/progress`)}?token=${encodeURIComponent(token)}` const eventSource = new EventSource(url) eventSourceRef.current = eventSource @@ -173,6 +181,9 @@ export const ExamDetail = () => { const isReady = exam.status === 'ready' const isFailed = exam.status === 'failed' const quizProgress = calculateProgress(exam.current_index, exam.total_questions) + const completionProgress = isProcessing + ? Math.round(Number(progress?.progress ?? 0)) + : quizProgress return ( <> @@ -252,17 +263,17 @@ export const ExamDetail = () => {

完成度

-

{isProcessing ? progress : quizProgress}%

+

{completionProgress}%

{/* Progress Bar */} - {exam.total_questions > 0 && ( + {(isProcessing || exam.total_questions > 0) && (
diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx index b0e56e3..73fdd71 100644 --- a/frontend/src/pages/Login.jsx +++ b/frontend/src/pages/Login.jsx @@ -1,7 +1,7 @@ /** * Login Page */ -import React, { useState, useEffect } from 'react' +import React, { useState } from 'react' import { Link, useNavigate } from 'react-router-dom' import { useAuth } from '../context/AuthContext' import { BookOpen } from 'lucide-react' @@ -15,110 +15,21 @@ export const Login = () => { password: '' }) const [loading, setLoading] = useState(false) - const [captchaInstance, setCaptchaInstance] = useState(null) - - useEffect(() => { - // 确保 window.initAliyunCaptcha 存在且 DOM 元素已渲染 - const initCaptcha = () => { - if (window.initAliyunCaptcha && document.getElementById('captcha-element')) { - try { - window.initAliyunCaptcha({ - SceneId: import.meta.env.VITE_ESA_SCENE_ID, // 从环境变量读取场景ID - mode: "popup", // 弹出式 - element: "#captcha-element", // 渲染验证码的元素 - button: "#login-btn", // 触发验证码的按钮ID - success: async function (captchaVerifyParam) { - // 验证成功后的回调 - // 这里我们获取到了验证参数,虽然文档说要发给后端, - // 但 ESA 边缘拦截其实是在请求发出时检查 Cookie/Header - // 对于“一点即过”或“滑块”,SDK 会自动处理验证逻辑 - // 这里的 verifiedParam 是用来回传给服务端做二次校验的 - // 由于我们此时还没有登录逻辑,我们可以在这里直接提交表单 - // 即把 verifyParam 存下来,或者直接调用 login - - // 注意:由于是 form 的 onSubmit 触发,这里我们其实是在 form 提交被阻止(preventDefault)后 - // 由用户点击按钮触发了验证码,验证码成功后再执行真正的登录 - // 但 React 的 form 处理通常是 onSubmit - // 我们可以让按钮类型为 button 而不是 submit,点击触发验证码 - // 验证码成功后手动调用 handleSubmit 的逻辑 - - console.log('Captcha Success:', captchaVerifyParam); - handleLoginSubmit(captchaVerifyParam); - }, - fail: function (result) { - console.error('Captcha Failed:', result); - }, - getInstance: function (instance) { - setCaptchaInstance(instance); - }, - slideStyle: { - width: 360, - height: 40, - } - }); - } catch (error) { - console.error("Captcha init error:", error); - } - } - }; - // 如果脚本还没加载完,可能需要等待。为了简单起见,且我们在 index.html 加了 async - // 我们做一个简单的轮询或者依赖 script onload(但在 index.html 比较难控制) - // 或者直接延迟一下初始化 - const timer = setTimeout(initCaptcha, 500); - return () => clearTimeout(timer); - }, []); + const handleSubmit = async (e) => { + e.preventDefault() - const handleLoginSubmit = async (captchaParam) => { setLoading(true) try { - // 这里的 login 可能需要改造以接受验证码参数,或者利用 fetch 的拦截器 - // 如果是 ESA 边缘拦截,通常它会看请求里带不带特定的 Header/Cookie - // 文档示例里是手动 fetch 并且带上了 header: 'captcha-Verify-param' - // 暂时我们假设 login 函数内部不需要显式传参(通过 ESA 自动拦截),或者 ESA 需要 headers - // 为了安全,建议把 captchaParam 传给 login,让 login 放到 headers 里 - // 但现在我们先维持原样,或者您可以把 captchaParam 放到 sessionStorage 里由 axios 拦截器读取 - - // 注意:上面的 success 回调里我们直接调用了这个,说明验证通过了 const success = await login(formData.username, formData.password) if (success) { navigate('/dashboard') } } finally { setLoading(false) - if(captchaInstance) captchaInstance.refresh(); // 失败或完成后刷新验证码 } } - // 这里的 handleSubmit 变成只是触发验证码(如果也没通过验证的话) - // 但 ESA 示例是绑定 button,点击 button 直接出验证码 - // 所以我们可以把 type="submit" 变成 type="button" 且 id="login-btn" - const handlePreSubmit = (e) => { - e.preventDefault(); - // 此时不需要做任何事,因为按钮被 ESA 接管了,点击会自动弹窗 - // 只有验证成功了才会走 success -> handleLoginSubmit - // 但是!如果没填用户名密码怎么办? - // 最好在点击前校验表单。 - // ESA 的 button 参数会劫持点击事件。 - // 我们可以不绑定 button 参数,而是手动验证表单后,调用 captchaInstance.show() (如果是无痕或弹窗) - // 官方文档说绑定 button 是“触发验证码弹窗或无痕验证的元素” - // 如果我们保留 form submit,拦截它,如果表单有效,则手动 captchaInstance.show() (如果 SDK 支持) - // 文档说“无痕模式首次验证不支持 show/hide”。 - // 咱们还是按官方推荐绑定 button,但是这会导致校验逻辑变复杂 - - // 简化方案:为了不破坏现有逻辑,我们不绑定 button ? - // 不,必须绑定。那我们把“登录”按钮作为触发器。 - // 可是如果不填表单直接点登录 -> 验证码 -> 成功 -> 提交空表单 -> 报错。流程不太对。 - - // 更好的流程: - // 用户填表 -> 点击登录 -> 校验表单 -> (有效) -> 弹出验证码 -> (成功) -> 提交后端 - - // 我们可以做一个不可见的 button 绑定给 ESA,验证表单通过后,用代码模拟点击这个 button? - // 或者直接用 id="login-btn" 绑定当前的登录按钮, - // 但是在 success 回调里检查 formData 是否为空? - } - - const handleChange = (e) => { setFormData({ ...formData, @@ -144,8 +55,7 @@ export const Login = () => {

登录

- {/* 为了能正确使用 ESA,我们将 form 的 onSubmit 移除,改由按钮触发,或者保留 form 但不做提交 */} -
e.preventDefault()}> + {/* Username */}
- {/* ESA Captcha Container */} -
- - {/* Submit Button */} - {/* 绑定 id="login-btn" 供 ESA 使用 */} + +

+ 还没有账号? + + 立即注册 + +

+
+ + +
+ + ); +} diff --git a/web/src/app/(auth)/register/page.tsx b/web/src/app/(auth)/register/page.tsx new file mode 100644 index 0000000..76f47ea --- /dev/null +++ b/web/src/app/(auth)/register/page.tsx @@ -0,0 +1,94 @@ +"use client"; + +import Link from "next/link"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { ArrowRight } from "lucide-react"; +import { toast } from "sonner"; + +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; + +export default function RegisterPage() { + const router = useRouter(); + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + const [loading, setLoading] = useState(false); + + async function handleSubmit(event: React.FormEvent) { + event.preventDefault(); + setLoading(true); + + try { + const response = await fetch("/api/proxy/auth/register", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ username, password }) + }); + + const payload = await response.json(); + if (!response.ok) { + throw new Error(payload?.detail || "注册失败"); + } + + toast.success("注册成功,请登录"); + router.push("/login"); + } catch (error) { + toast.error(error instanceof Error ? error.message : "注册失败"); + } finally { + setLoading(false); + } + } + + return ( +
+ + + 创建账户 + + +
+
+ + setUsername(event.target.value)} + placeholder="3-50 位字母、数字、_ 或 -" + required + /> +
+ +
+ + setPassword(event.target.value)} + placeholder="至少 6 位" + required + /> +
+ + + +

+ 已有账号? + + 返回登录 + +

+
+
+
+
+ ); +} diff --git a/web/src/app/api/auth/login/route.ts b/web/src/app/api/auth/login/route.ts new file mode 100644 index 0000000..d07c538 --- /dev/null +++ b/web/src/app/api/auth/login/route.ts @@ -0,0 +1,37 @@ +import { cookies } from "next/headers"; +import { NextRequest, NextResponse } from "next/server"; + +import { SESSION_COOKIE_NAME, buildBackendUrl } from "@/lib/api/config"; + +export async function POST(request: NextRequest) { + const body = await request.json(); + const forwardedProto = request.headers.get("x-forwarded-proto"); + const isSecureRequest = + request.nextUrl.protocol === "https:" || forwardedProto === "https"; + + const response = await fetch(buildBackendUrl("/auth/login"), { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(body), + cache: "no-store" + }); + + const payload = await response.json(); + + if (!response.ok) { + return NextResponse.json(payload, { status: response.status }); + } + + cookies().set({ + name: SESSION_COOKIE_NAME, + value: payload.access_token, + httpOnly: true, + sameSite: "lax", + secure: isSecureRequest, + path: "/" + }); + + return NextResponse.json({ ok: true }); +} diff --git a/web/src/app/api/auth/logout/route.ts b/web/src/app/api/auth/logout/route.ts new file mode 100644 index 0000000..a986089 --- /dev/null +++ b/web/src/app/api/auth/logout/route.ts @@ -0,0 +1,17 @@ +import { cookies } from "next/headers"; +import { NextResponse } from "next/server"; + +import { SESSION_COOKIE_NAME } from "@/lib/api/config"; + +async function clearSession() { + cookies().delete(SESSION_COOKIE_NAME); + return NextResponse.json({ ok: true }); +} + +export async function POST() { + return clearSession(); +} + +export async function GET() { + return clearSession(); +} diff --git a/web/src/app/api/auth/me/route.ts b/web/src/app/api/auth/me/route.ts new file mode 100644 index 0000000..f06f679 --- /dev/null +++ b/web/src/app/api/auth/me/route.ts @@ -0,0 +1,30 @@ +import { cookies } from "next/headers"; +import { NextResponse } from "next/server"; + +import { + SESSION_COOKIE_NAME, + buildBackendUrl +} from "@/lib/api/config"; + +export async function GET() { + const token = cookies().get(SESSION_COOKIE_NAME)?.value; + + if (!token) { + return NextResponse.json({ detail: "Unauthorized" }, { status: 401 }); + } + + const response = await fetch(buildBackendUrl("/auth/me"), { + headers: { + Authorization: `Bearer ${token}` + }, + cache: "no-store" + }); + + const payload = await response.json(); + + if (response.status === 401) { + cookies().delete(SESSION_COOKIE_NAME); + } + + return NextResponse.json(payload, { status: response.status }); +} diff --git a/web/src/app/api/exams/[examId]/progress/route.ts b/web/src/app/api/exams/[examId]/progress/route.ts new file mode 100644 index 0000000..61c8990 --- /dev/null +++ b/web/src/app/api/exams/[examId]/progress/route.ts @@ -0,0 +1,42 @@ +import { cookies } from "next/headers"; +import { NextRequest, NextResponse } from "next/server"; + +import { + SESSION_COOKIE_NAME, + buildBackendUrl +} from "@/lib/api/config"; + +export async function GET( + _request: NextRequest, + { params }: { params: { examId: string } } +) { + const token = cookies().get(SESSION_COOKIE_NAME)?.value; + if (!token) { + return NextResponse.json({ detail: "Unauthorized" }, { status: 401 }); + } + + const target = `${buildBackendUrl(`/exams/${params.examId}/progress`)}?token=${encodeURIComponent(token)}`; + const response = await fetch(target, { + headers: { + Accept: "text/event-stream", + "Cache-Control": "no-cache" + }, + cache: "no-store" + }); + + if (!response.ok || !response.body) { + const payload = await response.text(); + return new NextResponse(payload || "Failed to open exam progress stream", { + status: response.status + }); + } + + return new NextResponse(response.body, { + status: response.status, + headers: { + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache, no-transform", + Connection: "keep-alive" + } + }); +} diff --git a/web/src/app/api/proxy/[...path]/route.ts b/web/src/app/api/proxy/[...path]/route.ts new file mode 100644 index 0000000..c889904 --- /dev/null +++ b/web/src/app/api/proxy/[...path]/route.ts @@ -0,0 +1,82 @@ +import { cookies } from "next/headers"; +import { NextRequest, NextResponse } from "next/server"; + +import { + SESSION_COOKIE_NAME, + buildBackendUrl +} from "@/lib/api/config"; + +async function proxyRequest( + request: NextRequest, + params: { path: string[] } +) { + const token = cookies().get(SESSION_COOKIE_NAME)?.value; + const requestPath = params.path.join("/"); + const target = `${buildBackendUrl(`/${requestPath}`)}${request.nextUrl.search}`; + + const headers = new Headers(); + const contentType = request.headers.get("content-type"); + if (contentType) { + headers.set("Content-Type", contentType); + } + if (token) { + headers.set("Authorization", `Bearer ${token}`); + } + + const method = request.method; + const init: RequestInit = { + method, + headers, + cache: "no-store" + }; + + if (!["GET", "HEAD"].includes(method)) { + init.body = await request.arrayBuffer(); + } + + const response = await fetch(target, init); + const responseHeaders = new Headers(response.headers); + responseHeaders.delete("content-encoding"); + responseHeaders.delete("content-length"); + responseHeaders.delete("transfer-encoding"); + + return new NextResponse(response.body, { + status: response.status, + headers: responseHeaders + }); +} + +export async function GET( + request: NextRequest, + { params }: { params: { path: string[] } } +) { + return proxyRequest(request, params); +} + +export async function POST( + request: NextRequest, + { params }: { params: { path: string[] } } +) { + return proxyRequest(request, params); +} + +export async function PUT( + request: NextRequest, + { params }: { params: { path: string[] } } +) { + return proxyRequest(request, params); +} + +export async function PATCH( + request: NextRequest, + { params }: { params: { path: string[] } } +) { + return proxyRequest(request, params); +} + +export async function DELETE( + request: NextRequest, + { params }: { params: { path: string[] } } +) { + return proxyRequest(request, params); +} diff --git a/web/src/app/globals.css b/web/src/app/globals.css new file mode 100644 index 0000000..afec177 --- /dev/null +++ b/web/src/app/globals.css @@ -0,0 +1,47 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 210 25% 98%; + --foreground: 220 35% 12%; + --card: 0 0% 100%; + --card-foreground: 220 35% 12%; + --primary: 214 78% 34%; + --primary-foreground: 210 40% 98%; + --secondary: 210 24% 94%; + --secondary-foreground: 220 35% 18%; + --muted: 210 20% 96%; + --muted-foreground: 220 12% 42%; + --accent: 38 85% 92%; + --accent-foreground: 220 35% 18%; + --destructive: 0 76% 52%; + --destructive-foreground: 210 40% 98%; + --success: 154 63% 35%; + --success-foreground: 155 80% 96%; + --warning: 32 88% 45%; + --warning-foreground: 36 100% 96%; + --border: 214 24% 88%; + --input: 214 24% 88%; + --ring: 214 78% 34%; + --radius: 1.25rem; + } + + * { + @apply border-border; + } + + body { + @apply bg-background text-foreground antialiased; + background-image: + radial-gradient(circle at top left, rgba(99, 142, 214, 0.1), transparent 22%), + linear-gradient(180deg, rgba(250, 252, 255, 0.98), rgba(245, 247, 250, 0.98)); + font-family: + "Space Grotesk", + "Noto Sans SC", + "PingFang SC", + "Microsoft YaHei", + sans-serif; + } +} diff --git a/web/src/app/layout.tsx b/web/src/app/layout.tsx new file mode 100644 index 0000000..1e07be5 --- /dev/null +++ b/web/src/app/layout.tsx @@ -0,0 +1,27 @@ +import type { Metadata } from "next"; +import { Toaster } from "sonner"; + +import { QueryProvider } from "@/components/providers/query-provider"; +import "@/app/globals.css"; + +export const metadata: Metadata = { + title: "QQuiz Web", + description: "QQuiz Next.js frontend migration scaffold" +}; + +export default function RootLayout({ + children +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + + {children} + + + + + ); +} diff --git a/web/src/app/loading.tsx b/web/src/app/loading.tsx new file mode 100644 index 0000000..80e19ac --- /dev/null +++ b/web/src/app/loading.tsx @@ -0,0 +1,7 @@ +export default function Loading() { + return ( +
+
+
+ ); +} diff --git a/web/src/app/not-found.tsx b/web/src/app/not-found.tsx new file mode 100644 index 0000000..7c418d6 --- /dev/null +++ b/web/src/app/not-found.tsx @@ -0,0 +1,24 @@ +import Link from "next/link"; + +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; + +export default function NotFound() { + return ( +
+ + + 页面不存在 + + +

+ 这个路由还没有迁入新的 Next.js 前端,或者你访问了一个不存在的地址。 +

+ +
+
+
+ ); +} diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx new file mode 100644 index 0000000..f046ad8 --- /dev/null +++ b/web/src/app/page.tsx @@ -0,0 +1,7 @@ +import { redirect } from "next/navigation"; + +import { readSessionToken } from "@/lib/auth/session"; + +export default function IndexPage() { + redirect(readSessionToken() ? "/dashboard" : "/login"); +} diff --git a/web/src/components/admin/settings-panel.tsx b/web/src/components/admin/settings-panel.tsx new file mode 100644 index 0000000..9f12b2f --- /dev/null +++ b/web/src/components/admin/settings-panel.tsx @@ -0,0 +1,186 @@ +"use client"; + +import { useState } from "react"; +import { Loader2, Save } from "lucide-react"; +import { toast } from "sonner"; + +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { browserApi } from "@/lib/api/browser"; +import { SystemConfigResponse } from "@/lib/types"; + +export function SettingsPanel({ + initialConfig +}: { + initialConfig: SystemConfigResponse; +}) { + const [config, setConfig] = useState(initialConfig); + const [saving, setSaving] = useState(false); + + async function handleSubmit(event: React.FormEvent) { + event.preventDefault(); + setSaving(true); + + try { + const payload = await browserApi("/admin/config", { + method: "PUT", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(config) + }); + setConfig(payload); + toast.success("设置已保存"); + } catch (error) { + toast.error(error instanceof Error ? error.message : "保存失败"); + } finally { + setSaving(false); + } + } + + return ( +
+ + + 基础设置 + + + + +
+ + + setConfig((current) => ({ + ...current, + max_upload_size_mb: Number(event.target.value || 0) + })) + } + min={1} + /> +
+ +
+ + + setConfig((current) => ({ + ...current, + max_daily_uploads: Number(event.target.value || 0) + })) + } + min={1} + /> +
+ +
+ + +
+
+
+ + + + 模型配置 + + +
+ + + setConfig((current) => ({ ...current, openai_base_url: event.target.value })) + } + /> +
+
+ + + setConfig((current) => ({ ...current, openai_api_key: event.target.value })) + } + /> +
+
+ + + setConfig((current) => ({ ...current, gemini_model: event.target.value })) + } + /> +
+
+ + + setConfig((current) => ({ ...current, openai_model: event.target.value })) + } + /> +
+
+ + + setConfig((current) => ({ ...current, anthropic_model: event.target.value })) + } + /> +
+
+ + + setConfig((current) => ({ ...current, qwen_model: event.target.value })) + } + /> +
+
+
+ +
+ +
+
+ ); +} diff --git a/web/src/components/admin/user-management-panel.tsx b/web/src/components/admin/user-management-panel.tsx new file mode 100644 index 0000000..96f1559 --- /dev/null +++ b/web/src/components/admin/user-management-panel.tsx @@ -0,0 +1,358 @@ +"use client"; + +import { useEffect, useMemo, useState } from "react"; +import { useRouter } from "next/navigation"; +import { Loader2, Search, Shield, Trash2, UserPlus } from "lucide-react"; +import { toast } from "sonner"; + +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { PaginationControls } from "@/components/ui/pagination-controls"; +import { browserApi } from "@/lib/api/browser"; +import { formatDate } from "@/lib/formatters"; +import { AdminUserSummary } from "@/lib/types"; + +type EditingState = { + id: number | null; + username: string; + password: string; + isAdmin: boolean; +}; + +export function UserManagementPanel({ + initialPage, + initialSearch, + initialUsers, + initialTotal, + pageSize +}: { + initialPage: number; + initialSearch: string; + initialUsers: AdminUserSummary[]; + initialTotal: number; + pageSize: number; +}) { + const router = useRouter(); + const [search, setSearch] = useState(initialSearch); + const [users, setUsers] = useState(initialUsers); + const [total, setTotal] = useState(initialTotal); + const [submitting, setSubmitting] = useState(false); + const [deletingId, setDeletingId] = useState(null); + const [editing, setEditing] = useState({ + id: null, + username: "", + password: "", + isAdmin: false + }); + + const isCreateMode = editing.id === null; + const title = isCreateMode ? "创建用户" : "编辑用户"; + + const activeAdminCount = useMemo( + () => users.filter((user) => user.is_admin).length, + [users] + ); + + useEffect(() => { + setSearch(initialSearch); + setUsers(initialUsers); + setTotal(initialTotal); + }, [initialSearch, initialUsers, initialTotal]); + + function buildAdminUrl(nextSearch: string, nextPage: number) { + const params = new URLSearchParams(window.location.search); + const normalizedSearch = nextSearch.trim(); + + if (nextPage <= 1) { + params.delete("page"); + } else { + params.set("page", String(nextPage)); + } + + if (normalizedSearch) { + params.set("search", normalizedSearch); + } else { + params.delete("search"); + } + + const query = params.toString(); + return query ? `/admin?${query}` : "/admin"; + } + + function startCreate() { + setEditing({ + id: null, + username: "", + password: "", + isAdmin: false + }); + } + + function startEdit(user: AdminUserSummary) { + setEditing({ + id: user.id, + username: user.username, + password: "", + isAdmin: user.is_admin + }); + } + + async function handleSubmit(event: React.FormEvent) { + event.preventDefault(); + setSubmitting(true); + + try { + if (isCreateMode) { + await browserApi("/admin/users", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + username: editing.username, + password: editing.password, + is_admin: editing.isAdmin + }) + }); + toast.success("用户已创建"); + } else { + const updatePayload: Record = { + username: editing.username, + is_admin: editing.isAdmin + }; + + if (editing.password) { + updatePayload.password = editing.password; + } + + await browserApi(`/admin/users/${editing.id}`, { + method: "PUT", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(updatePayload) + }); + toast.success("用户已更新"); + } + + startCreate(); + router.refresh(); + } catch (error) { + toast.error(error instanceof Error ? error.message : "保存失败"); + } finally { + setSubmitting(false); + } + } + + async function handleDelete(user: AdminUserSummary) { + if (!window.confirm(`确认删除用户 ${user.username}?`)) { + return; + } + + setDeletingId(user.id); + try { + await browserApi(`/admin/users/${user.id}`, { + method: "DELETE" + }); + toast.success("用户已删除"); + if (editing.id === user.id) { + startCreate(); + } + if (users.length === 1 && initialPage > 1) { + router.push(buildAdminUrl(search, initialPage - 1)); + } else { + router.refresh(); + } + } catch (error) { + toast.error(error instanceof Error ? error.message : "删除失败"); + } finally { + setDeletingId(null); + } + } + + async function handleResetPassword(user: AdminUserSummary) { + const nextPassword = window.prompt(`给 ${user.username} 设置新密码`, ""); + if (!nextPassword) { + return; + } + + try { + await browserApi(`/admin/users/${user.id}/reset-password`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + new_password: nextPassword + }) + }); + toast.success("密码已重置"); + } catch (error) { + toast.error(error instanceof Error ? error.message : "重置失败"); + } + } + + function handleSearch(event: React.FormEvent) { + event.preventDefault(); + router.push(buildAdminUrl(search, 1)); + } + + return ( +
+ + + {title} + + +
+ + setEditing((current) => ({ ...current, username: event.target.value })) + } + required + /> + + setEditing((current) => ({ ...current, password: event.target.value })) + } + required={isCreateMode} + minLength={6} + /> + +
+ + {!isCreateMode ? ( + + ) : null} +
+
+
+
+ + + +
+ 用户 +
+ {total} 个用户 / {activeAdminCount} 个管理员 +
+
+
+
+ + setSearch(event.target.value)} + /> +
+ +
+
+ +
+ + + + + + + + + + + + + {users.map((user) => ( + + + + + + + + + ))} + {users.length === 0 ? ( + + + + ) : null} + +
用户角色题库错题创建时间操作
{user.username} + {user.is_admin ? "管理员" : "普通用户"} + {user.exam_count}{user.mistake_count}{formatDate(user.created_at)} +
+ + + +
+
+ 暂无用户 +
+
+ + +
+
+
+ ); +} diff --git a/web/src/components/app-shell/app-sidebar.tsx b/web/src/components/app-shell/app-sidebar.tsx new file mode 100644 index 0000000..820b5d5 --- /dev/null +++ b/web/src/components/app-shell/app-sidebar.tsx @@ -0,0 +1,77 @@ +"use client"; + +import Link from "next/link"; +import { usePathname } from "next/navigation"; +import { BookMarked, LayoutDashboard, Settings, Shield, SquareStack, Target, XCircle } from "lucide-react"; + +import { Badge } from "@/components/ui/badge"; +import { Separator } from "@/components/ui/separator"; +import { cn } from "@/lib/utils"; + +const baseNavigation = [ + { href: "/dashboard", label: "总览", icon: LayoutDashboard }, + { href: "/exams", label: "题库", icon: SquareStack }, + { href: "/questions", label: "题目", icon: BookMarked }, + { href: "/mistakes", label: "错题", icon: XCircle }, + { href: "/mistake-quiz", label: "错题练习", icon: Target } +]; + +const adminNavigation = [ + { href: "/admin", label: "管理", icon: Shield }, + { href: "/admin/settings", label: "系统设置", icon: Settings } +]; + +export function AppSidebar({ isAdmin }: { isAdmin: boolean }) { + const pathname = usePathname(); + const navigation = isAdmin + ? [...baseNavigation, ...adminNavigation] + : baseNavigation; + const activeHref = + navigation + .slice() + .sort((a, b) => b.href.length - a.href.length) + .find( + (item) => + pathname === item.href || + (item.href !== "/dashboard" && pathname.startsWith(`${item.href}/`)) + )?.href || ""; + + return ( + + ); +} diff --git a/web/src/components/app-shell/feature-placeholder.tsx b/web/src/components/app-shell/feature-placeholder.tsx new file mode 100644 index 0000000..77b2ed1 --- /dev/null +++ b/web/src/components/app-shell/feature-placeholder.tsx @@ -0,0 +1,65 @@ +import { ArrowRight, CheckCircle2 } from "lucide-react"; +import Link from "next/link"; + +import { PageHeader } from "@/components/app-shell/page-header"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle +} from "@/components/ui/card"; + +export function FeaturePlaceholder({ + eyebrow, + title, + description, + bullets, + ctaHref = "/dashboard", + ctaLabel = "返回首页" +}: { + eyebrow: string; + title: string; + description?: string; + bullets: string[]; + ctaHref?: string; + ctaLabel?: string; +}) { + return ( +
+ + +
+ + + 待接入 + 下一步会接真实数据和操作。 + + + {bullets.map((bullet) => ( +
+ +

{bullet}

+
+ ))} +
+
+ + + + 操作 + + + + + +
+
+ ); +} diff --git a/web/src/components/app-shell/logout-button.tsx b/web/src/components/app-shell/logout-button.tsx new file mode 100644 index 0000000..84b5eb9 --- /dev/null +++ b/web/src/components/app-shell/logout-button.tsx @@ -0,0 +1,33 @@ +"use client"; + +import { useRouter } from "next/navigation"; +import { LogOut } from "lucide-react"; +import { toast } from "sonner"; + +import { Button } from "@/components/ui/button"; + +export function LogoutButton() { + const router = useRouter(); + + async function handleLogout() { + const response = await fetch("/api/auth/logout", { + method: "POST" + }); + + if (!response.ok) { + toast.error("退出失败"); + return; + } + + toast.success("已退出登录"); + router.push("/login"); + router.refresh(); + } + + return ( + + ); +} diff --git a/web/src/components/app-shell/page-header.tsx b/web/src/components/app-shell/page-header.tsx new file mode 100644 index 0000000..a421f87 --- /dev/null +++ b/web/src/components/app-shell/page-header.tsx @@ -0,0 +1,27 @@ +import { Badge } from "@/components/ui/badge"; + +export function PageHeader({ + eyebrow, + title, + description +}: { + eyebrow?: string; + title: string; + description?: string; +}) { + return ( +
+ {eyebrow ? {eyebrow} : null} +
+

+ {title} +

+ {description ? ( +

+ {description} +

+ ) : null} +
+
+ ); +} diff --git a/web/src/components/app-shell/stat-card.tsx b/web/src/components/app-shell/stat-card.tsx new file mode 100644 index 0000000..50d2c38 --- /dev/null +++ b/web/src/components/app-shell/stat-card.tsx @@ -0,0 +1,38 @@ +import { LucideIcon } from "lucide-react"; + +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle +} from "@/components/ui/card"; + +export function StatCard({ + icon: Icon, + label, + value, + detail +}: { + icon: LucideIcon; + label: string; + value: string; + detail?: string; +}) { + return ( + + +
+
+ +
+
+ {label} + {value} +
+
+
+ {detail ? {detail} : null} +
+ ); +} diff --git a/web/src/components/app-shell/status-badge.tsx b/web/src/components/app-shell/status-badge.tsx new file mode 100644 index 0000000..5f13e73 --- /dev/null +++ b/web/src/components/app-shell/status-badge.tsx @@ -0,0 +1,15 @@ +import { Badge } from "@/components/ui/badge"; +import { getExamStatusLabel } from "@/lib/formatters"; + +export function StatusBadge({ status }: { status: string }) { + const variant = + status === "ready" + ? "success" + : status === "failed" + ? "destructive" + : status === "processing" + ? "warning" + : "outline"; + + return {getExamStatusLabel(status)}; +} diff --git a/web/src/components/exams/exam-detail-client.tsx b/web/src/components/exams/exam-detail-client.tsx new file mode 100644 index 0000000..026a179 --- /dev/null +++ b/web/src/components/exams/exam-detail-client.tsx @@ -0,0 +1,232 @@ +"use client"; + +import Link from "next/link"; +import { useEffect, useMemo, useRef, useState } from "react"; +import { useRouter } from "next/navigation"; +import { AlertCircle, FileText, Loader2, Play, RefreshCw, Upload } from "lucide-react"; +import { toast } from "sonner"; + +import { StatusBadge } from "@/components/app-shell/status-badge"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { browserApi } from "@/lib/api/browser"; +import { formatDate } from "@/lib/formatters"; +import { ExamSummary, ExamUploadResponse, ProgressEvent } from "@/lib/types"; + +export function ExamDetailClient({ + initialExam +}: { + initialExam: ExamSummary; +}) { + const router = useRouter(); + const eventSourceRef = useRef(null); + const [exam, setExam] = useState(initialExam); + const [selectedFile, setSelectedFile] = useState(null); + const [uploading, setUploading] = useState(false); + const [progress, setProgress] = useState(null); + + const isProcessing = exam.status === "processing"; + + useEffect(() => { + if (!isProcessing) { + if (eventSourceRef.current) { + eventSourceRef.current.close(); + eventSourceRef.current = null; + } + return; + } + + const source = new EventSource(`/api/exams/${exam.id}/progress`); + eventSourceRef.current = source; + + source.onmessage = (event) => { + const payload = JSON.parse(event.data) as ProgressEvent; + setProgress(payload); + + if (payload.status === "completed") { + toast.success(payload.message); + source.close(); + eventSourceRef.current = null; + reloadExam(); + } + + if (payload.status === "failed") { + toast.error(payload.message); + source.close(); + eventSourceRef.current = null; + reloadExam(); + } + }; + + source.onerror = () => { + source.close(); + eventSourceRef.current = null; + }; + + return () => { + source.close(); + eventSourceRef.current = null; + }; + }, [isProcessing, exam.id]); + + async function reloadExam() { + try { + const payload = await browserApi(`/exams/${exam.id}`, { + method: "GET" + }); + setExam(payload); + router.refresh(); + } catch (error) { + toast.error(error instanceof Error ? error.message : "刷新失败"); + } + } + + async function handleUpload(event: React.FormEvent) { + event.preventDefault(); + if (!selectedFile) { + toast.error("请选择文件"); + return; + } + + const formData = new FormData(); + formData.append("file", selectedFile); + + setUploading(true); + try { + const payload = await browserApi(`/exams/${exam.id}/append`, { + method: "POST", + body: formData + }); + setExam((current) => ({ ...current, status: payload.status as ExamSummary["status"] })); + setProgress(null); + setSelectedFile(null); + toast.success("文档已提交"); + } catch (error) { + toast.error(error instanceof Error ? error.message : "上传失败"); + } finally { + setUploading(false); + } + } + + const progressValue = useMemo(() => { + if (isProcessing) { + return Math.round(Number(progress?.progress || 0)); + } + + if (exam.total_questions <= 0) { + return 0; + } + + return Math.round((exam.current_index / exam.total_questions) * 100); + }, [exam.current_index, exam.total_questions, isProcessing, progress]); + + return ( +
+ + +
+ {exam.title} + +
+
+ + {exam.total_questions > 0 ? ( + + ) : null} +
+
+ +
+
+
题目
+
+ {exam.total_questions} +
+
+
+
已完成
+
+ {exam.current_index} +
+
+
+
剩余
+
+ {Math.max(0, exam.total_questions - exam.current_index)} +
+
+
+
进度
+
+ {progressValue}% +
+
+
+ +
+
+
+
+ {progress ? ( +
{progress.message}
+ ) : null} +
+ +
+
创建时间:{formatDate(exam.created_at)}
+
更新时间:{formatDate(exam.updated_at)}
+
+ + {exam.status === "failed" ? ( +
+ + 解析失败,请重新上传文档。 +
+ ) : null} + + + + + + 追加文档 + + +
+ setSelectedFile(event.target.files?.[0] || null)} + required + /> + +
+ +
+
+ + 支持 TXT / PDF / DOC / DOCX / XLSX / XLS +
+
处理过程中会自动去重。
+
+
+
+
+ ); +} diff --git a/web/src/components/exams/exams-page-client.tsx b/web/src/components/exams/exams-page-client.tsx new file mode 100644 index 0000000..2034792 --- /dev/null +++ b/web/src/components/exams/exams-page-client.tsx @@ -0,0 +1,219 @@ +"use client"; + +import Link from "next/link"; +import { useRouter } from "next/navigation"; +import { useEffect, useState } from "react"; +import { Loader2, Plus, Trash2 } from "lucide-react"; +import { toast } from "sonner"; + +import { StatusBadge } from "@/components/app-shell/status-badge"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { PaginationControls } from "@/components/ui/pagination-controls"; +import { browserApi } from "@/lib/api/browser"; +import { formatDate, formatRelativeTime } from "@/lib/formatters"; +import { ExamSummary } from "@/lib/types"; + +export function ExamsPageClient({ + initialExams, + initialTotal, + page, + pageSize +}: { + initialExams: ExamSummary[]; + initialTotal: number; + page: number; + pageSize: number; +}) { + const router = useRouter(); + const [title, setTitle] = useState(""); + const [file, setFile] = useState(null); + const [creating, setCreating] = useState(false); + const [deletingId, setDeletingId] = useState(null); + const [exams, setExams] = useState(initialExams); + const [total, setTotal] = useState(initialTotal); + + useEffect(() => { + setExams(initialExams); + setTotal(initialTotal); + }, [initialExams, initialTotal]); + + function goToPage(targetPage: number) { + const params = new URLSearchParams(window.location.search); + if (targetPage <= 1) { + params.delete("page"); + } else { + params.set("page", String(targetPage)); + } + + const query = params.toString(); + router.push(query ? `/exams?${query}` : "/exams"); + } + + async function handleCreate(event: React.FormEvent) { + event.preventDefault(); + if (!file) { + toast.error("请选择文件"); + return; + } + + const formData = new FormData(); + formData.append("title", title); + formData.append("file", file); + formData.append("is_random", "false"); + + setCreating(true); + try { + const response = await browserApi<{ exam_id: number }>("/exams/create", { + method: "POST", + body: formData + }); + + toast.success("题库已创建"); + setTitle(""); + setFile(null); + router.push(`/exams/${response.exam_id}`); + router.refresh(); + } catch (error) { + toast.error(error instanceof Error ? error.message : "创建失败"); + } finally { + setCreating(false); + } + } + + async function handleDelete(examId: number) { + if (!window.confirm("确认删除这个题库?")) { + return; + } + + setDeletingId(examId); + try { + await browserApi(`/exams/${examId}`, { + method: "DELETE" + }); + + setExams((current) => current.filter((exam) => exam.id !== examId)); + setTotal((current) => Math.max(0, current - 1)); + toast.success("题库已删除"); + if (exams.length === 1 && page > 1) { + goToPage(page - 1); + } else { + router.refresh(); + } + } catch (error) { + toast.error(error instanceof Error ? error.message : "删除失败"); + } finally { + setDeletingId(null); + } + } + + return ( +
+ + + 新建题库 + + +
+ setTitle(event.target.value)} + placeholder="题库名称" + required + /> + setFile(event.target.files?.[0] || null)} + required + /> + +
+
+
+ + + +
+ 题库列表 +
{total} 条
+
+
+ + {exams.length === 0 ? ( +
+ 暂无题库 +
+ ) : ( +
+ + + + + + + + + + + + {exams.map((exam) => ( + + + + + + + + ))} + +
名称状态题目更新时间操作
+ + {exam.title} + +
{formatDate(exam.created_at)}
+
+ + + {exam.current_index}/{exam.total_questions} + + {formatRelativeTime(exam.updated_at)} + +
+ + +
+
+
+ )} + + +
+
+
+ ); +} diff --git a/web/src/components/mistakes/mistake-list-client.tsx b/web/src/components/mistakes/mistake-list-client.tsx new file mode 100644 index 0000000..024db06 --- /dev/null +++ b/web/src/components/mistakes/mistake-list-client.tsx @@ -0,0 +1,143 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { useRouter } from "next/navigation"; +import { Loader2, Trash2 } from "lucide-react"; +import { toast } from "sonner"; + +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { PaginationControls } from "@/components/ui/pagination-controls"; +import { browserApi } from "@/lib/api/browser"; +import { formatDate, getQuestionTypeLabel } from "@/lib/formatters"; +import { MistakeListResponse } from "@/lib/types"; + +type MistakeItem = MistakeListResponse["mistakes"][number]; + +export function MistakeListClient({ + initialMistakes, + initialTotal, + page, + pageSize +}: { + initialMistakes: MistakeItem[]; + initialTotal: number; + page: number; + pageSize: number; +}) { + const router = useRouter(); + const [mistakes, setMistakes] = useState(initialMistakes); + const [total, setTotal] = useState(initialTotal); + const [deletingId, setDeletingId] = useState(null); + + useEffect(() => { + setMistakes(initialMistakes); + setTotal(initialTotal); + }, [initialMistakes, initialTotal]); + + function goToPage(targetPage: number) { + const params = new URLSearchParams(window.location.search); + if (targetPage <= 1) { + params.delete("page"); + } else { + params.set("page", String(targetPage)); + } + + const query = params.toString(); + router.push(query ? `/mistakes?${query}` : "/mistakes"); + } + + async function handleDelete(mistake: MistakeItem) { + setDeletingId(mistake.id); + try { + await browserApi(`/mistakes/${mistake.id}`, { + method: "DELETE" + }); + setMistakes((current) => current.filter((item) => item.id !== mistake.id)); + setTotal((current) => Math.max(0, current - 1)); + toast.success("已移除"); + if (mistakes.length === 1 && page > 1) { + goToPage(page - 1); + } else { + router.refresh(); + } + } catch (error) { + toast.error(error instanceof Error ? error.message : "删除失败"); + } finally { + setDeletingId(null); + } + } + + return ( + + + 错题 +
{total} 条
+
+ + {mistakes.length === 0 ? ( +
+ 暂无错题 +
+ ) : ( +
+ + + + + + + + + + + + {mistakes.map((mistake) => ( + + + + + + + + ))} + +
题目类型答案加入时间操作
+
{mistake.question.content}
+
+ {getQuestionTypeLabel(mistake.question.type)} + +
{mistake.question.answer}
+
+ {formatDate(mistake.created_at)} + +
+ +
+
+
+ )} + + +
+
+ ); +} diff --git a/web/src/components/practice/mistake-practice-client.tsx b/web/src/components/practice/mistake-practice-client.tsx new file mode 100644 index 0000000..2a6185a --- /dev/null +++ b/web/src/components/practice/mistake-practice-client.tsx @@ -0,0 +1,263 @@ +"use client"; + +import { useEffect, useMemo, useState } from "react"; +import { useRouter, useSearchParams } from "next/navigation"; +import { ArrowLeft, ArrowRight, Check, Loader2, Trash2, X } from "lucide-react"; +import { toast } from "sonner"; + +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { browserApi } from "@/lib/api/browser"; +import { AnswerCheckResponse, MistakeListResponse } from "@/lib/types"; +import { getQuestionTypeLabel } from "@/lib/formatters"; + +type MistakeItem = MistakeListResponse["mistakes"][number]; + +export function MistakePracticeClient() { + const router = useRouter(); + const searchParams = useSearchParams(); + const [mistakes, setMistakes] = useState([]); + const [currentIndex, setCurrentIndex] = useState(0); + const [loading, setLoading] = useState(true); + const [submitting, setSubmitting] = useState(false); + const [result, setResult] = useState(null); + const [userAnswer, setUserAnswer] = useState(""); + const [multipleAnswers, setMultipleAnswers] = useState([]); + + useEffect(() => { + void loadMistakes(); + }, []); + + async function loadMistakes() { + setLoading(true); + try { + const payload = await browserApi("/mistakes/?skip=0&limit=1000", { + method: "GET" + }); + + let nextMistakes = payload.mistakes; + if (searchParams.get("mode") === "random") { + nextMistakes = [...payload.mistakes].sort(() => Math.random() - 0.5); + } + + nextMistakes = nextMistakes.map((item) => { + if (item.question.type === "judge" && (!item.question.options || item.question.options.length === 0)) { + item.question.options = ["A. 正确", "B. 错误"]; + } + return item; + }); + + setMistakes(nextMistakes); + setCurrentIndex(0); + setResult(null); + setUserAnswer(""); + setMultipleAnswers([]); + } catch (error) { + toast.error(error instanceof Error ? error.message : "加载失败"); + } finally { + setLoading(false); + } + } + + const currentMistake = mistakes[currentIndex] || null; + const question = currentMistake?.question || null; + const progressText = useMemo( + () => (mistakes.length ? `${currentIndex + 1} / ${mistakes.length}` : "0 / 0"), + [currentIndex, mistakes.length] + ); + + async function handleSubmit() { + if (!question) { + return; + } + + let answer = userAnswer; + if (question.type === "multiple") { + if (multipleAnswers.length === 0) { + toast.error("请至少选择一个选项"); + return; + } + answer = [...multipleAnswers].sort().join(""); + } + + if (!answer.trim()) { + toast.error("请输入答案"); + return; + } + + setSubmitting(true); + try { + const payload = await browserApi("/questions/check", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + question_id: question.id, + user_answer: answer + }) + }); + setResult(payload); + } catch (error) { + toast.error(error instanceof Error ? error.message : "提交失败"); + } finally { + setSubmitting(false); + } + } + + async function handleRemove() { + if (!currentMistake) { + return; + } + + try { + await browserApi(`/mistakes/${currentMistake.id}`, { + method: "DELETE" + }); + const nextList = mistakes.filter((item) => item.id !== currentMistake.id); + setMistakes(nextList); + setCurrentIndex((current) => Math.max(0, Math.min(current, nextList.length - 1))); + setResult(null); + setUserAnswer(""); + setMultipleAnswers([]); + toast.success("已移除"); + } catch (error) { + toast.error(error instanceof Error ? error.message : "移除失败"); + } + } + + function handleNext() { + if (currentIndex < mistakes.length - 1) { + setCurrentIndex((current) => current + 1); + setResult(null); + setUserAnswer(""); + setMultipleAnswers([]); + return; + } + + toast.success("已完成"); + router.push("/mistakes"); + } + + if (loading) { + return ( +
+ +
+ ); + } + + if (!question) { + return ( +
+ 错题本为空 +
+ ); + } + + return ( +
+
+ +
{progressText}
+
+ + + +
+ {question.content} +
{getQuestionTypeLabel(question.type)}
+
+ +
+ + {question.options?.length ? ( +
+ {question.options.map((option) => { + const letter = option.charAt(0); + const selected = + question.type === "multiple" + ? multipleAnswers.includes(letter) + : userAnswer === letter; + + return ( + + ); + })} +
+ ) : null} + + {question.type === "short" ? ( +

SHH%l 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 z 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 literal 0 HcmV?d00001 diff --git a/frontend/index.html b/frontend/index.html index 2915a45..4182b3c 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -6,14 +6,6 @@ QQuiz - 智能刷题平台 - - -