# QuickQuiz

QuickQuiz 是一个前后端分离题库系统。后端为 Laravel + MySQL + JWT + hg/apidoc 注解路由，前端为 Vue 3 + Vite + TypeScript + Element Plus + UnoCSS + Pinia。

 ## Requirements

- PHP 8.3+
- Composer 2+
- MySQL 8 或兼容版本
- Node.js 22+
- npm 10+

## Backend Setup

```bash
composer install
copy .env.example .env
php artisan key:generate
php artisan jwt:secret --force
```

编辑 `.env` 中的 MySQL 配置：

```env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=quickquiz
DB_USERNAME=root
DB_PASSWORD=
```

phpStudy 默认 MySQL 密码常见为 `root`，如果连接失败请改为：

```env
DB_PASSWORD=root
```

创建数据库后执行：

```bash
php artisan quickquiz:install --fresh
php artisan serve
```

默认管理员：

- 邮箱：`admin@example.com`
- 密码：`123456`

## Frontend Setup

```bash
cd frontend
npm install
npm run dev
```

前端默认代理：

- `/api` -> `http://127.0.0.1:8000`
- `/apidoc` -> `http://127.0.0.1:8000`

## API Documentation

控制器使用 `hg/apidoc` 注解描述 URL、Method、分组和标题。项目额外提供 `App\Providers\ApidocRouteServiceProvider`，用于兼容 Laravel 13 下 `RouteMiddleware` 注解解析结构，并按注解自动注册业务 API 路由。

访问路径：

```text
http://127.0.0.1:8000/apidoc
```

## Testing

本项目测试按 MySQL 配置，默认测试库为 `quickquiz_test`。先创建测试库：

```sql
CREATE DATABASE quickquiz_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

然后执行：

```bash
php artisan test
```

当前环境如果没有启动 MySQL，数据库迁移和 Feature 测试会失败。

## Verification Commands

```bash
php artisan route:list --path=api
vendor\bin\pint --test
cd frontend
npm run build
```

## Import Format

当前 `question.json` 支持如下数组格式：

```json
[
  {
    "questionId": "405323271",
    "questionText": "题干",
    "answerCorrect": true,
    "options": [
      { "text": "选项 A", "correct": false },
      { "text": "选项 B", "correct": true }
    ]
  }
]
```

导入规则：

- 根据正确选项数量识别单选/多选。
- 两个选项且文本为“对/错”时识别判断题。
- `answerCorrect` 不作为答案来源。
- 解析允许为空。
- 同一题库内按题干、选项文本和正确标记去重。
- 重复题跳过；格式错误导致整批回滚。
