Skip to content

[arch-review][P2][architecture] Inbox 创建时纯文本未转换为富文本 HTML 格式 #83

@ximing

Description

@ximing

Background

US-001 要求「服务端支持纯文本转富文本存储」,确保所有 inbox 内容都以统一的 HTML 格式存储,便于前端富文本渲染器统一展示。

Current behavior

InboxService.create()update() 方法中:

  • 若提供 frontJson/backJson:正确转换为 HTML 存储
  • 若仅提供 front/back 纯文本:直接原文存储,未做任何转换

Problem

convertPlainTextToTipTapJson 方法已实现但从未被调用。当外部 API 或旧版客户端发送纯文本时,内容将以原始字符串形式存入数据库,而非统一的 HTML 格式。这导致:

  1. 前端 RichTextRenderer 渲染行为不一致
  2. 破坏「所有内容都是 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

  • create 方法在无 frontJson 时自动转换纯文本 front
  • create 方法在无 backJson 时自动转换纯文本 back
  • update 方法在无 frontJson 时自动转换纯文本 front
  • update 方法在无 backJson 时自动转换纯文本 back
  • 单元测试验证纯文本转换路径

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions