All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 43s
5.2 KiB
5.2 KiB
Gateway Config Specification
Gateway API 的配置集成规范,定义配置结构和加载方式。
ADDED Requirements
Requirement: Gateway 配置结构
系统 SHALL 在 pkg/config/config.go 中添加 GatewayConfig 结构体。
配置字段:
BaseURL string- Gateway API 基础 URLAppID string- 应用 IDAppSecret string- 应用密钥Timeout int- 请求超时时间(秒)
Scenario: 配置结构定义
- WHEN 定义
GatewayConfig结构体 - THEN 包含
mapstructure标签用于 Viper 解析 - AND 字段名使用 snake_case(如
base_url、app_id)
Scenario: 集成到主配置
- WHEN 在
Config结构体中添加Gateway GatewayConfig字段 - THEN 使用
mapstructure:"gateway"标签 - AND 配置可通过
config.Get().Gateway访问
Requirement: 默认配置嵌入
系统 SHALL 在 pkg/config/defaults/config.yaml 中添加 Gateway 默认配置。
Scenario: 嵌入默认配置
- WHEN 读取嵌入的默认配置文件
- THEN 包含
gateway配置节 - AND 配置包含:
gateway: base_url: "https://lplan.whjhft.com/openapi" app_id: "60bgt1X8i7AvXqkd" app_secret: "BZeQttaZQt0i73moF" timeout: 30
Requirement: 环境变量覆盖
系统 SHALL 支持通过环境变量覆盖 Gateway 配置。
环境变量格式:JUNHONG_GATEWAY_{KEY}
Scenario: 覆盖 BaseURL
- WHEN 设置环境变量
JUNHONG_GATEWAY_BASE_URL=https://test.example.com - THEN
config.Gateway.BaseURL的值为 "https://test.example.com" - AND 覆盖嵌入配置中的默认值
Scenario: 覆盖 AppID
- WHEN 设置环境变量
JUNHONG_GATEWAY_APP_ID=test_app_id - THEN
config.Gateway.AppID的值为 "test_app_id"
Scenario: 覆盖 AppSecret
- WHEN 设置环境变量
JUNHONG_GATEWAY_APP_SECRET=test_secret - THEN
config.Gateway.AppSecret的值为 "test_secret"
Scenario: 覆盖 Timeout
- WHEN 设置环境变量
JUNHONG_GATEWAY_TIMEOUT=60 - THEN
config.Gateway.Timeout的值为 60
Requirement: 配置验证
系统 SHALL 在配置加载后验证 Gateway 配置的有效性。
Scenario: 必填字段验证
- WHEN 配置加载完成
- THEN 验证
BaseURL、AppID、AppSecret不为空 - AND 如果为空,返回明确的错误信息
Scenario: BaseURL 格式验证
- WHEN 验证
BaseURL字段 - THEN 必须以
http://或https://开头 - AND 不能以
/结尾
Scenario: Timeout 范围验证
- WHEN 验证
Timeout字段 - THEN 值必须在 5 到 300 秒之间
- AND 如果超出范围,返回验证错误
Scenario: AppID 格式验证
- WHEN 验证
AppID字段 - THEN 长度必须 > 0
- AND 不包含特殊字符(仅允许字母、数字、下划线)
Requirement: 敏感配置处理
系统 SHALL 确保 AppSecret 不记录到日志中。
Scenario: 配置日志脱敏
- WHEN 记录配置加载成功的日志
- THEN
AppSecret字段显示为 "***" - AND 实际值不出现在日志中
Scenario: 错误日志脱敏
- WHEN 配置验证失败并记录错误日志
- THEN
AppSecret字段显示为 "***"
Requirement: Gateway 客户端初始化
系统 SHALL 在 internal/bootstrap/bootstrap.go 中初始化 Gateway 客户端。
Scenario: Bootstrap 中初始化
- WHEN 调用
bootstrap.Bootstrap(deps) - THEN 从
deps.Config.Gateway读取配置 - AND 调用
gateway.NewClient(baseURL, appID, appSecret).WithTimeout(...) - AND 将客户端赋值给
deps.GatewayClient
Scenario: 配置错误时启动失败
- WHEN Gateway 配置验证失败
- THEN
bootstrap.Bootstrap返回错误 - AND 应用启动失败
Requirement: 多环境配置支持
系统 SHALL 支持通过环境变量切换不同环境的 Gateway 配置。
Scenario: 开发环境配置
- WHEN 使用默认嵌入配置(未设置环境变量)
- THEN 使用生产环境的 Gateway URL 和凭证
Scenario: 测试环境配置
- WHEN 设置环境变量指向测试 Gateway
- AND
JUNHONG_GATEWAY_BASE_URL=https://test-gateway.example.com - AND
JUNHONG_GATEWAY_APP_ID=test_app_id - THEN 客户端连接到测试环境
MODIFIED Requirements
Requirement: Config 结构体扩展
系统 SHALL 在现有的 Config 结构体中添加 Gateway 字段。
Scenario: 配置结构兼容性
- WHEN 添加
Gateway GatewayConfig字段 - THEN 不影响现有配置字段的加载
- AND 现有配置(Server、Database、Redis 等)继续正常工作
Requirement: Dependencies 结构体扩展
系统 SHALL 在 internal/bootstrap/bootstrap.go 的 Dependencies 结构体中添加 GatewayClient 字段。
Scenario: 依赖注入扩展
- WHEN 在
Dependencies中添加GatewayClient *gateway.Client字段 - THEN 不影响现有依赖的注入
- AND Gateway 客户端可以注入到需要的 Service
Scenario: Service 层使用
- WHEN Service 需要调用 Gateway API
- THEN 在 Service 构造函数中接收
gatewayClient *gateway.Client参数 - AND 从 Bootstrap 中传递
deps.GatewayClient