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

1.4 KiB
Raw Blame History

问题原因

  • 数据库报错 Invalid JSON text: "The document is empty.",说明往 system_titles.obtain_rules_json 写入了空字符串 ""
  • 在 MySQL JSON 列中,空字符串不是合法 JSON需使用 "{}""[]" 等合法文本。
  • 代码位置:internal/api/admin/titles_seed.go 初始化 SystemTitles 时将 ObtainRulesJSONScopesJSON 设为了空字符串。

修复方案

  • 修改 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"} 或按你的要求填充。

确认后我将立即修复代码、重新初始化并验证页面数据。