Background
US-001 要求「服务端支持纯文本转富文本存储」,确保所有 inbox 内容都以统一的 HTML 格式存储,便于前端富文本渲染器统一展示。
Current behavior
InboxService.create() 和 update() 方法中:
- 若提供
frontJson/backJson:正确转换为 HTML 存储
- 若仅提供
front/back 纯文本:直接原文存储,未做任何转换
Problem
convertPlainTextToTipTapJson 方法已实现但从未被调用。当外部 API 或旧版客户端发送纯文本时,内容将以原始字符串形式存入数据库,而非统一的 HTML 格式。这导致:
- 前端
RichTextRenderer 渲染行为不一致
- 破坏「所有内容都是 HTML」的统一假设
Scope and impact
- 写入路径:
InboxService.create()、InboxService.update()
- 受影响数据:所有通过纯文本(无 JSON)创建的 inbox 内容
- 兼容性:修复后不影响已存储的 HTML 内容
Reproduction or evidence
- 文件:
apps/server/src/services/inbox.service.ts 第 103-110 行、第 238-250 行
- 方法
convertPlainTextToTipTapJson 已实现(第 65-80 行),但 create/update 方法中未调用
Expected behavior
当 frontJson/backJson 未提供时,应将 front/back 纯文本先转为 TipTap JSON,再序列化为 HTML:
if (data.frontJson) {
frontContent = serializeToHtml(data.frontJson);
} else if (data.front) {
// 新增:纯文本先转 JSON 再转 HTML
const json = this.convertPlainTextToTipTapJson(data.front);
frontContent = serializeToHtml(json);
} else {
frontContent = '';
}
Suggested fix
修改 InboxService.create() 和 update() 方法的 content 处理逻辑,增加纯文本分支。
Acceptance criteria
Background
US-001 要求「服务端支持纯文本转富文本存储」,确保所有 inbox 内容都以统一的 HTML 格式存储,便于前端富文本渲染器统一展示。
Current behavior
InboxService.create()和update()方法中:frontJson/backJson:正确转换为 HTML 存储front/back纯文本:直接原文存储,未做任何转换Problem
convertPlainTextToTipTapJson方法已实现但从未被调用。当外部 API 或旧版客户端发送纯文本时,内容将以原始字符串形式存入数据库,而非统一的 HTML 格式。这导致:RichTextRenderer渲染行为不一致Scope and impact
InboxService.create()、InboxService.update()Reproduction or evidence
apps/server/src/services/inbox.service.ts第 103-110 行、第 238-250 行convertPlainTextToTipTapJson已实现(第 65-80 行),但create/update方法中未调用Expected behavior
当
frontJson/backJson未提供时,应将front/back纯文本先转为 TipTap JSON,再序列化为 HTML:Suggested fix
修改
InboxService.create()和update()方法的 content 处理逻辑,增加纯文本分支。Acceptance criteria
create方法在无frontJson时自动转换纯文本frontcreate方法在无backJson时自动转换纯文本backupdate方法在无frontJson时自动转换纯文本frontupdate方法在无backJson时自动转换纯文本back