first commit
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
---
|
||||
name: 完善UserDefaultQuota配置化
|
||||
overview: 补齐 UserDefaultQuota 配置链路:定义 setting.UserDefaultQuotaSettingS 结构体、main 读取配置、config 增加 UserDefaultQuota 段,并让 ensureDefaultQuota 改用配置值(配置缺省时回落现有常量兜底),修复当前因未定义结构体导致的编译错误。
|
||||
todos:
|
||||
- id: define-setting
|
||||
content: 在 pkg/setting/section.go 新增 UserDefaultQuotaSettingS 结构体(Cos/AI/OutfitShare/ClosetShare int64),修复 global/setting.go 的 undefined 编译错误
|
||||
status: completed
|
||||
- id: wire-config
|
||||
content: 在 main.go setupSetting 增加 ReadSection("UserDefaultQuota"),并在 config.yaml 与 config.example.yaml 新增 UserDefaultQuota 段(20/3/10/5)
|
||||
status: completed
|
||||
dependencies:
|
||||
- define-setting
|
||||
- id: service-use-config
|
||||
content: 在 internal/service/quota.go 新增 defaultQuotaValue 辅助(判 nil、字段
|
||||
status: completed
|
||||
dependencies:
|
||||
- define-setting
|
||||
---
|
||||
|
||||
## 需求概述
|
||||
|
||||
完善「新用户默认额度(UserDefaultQuota)」的配置化链路。当前 `global/setting.go` 已声明 `UserDefaultQuotaSetting *setting.UserDefaultQuotaSettingS`,但结构体未定义、main 未读取、config 无配置段、service 仍用硬编码常量,导致项目编译报错(`undefined: setting.UserDefaultQuotaSettingS`)。
|
||||
|
||||
## 核心功能
|
||||
|
||||
- 定义 `UserDefaultQuotaSettingS` 配置结构体,修复编译错误。
|
||||
- main 启动时读取 `UserDefaultQuota` 配置段。
|
||||
- 两个 config 文件新增 `UserDefaultQuota` 段(Cos/AI/OutfitShare/ClosetShare)。
|
||||
- `ensureDefaultQuota` 改为读取配置值,配置缺省(<=0 或 global 为 nil)时回落现有常量兜底。
|
||||
- 保持现有行为不变:未配置时默认仍为 20/3/10/5;初始化仍为 best-effort 且幂等。
|
||||
|
||||
## 技术方案
|
||||
|
||||
### 技术栈
|
||||
|
||||
沿用现有:Go + viper(`setting.ReadSection` → `UnmarshalKey`)配置读取,`global` 单例持有配置,`internal/service` 消费配置。
|
||||
|
||||
### 实现要点
|
||||
|
||||
1. **定义配置结构体** — `pkg/setting/section.go` 新增(放在 `WechatPaySettingS` 之后、`ReadSection` 方法之前,与现有结构体风格一致):
|
||||
|
||||
```
|
||||
type UserDefaultQuotaSettingS struct {
|
||||
Cos int64 // 免费上传额度
|
||||
AI int64 // 免费 AI 推荐额度
|
||||
OutfitShare int64 // 免费社区分享额度
|
||||
ClosetShare int64 // 免费衣柜分享额度
|
||||
}
|
||||
```
|
||||
|
||||
修复 `global/setting.go:19` 的 `undefined` 编译错误。
|
||||
|
||||
2. **main 读取配置** — `main.go` `setupSetting()` 增 `setting.ReadSection("UserDefaultQuota", &global.UserDefaultQuotaSetting)`,与其他段处理方式一致(错误则 return err)。
|
||||
|
||||
3. **config 增加配置段** — `configs/config.yaml` 与 `configs/config.example.yaml` 均新增:
|
||||
|
||||
```
|
||||
UserDefaultQuota:
|
||||
Cos: 20
|
||||
AI: 3
|
||||
OutfitShare: 10
|
||||
ClosetShare: 5
|
||||
```
|
||||
|
||||
4. **service 使用配置 + 兜底** — `internal/service/quota.go`:
|
||||
|
||||
- 新增取值辅助 `defaultQuotaValue(quotaType int8) int64`:判 `global.UserDefaultQuotaSetting` 是否为 nil;取对应字段;字段 `<= 0` 时回落 `constants.go` 的 `DefaultQuota*` 常量。
|
||||
- `ensureDefaultQuota` 的 defaults 列表 `total` 改为调用 `defaultQuotaValue(quotaType)`。
|
||||
- 语义约定:值 `<= 0` 视为「未设置」回落常量默认(本次不支持「显式 0 额度」,如需后续加开关,注释说明)。
|
||||
- `constants.go` 的四个 `DefaultQuota*` 常量**保留**作为兜底默认,补注释说明用途。
|
||||
|
||||
### 关键决策与约束
|
||||
|
||||
- **兜底优先,不破坏现有默认**:配置缺省或 global 为 nil(如未走 main 的单测场景)时结果仍为 20/3/10/5,避免空指针 panic。
|
||||
- **幂等/best-effort 不变**:`ensureDefaultQuota` 仍在 `WxLogin` 新用户分支中以 best-effort 调用,已存在则跳过,写流水(`QuotaChangeTypeActivity`)与同步 Redis 逻辑保持不变。
|
||||
- **安全**:纯数值配置,无秘钥、无外部输入风险。
|
||||
|
||||
### 涉及文件
|
||||
|
||||
- `pkg/setting/section.go`:[MODIFY] 新增 `UserDefaultQuotaSettingS`。
|
||||
- `main.go`:[MODIFY] `setupSetting` 增 `ReadSection("UserDefaultQuota", ...)`。
|
||||
- `configs/config.yaml`、`configs/config.example.yaml`:[MODIFY] 新增 `UserDefaultQuota` 段。
|
||||
- `internal/service/quota.go`:[MODIFY] 新增 `defaultQuotaValue` 辅助,`ensureDefaultQuota` 改用配置。
|
||||
- `internal/service/constants.go`:[MODIFY] 保留 `DefaultQuota*` 常量并补注释。
|
||||
|
||||
### 验证
|
||||
|
||||
- `go build ./...`、`go vet ./...` 通过(修复当前 undefined 错误)。
|
||||
- 逻辑核对:未配置该段时结果为 20/3/10/5;配置后按配置生效;`global.UserDefaultQuotaSetting` 为 nil 或字段 <=0 时不 panic 且回落常量。
|
||||
Reference in New Issue
Block a user