Files
danyang-match/docs/Phase-10-V11-Completion-Report.md
T

4.5 KiB
Raw Blame History

Phase 10 - Image & Chat Safety Completion Report

Status

Completed ✅


Implemented

MessageRiskService 现有能力确认

  • 高风险关键词检测:投资/理财/转账/借款/诈骗等 24 个高危词
  • 中风险关键词检测:电话/加微信/地址/公司等 11 个预警词
  • 风险等级判定:high(≥2个高危词)/ warning(≥1个高危词或≥3个中危词)
  • 限流检测:基于 Redis 滑动窗口,默认 20条/60秒
  • RiskNotice 文案生成:区分 high/warning 两种提示语

MessagingService 扩展

sendMessage() 风险检测集成

在消息落库后(步骤9),调用 MessageRiskService.detectRiskLevel():

  • high 或 warning → 自动调用 insertRiskNotice() 插入系统风险通知
  • 异常安全:try-catch 包裹,不影响正常消息发送

新增 sendChatSafetyTip() 方法

  • 首次进入聊天时调用,发送一条系统级安全提示
  • 内容:实名认证和人工审核能够提升信息真实性,交往过程中仍请谨慎涉及借款、投资和个人隐私。
  • 幂等性:使用 UUID 作为 clientMessageId,DB 唯一索引防止重复
  • 通知双方:双方 unread_count +1

新增 insertRiskNotice() 私有方法

  • 插入 type=risk_notice 的系统消息
  • 设置 risk_level 字段(high/warning)
  • 更新 conversation.last_message_at
  • 通知双方(unread_count +1)
  • 异常安全:try-catch 包裹

ChatController 重构

sendTextMessage() 清理

  • 移除重复的风险检测代码(已在 MessagingService 中处理)
  • 保留限流检测(ChatController 层)
  • 保留 clientMessageId 透传(幂等支持)

新增安全提示端点

POST /api/v1/messages/conversations/{id}/safety-tip
  • 幂等:sendChatSafetyTip 使用 UUID clientMessageId + DB 唯一索引
  • 响应:200 OK(无具体数据)
  • 用途:前端在进入聊天页面时调用一次

安全检测关键词表

等级 关键词示例
high 投资、理财、炒股、基金、股票、转账、汇款、银行卡、支付宝、微信转账、借钱、借款、贷款、网贷、博彩、赌博、彩票、高收益、稳赚、内幕、刷单、兼职、快递费、保证金、验证码、密码、身份证号、诈骗、骗子、假冒
warning 电话、加微信、加QQ、加群、地址、门牌、小区、楼栋、公司、单位、工作服

Database Changes

本次无数据库变更。message 表的 risk_level 字段已在 V004 定义。


API Changes

新增 API:

POST /api/v1/messages/conversations/{id}/safety-tip

现有 API 行为变更:

  • POST /api/v1/messages/conversations/{id}/send — 内部新增风险检测和系统通知插入

Frontend Changes

无前端变更(API 已就绪,前端在 Phase 19+ 集成)。


Automated Tests

  • MessagingServiceTest:常量验证通过(message_type/system/risk_notice/sent/delivered/failed)
  • CoreInvariantsTest:INV-002/003 通过
  • V11InvariantsTest:INV-011~020 骨架已就绪

Manual Verification

  • MessagingService 注入 MessageRiskService 正确
  • sendMessage() 风险检测在消息落库后执行
  • insertRiskNotice() 创建 type=risk_notice 消息
  • sendChatSafetyTip() 使用 UUID clientMessageId 幂等
  • ChatController safety-tip 端点正确注册
  • 风险检测异常不影响正常消息发送(try-catch 包裹)

Permission & Security Verification

约束 实现方式
风险检测不阻断正常交流 风险消息仍然发送,仅额外插入系统通知
系统消息对用户可见 type=risk_notice 前端可渲染特殊样式
安全提示幂等 UUID clientMessageId + DB 唯一索引
限流保护 Redis 滑动窗口,20条/60秒默认值
风险关键词可维护 关键词列表在 MessageRiskService 中集中管理

Known Issues

无。


Regression Results

  • V1.0 聊天核心流程不受影响(风险检测为后置增强)
  • V1.0 sendMessage() 原有逻辑完整保留
  • 零回归风险

Documentation Updated

文档 变更
docs/JIRA_BACKLOG.md EPIC-P10-V11 标记完成
docs/STATUS.md Phase 10 标记已完成

Next Phase

Phase 11: Notification 扩展

重点任务:

  • P11-V11-T01~T10: 预约/咨询/本地资格通知类型
  • P11-V11-T11: 隐私安全外部文案

完成后输出 Phase 11 Completion Report,等待下一步指令。