# Apifox Flow 命令行使用指南

## 基本用法

### 查看帮助信息
```bash
# 查看主帮助
cargo run -- --help

# 查看生成命令帮助
cargo run -- generate --help

# 查看列出文件夹命令帮助
cargo run -- list-folders --help
```

### 列出所有可用的文件夹
```bash
cargo run -- list-folders
```

输出示例：
```
可用的文件夹列表:
==================
1. A/B Test (9 个 API 端点)
2. AI Bot (4 个 API 端点)
3. Brand Ambassador (1 个 API 端点)
4. Broadcast (4 个 API 端点)
5. Campaign Registrations (2 个 API 端点)
6. Cashback (1 个 API 端点)
7. Cashier Marketing (4 个 API 端点)
8. Category (6 个 API 端点)
9. Coin (1 个 API 端点)
10. Container (1 个 API 端点)
11. Curated Reward (2 个 API 端点)
12. Customer Service (20 个 API 端点)
13. Deals & Banner (5 个 API 端点)
14. Deeplink (1 个 API 端点)
15. Digital Goods (3 个 API 端点)
16. Enums (2 个 API 端点)
17. Floating Button (4 个 API 端点)
18. Floor (4 个 API 端点)
19. Homepage marketing (8 个 API 端点)
20. I18n Text (3 个 API 端点)
21. Icon (2 个 API 端点)
22. LandingPage (6 个 API 端点)
23. Lucky Draw (20 个 API 端点)
24. MQ (2 个 API 端点)
25. Marketing Feeds (7 个 API 端点)
26. Media (1 个 API 端点)
27. Merchandise (3 个 API 端点)
28. Merchant (11 个 API 端点)
29. Merchant Brand (5 个 API 端点)
30. Merchant Brand Group (6 个 API 端点)
31. Milestone (3 个 API 端点)
32. Mkt Theme (4 个 API 端点)
33. Page (2 个 API 端点)
34. PaymentMethods (3 个 API 端点)
35. Points Distribution (3 个 API 端点)
36. Popup (4 个 API 端点)
37. Product (4 个 API 端点)
38. PushNotification (5 个 API 端点)
39. QA (2 个 API 端点)
40. Referral Program (4 个 API 端点)
41. Return KYC (4 个 API 端点)
42. Rewards Center (4 个 API 端点)
43. Sales Campaign (7 个 API 端点)
44. Shortcuts (4 个 API 端点)
45. Task Center (7 个 API 端点)
46. Textline (5 个 API 端点)
47. User Group (11 个 API 端点)
48. Voucher (3 个 API 端点)
49. contract (7 个 API 端点)
50. financial widget (5 个 API 端点)
51. upload (2 个 API 端点)
52. 公共分类 Public Classification (2 个 API 端点)
53. 公共分类 Public Classification/Access Control (6 个 API 端点)
```

## 生成代码

### 生成所有代码（默认行为）
```bash
# 使用默认设置生成所有代码
cargo run -- generate

# 指定输出目录
cargo run -- generate --output my_api_code

# 指定项目 ID
cargo run -- generate --project-id 123

# 指定 Apifox 服务地址
cargo run -- generate --base-url http://localhost:4523
```

### 生成指定文件夹的代码
```bash
# 生成 Customer Service 文件夹的代码
cargo run -- generate --folder "Customer Service"

# 生成 Lucky Draw 文件夹的代码到指定目录
cargo run -- generate --folder "Lucky Draw" --output lucky_draw_api

# 生成中文文件夹的代码
cargo run -- generate --folder "公共分类 Public Classification"

# 生成特殊字符文件夹的代码
cargo run -- generate --folder "A/B Test"
cargo run -- generate --folder "Deals & Banner"
```

### 使用模板生成代码
```bash
# 使用高级模板（包含超时、重试等高级功能）
cargo run -- generate --template advanced

# 使用 React 模板（生成 React Hooks）
cargo run -- generate --template react

# 使用 Oboss 模板（函数式导出，支持 Mock）
cargo run -- generate --template oboss

# 使用自定义模板目录
cargo run -- generate --template-dir my_templates

# 结合文件夹和模板
cargo run -- generate --folder "Customer Service" --template advanced
cargo run -- generate --folder "Lucky Draw" --template react --output react_api
```

### 完整参数示例
```bash
# 生成指定文件夹，使用自定义参数
cargo run -- generate \
  --folder "Customer Service" \
  --output customer_service_api \
  --project-id 162 \
  --base-url http://127.0.0.1:4523
```

## 错误处理

### 文件夹不存在
当指定的文件夹不存在时，程序会显示错误信息并列出所有可用的文件夹：

```bash
cargo run -- generate --folder "不存在的文件夹"
```

输出：
```
错误: 文件夹 '不存在的文件夹' 不存在
可用的文件夹列表:
==================
1. A/B Test (9 个 API 端点)
2. AI Bot (4 个 API 端点)
...
使用方法:
cargo run generate --folder "文件夹名称"
例如: cargo run generate --folder "Customer Service"
```

### 网络连接错误
当无法连接到 Apifox 服务时：
```bash
cargo run -- generate --base-url http://invalid-url:4523
```

输出：
```
请求失败，状态码：Connection refused
错误信息：...
```

## 常用命令组合

### 开发工作流
```bash
# 1. 查看所有可用文件夹
cargo run -- list-folders

# 2. 生成特定模块进行开发
cargo run -- generate --folder "Customer Service" --output src/api

# 3. 生成所有代码用于生产
cargo run -- generate --output dist/api
```

### 批量生成多个模块
```bash
# 生成客户服务模块
cargo run -- generate --folder "Customer Service" --output modules/customer_service

# 生成抽奖模块
cargo run -- generate --folder "Lucky Draw" --output modules/lucky_draw

# 生成商户模块
cargo run -- generate --folder "Merchant" --output modules/merchant
```

### 使用脚本自动化
创建 `generate_modules.sh` 脚本：
```bash
#!/bin/bash

modules=(
  "Customer Service"
  "Lucky Draw"
  "Merchant"
  "Voucher"
  "User Group"
)

for module in "${modules[@]}"; do
  echo "生成模块: $module"
  cargo run -- generate --folder "$module" --output "modules/$(echo $module | tr ' ' '_' | tr '[:upper:]' '[:lower:]')"
done
```

## 参数说明

| 参数 | 短参数 | 默认值 | 说明 |
|------|--------|--------|------|
| `--folder` | `-f` | 无 | 指定要生成的文件夹名称 |
| `--output` | `-o` | `generated_by_folders` | 输出目录 |
| `--project-id` | `-p` | `162` | Apifox 项目 ID |
| `--base-url` | `-b` | `http://127.0.0.1:4523` | Apifox 服务地址 |
| `--template` | `-t` | `default` | 模板类型 (default, advanced, react, oboss) |
| `--template-dir` | 无 | 无 | 自定义模板目录 |

## 注意事项

1. **文件夹名称**: 必须使用完整的文件夹名称，包括空格和特殊字符
2. **中文支持**: 支持中文文件夹名称，如 "公共分类 Public Classification"
3. **特殊字符**: 支持特殊字符，如 "A/B Test"、"Deals & Banner"
4. **输出目录**: 如果目录不存在会自动创建
5. **覆盖文件**: 每次运行都会覆盖已存在的文件

## 高级用法

### 使用环境变量
```bash
# 设置环境变量
export APIFOX_PROJECT_ID=162
export APIFOX_BASE_URL=http://127.0.0.1:4523

# 使用环境变量（需要修改代码支持）
cargo run -- generate --folder "Customer Service"
```

### 集成到 CI/CD
```yaml
# GitHub Actions 示例
- name: Generate API Code
  run: |
    cargo run -- generate --folder "Customer Service" --output src/api/customer_service
    cargo run -- generate --folder "Lucky Draw" --output src/api/lucky_draw
```

### 使用 Makefile
```makefile
.PHONY: list-folders generate-all generate-customer-service

list-folders:
	cargo run -- list-folders

generate-all:
	cargo run -- generate

generate-customer-service:
	cargo run -- generate --folder "Customer Service" --output src/api/customer_service

generate-lucky-draw:
	cargo run -- generate --folder "Lucky Draw" --output src/api/lucky_draw
```
