# Config API 测试指南

## 问题解决

### 问题: API文档打不开

**原因**: `adminConfigRoutes.js` 中使用了错误的中间件函数名 `checkPermission`,应该使用 `requireAdmin`

**解决方案**: 已修复,将 `checkPermission` 替换为 `requireAdmin`

### 问题: config表不存在

**原因**: 数据库迁移中包含了config表定义,但可能没有正确执行

**解决方案**: 运行 `node create-config-table.js` 创建表并初始化默认配置

## API访问地址

### 1. Swagger UI (推荐)
```
http://localhost:3000/api-docs
```
在浏览器中打开,可以查看所有API文档并进行测试

### 2. OpenAPI JSON
```
http://localhost:3000/api-docs.json
```
获取完整的OpenAPI规范JSON

### 3. OpenAPI YAML
```
http://localhost:3000/api-docs.yaml
```
获取完整的OpenAPI规范YAML

## 测试Config API

### 方法1: 使用测试脚本

```bash
cd backend
node test-config-api.js
```

### 方法2: 使用curl命令

#### 测试公开配置API (无需认证)

```bash
# 获取所有公开配置
curl http://localhost:3000/api/v1/config
```

**响应示例:**
```json
{
  "code": 0,
  "message": "Configuration retrieved successfully",
  "data": {
    "app_logo": "",
    "about_us_image": "",
    "app_name": "Overseas Appointment System",
    "contact_phone": "",
    "contact_email": ""
  }
}
```

#### 测试管理后台配置API (需要认证)

**步骤1: 登录获取token**

```bash
curl -X POST http://localhost:3000/api/v1/admin/auth/login \
  -H "Content-Type: application/json" \
  -d "{\"username\":\"admin\",\"password\":\"admin123\"}"
```

**响应示例:**
```json
{
  "code": 0,
  "message": "Login successful",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "admin": {
      "id": "...",
      "username": "admin",
      "role": "super_admin"
    }
  }
}
```

**步骤2: 使用token访问配置API**

```bash
# 设置token变量
TOKEN="your_token_here"

# 获取所有配置
curl http://localhost:3000/api/v1/admin/config \
  -H "Authorization: Bearer $TOKEN"

# 获取单个配置
curl http://localhost:3000/api/v1/admin/config/app_name \
  -H "Authorization: Bearer $TOKEN"

# 更新配置
curl -X PUT http://localhost:3000/api/v1/admin/config/app_name \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"value\":\"My App\",\"type\":\"string\",\"category\":\"general\",\"description\":\"Application name\"}"

# 删除配置 (谨慎使用)
curl -X DELETE http://localhost:3000/api/v1/admin/config/custom_key \
  -H "Authorization: Bearer $TOKEN"
```

### 方法3: 使用Swagger UI测试

1. 打开浏览器访问: http://localhost:3000/api-docs
2. 找到 "Config" 或 "Admin - Config" 标签
3. 点击要测试的接口
4. 点击 "Try it out" 按钮
5. 填写参数
6. 点击 "Execute" 执行请求
7. 查看响应结果

**对于需要认证的接口:**
1. 先测试登录接口获取token
2. 点击页面右上角的 "Authorize" 按钮
3. 输入 `Bearer your_token_here`
4. 点击 "Authorize"
5. 现在可以测试需要认证的接口了

## 管理后台测试

### 启动管理后台

```bash
cd admin
npm run dev
```

访问: http://localhost:5173 (或显示的端口)

### 登录管理后台

- 用户名: `admin`
- 密码: `admin123` (或你设置的密码)

### 访问系统配置页面

1. 登录后,点击左侧菜单的 "系统配置"
2. 可以看到三个标签页:
   - 外观配置: 上传Logo和关于我们图片
   - 基本信息: 设置应用名称
   - 联系方式: 设置联系电话和邮箱

### 测试配置功能

1. **上传Logo**
   - 点击Logo上传区域
   - 选择图片文件 (PNG/JPG, 最大5MB)
   - 等待上传完成
   - 点击"保存外观配置"

2. **修改应用名称**
   - 切换到"基本信息"标签
   - 修改应用名称
   - 点击"保存基本信息"

3. **设置联系方式**
   - 切换到"联系方式"标签
   - 输入联系电话和邮箱
   - 点击"保存联系方式"

4. **验证配置生效**
   - 刷新页面,检查配置是否保存
   - 或者调用公开API查看配置

## 常见问题

### Q: API文档页面空白或加载失败

**A**: 检查以下几点:
1. 后端服务是否正常运行: `http://localhost:3000/health`
2. 查看后端日志是否有错误
3. 检查浏览器控制台是否有JavaScript错误
4. 尝试清除浏览器缓存

### Q: 配置保存后不生效

**A**: 
1. 检查Redis是否正常运行
2. 清除Redis缓存: `redis-cli FLUSHDB`
3. 重启后端服务

### Q: 图片上传失败

**A**:
1. 检查 `backend/uploads` 目录是否存在且有写入权限
2. 检查文件大小是否超过5MB
3. 检查文件格式是否为PNG或JPG
4. 查看后端日志获取详细错误信息

### Q: 401 Unauthorized错误

**A**:
1. 确认已登录并获取token
2. 检查token是否过期
3. 确认请求头格式: `Authorization: Bearer <token>`
4. 检查用户是否有管理员权限

### Q: 403 Forbidden错误

**A**:
1. 确认用户角色是否为admin或super_admin
2. 检查RBAC权限配置
3. 查看后端日志获取详细权限信息

## 数据库操作

### 查看config表数据

使用数据库客户端或命令行:

```sql
USE overseas_appointment;
SELECT * FROM config;
```

### 手动插入配置

```sql
INSERT INTO config (id, `key`, value, type, category, description, created_at, updated_at)
VALUES (UUID(), 'custom_key', 'custom_value', 'string', 'general', 'Custom configuration', NOW(), NOW());
```

### 清空配置表 (谨慎!)

```sql
TRUNCATE TABLE config;
```

然后运行初始化脚本恢复默认配置:
```bash
node create-config-table.js
```

## 开发建议

### 添加新配置项

1. 在 `configService.js` 的 `initializeDefaults` 方法中添加默认值
2. 在管理后台页面添加对应的表单字段
3. 如需公开给小程序,在 `getPublicConfigs` 方法中添加配置键名
4. 更新API文档

### 配置缓存策略

- 默认缓存时间: 1小时
- 修改配置时自动清除缓存
- 可在 `configService.js` 中调整 `CACHE_TTL` 常量

### 安全建议

1. 不要在公开API中暴露敏感配置
2. 定期备份配置数据
3. 重要配置修改前先记录当前值
4. 使用环境变量存储真正的敏感信息(如密钥)

## 相关文件

- API文档: `backend/src/docs/admin-config.docs.js`, `backend/src/docs/config.docs.js`
- 路由: `backend/src/routes/adminConfigRoutes.js`, `backend/src/routes/configRoutes.js`
- 控制器: `backend/src/controllers/adminConfigController.js`, `backend/src/controllers/configController.js`
- 服务: `backend/src/services/configService.js`
- 模型: `backend/src/models/Config.js`
- 前端页面: `admin/src/views/config/index.vue`
- 测试脚本: `backend/test-config-api.js`, `backend/create-config-table.js`
- 完整文档: `CONFIG_MANAGEMENT.md`
