bindbox-game/.trae/documents/修复称号初始化JSON字段并重新初始化.md
邹方成 8141a47690
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
feat(称号系统): 新增称号管理功能与抽奖效果集成
- 新增系统称号模板与效果配置表及相关CRUD接口
- 实现用户称号分配与抽奖效果应用逻辑
- 优化抽奖接口支持用户ID参数以应用称号效果
- 新增称号管理前端页面与分配功能
- 修复Windows时区错误与JSON字段初始化问题
- 移除无用管理接口代码并更新文档说明
2025-11-16 11:37:40 +08:00

22 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 问题原因
- 数据库报错 `Invalid JSON text: "The document is empty."`,说明往 `system_titles.obtain_rules_json` 写入了空字符串 `""`
- 在 MySQL JSON 列中,空字符串不是合法 JSON需使用 `"{}"``"[]"` 等合法文本。
- 代码位置:`internal/api/admin/titles_seed.go` 初始化 `SystemTitles` 时将 `ObtainRulesJSON``ScopesJSON` 设为了空字符串。
## 修复方案
- 修改 `internal/api/admin/titles_seed.go` 的种子逻辑:
-`ObtainRulesJSON` 默认值改为 `"{}"`(或 `{"type":"manual"}` 作为占位规则)。
-`ScopesJSON` 默认值改为 `"{}"`(空作用域表示全局生效)。
- 保持 `SystemTitleEffects.ParamsJSON` 使用 `json.Marshal(d.Params)`(已为合法 JSON
## 执行步骤
1. 更新代码:将空字符串替换为合法 JSON 默认值 `"{}"`
2. 编译检查:`go build ./...`
3. 运行初始化:`POST /api/admin/system_titles/seed_default`,预期返回 6 个称号(新建或已存在)。
4. 验证列表:登录后调用 `GET /api/admin/system_titles?page=1&page_size=20`,应返回 `total=6`
## 风险与回滚
- 仅修改种子默认值,不影响既有数据;若此前插入失败,无需回滚。
- 如你希望 `obtain_rules_json` 有具体规则,我可以将默认值改为 `{"type":"manual"}` 或按你的要求填充。
确认后我将立即修复代码、重新初始化并验证页面数据。