Files
server/docs/.i think u need 2 read this firstly
2025-11-02 19:34:16 +08:00

108 lines
5.8 KiB
Plaintext
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.
先改后缀为md到本地来看
**交接总览**
- 这份“后端打工人保命指南”专治历史误会与产品反转。
- TL;DR聊天功能服务的是小程序不是后台尽快把角色从`sys_template`切回正宗`sys_role`,并统一接口风格与命名。
**背景反转**
- 项目是标准的 Spring Boot 前后端分离。
- 我一度以为“聊天要在后台界面实现”,后来才知道“聊天其实是给微信小程序用的”。
- 现状:`ChatController`看起来像后台接口,实际上灵魂绑定了小程序;角色设计用的是`sys_template`而不是正统`sys_role`。
**现状雷区(请技术同学小心走位)**
- 角色体系割裂:接口里用`sys_template`当角色,脱离系统正统`sys_role`,后续权限/菜单/审计容易不一致。
- 接口风格不统一:部分返回结构不走统一响应包装,出现“有的给`code/message`,有的直接给字符串”的尴尬混搭。
- ChatController 与后台领域边界模糊:路由与命名既像后台,又服务小程序,后期联动容易误配。
- 兼容层过度宽松:为“小程序能跑”做了魔改,继续叠加功能可能埋下小 bug空指针、字段映射、默认值缺失
- 文档误导团队容易把聊天当“管理端功能”实际是“C 端小程序功能”。
**立刻止损指南(快修清单)**
- 统一角色来源:移除`sys_template`在业务中的角色职能,回归`sys_role`为唯一运行时角色。
- 归位聊天接口:将小程序相关接口归到明确的命名空间,如`/api/mp/chat`,清晰隔离后台路由。
- 统一响应格式:所有接口走同一响应包装(如`{ code, message, data }`),避免“风格随缘”。
- 清理文档与注释:删除或归档“聊天=后台”的旧叙事,明确“聊天=小程序”。
**推荐改造路线(分阶段稳妥推进)**
- 阶段一:信息梳理
- 盘点`ChatController`的所有路由、入参、出参、依赖实体与服务。
- 搜索全局对`sys_template`的引用,标记为“角色相关调用”。
- 阶段二:模型正名
- 将角色相关逻辑替换为`sys_role`,在服务层聚合角色配置(人格提示词、上下文长度等)。
- 如需保留“模板”概念,限定为“角色初始配置模板”,不可充当运行时角色。
- 阶段三:接口归位
- 小程序路由统一到`/api/mp/chat/...`。
- 后台保留管理接口到`/api/admin/...`。
- 中间层封装统一响应与错误码,避免 Controller 内部自己拼 JSON。
- 阶段四:平滑迁移
- 保留旧`sys_template`接口一版只读兼容层,打`@Deprecated`并在响应中附迁移提示。
- 数据迁移:将现有模板绑定的“人格配置”迁移到`sys_role`,编写一次性 SQL/脚本。
- 阶段五:验证与发布
- 编写集成测试:发送消息、拉取历史、选择角色/人格、历史分页、并发发送。
- 预发布环境跑全回归;发布后观察日志与告警一周。
**命名与路由建议**
- 小程序聊天接口(示例)
- `GET /api/mp/chat/roles`:获取可用`sys_role`人格列表
- `POST /api/mp/chat/message`:发送消息
- `GET /api/mp/chat/history`:拉取历史
- `POST /api/mp/chat/role/select`:选择当前会话角色
- 后台管理接口(示例)
- `GET /api/admin/roles`、`POST /api/admin/roles`:标准角色的增删改查
- 明确禁止在后台接口使用`sys_template`做运行时角色
**数据迁移草案(示意)**
- 将“模板-人格映射”迁入`sys_role`
- 在`sys_role`增加必要字段以承载模板中的人格配置(如性格、提示词、上下文长度等)。
- 编写一次性迁移脚本:将`sys_template`中的可运行配置复制/合并到`sys_role`对应记录。
- 停止业务层对`sys_template`的运行时读取,只保留为“初始模板”与离线导出。
**统一响应示例(建议约定)**
- 成功:`{ "code": 0, "message": "ok", "data": { ... } }`
- 失败:`{ "code": 1001, "message": "role not found" }`
- 统一在服务层映射错误码,禁止字符串随缘返回。
**自检发布清单**
- 查找并删除/替换所有运行时对`sys_template`的使用。
- 为`ChatController`写 5 个关键集成用例:成功、角色缺失、历史分页、并发发送、接口返回一致性。
- 路由分区是否明确:`/api/mp/...`与`/api/admin/...`不串线。
- 文档是否改写README 与部署文档明确“聊天=小程序”。
- 日志是否规范:关键链路打点,错误码落日志,方便灰度回滚。
**保命锦囊(恶搞版)**
- 若发现还有接口“口嫌体正直”用着`sys_template`:请高喊“模板是模板,角色是角色”,然后删。
- 若有人想把聊天再接回后台:请温柔劝退,“这是给用户的小程序功能,不是管理员的自嗨面板”。
- 若上线后出现“消息消失/人格错乱”:第一时间核对角色来源是否仍读取了`sys_template`。
**后续工作建议**
- 在`/src/main/java/com/xiaozhi/controller/`内核对`RoleController`与`ChatController`职责边界,避免领域耦合。
- 将角色人格配置抽象到服务层,减少 Controller 内部拼装。
- 完善测试与文档,新增“聊天接口 for 小程序”章节,删除一切让人误以为是“后台聊天”的描述。
祝后续同学下刀稳、上线稳、老板更稳。
**支付代码说明**
- 项目同样存在支付相关代码,但目前未实际使用、未测试、未上线。
- 如需了解或启用,请先阅读以下文档:
- `\root\xiaozhi-esp32-server-java\微信小程序会员绑定系统需求规格说明书.md`
- `\root\xiaozhi-esp32-server-java\微信小程序支付上线配置修改清单.md`
2025年10月15日
如果觉得修改代码不如重写,那你可以看一下这个目录 `/root/xiaozhi-esp32-server-java-bak-before-change-git`