62 lines
2.2 KiB
Markdown
62 lines
2.2 KiB
Markdown
# Phase 09 Completion Report
|
||||
|
|
|
|||
|
|
## Status
|
|||
|
|
✅ Completed
|
|||
|
|
|
|||
|
|
## Implemented
|
|||
|
|
|
|||
|
|
### P09-T01 ~ P09-T15: 消息核心
|
|||
|
|
- [x] `Conversation` + `ConversationMember` + `Message` 实体
|
|||
|
|
- [x] `ConversationMapper` / `ConversationMemberMapper` / `MessageMapper`
|
|||
|
|
- [x] `MessagingService` — 发送/历史/已读/未读/创建会话/关闭会话
|
|||
|
|
- [x] `MessageController` — 6个API端点
|
|||
|
|
- [x] V008 迁移(conversations + conversation_members + messages 表)
|
|||
|
|
|
|||
|
|
### P09: WebSocket
|
|||
|
|
- [x] `ChatWebSocketHandler` — 连接/消息/关闭处理
|
|||
|
|
- [x] `WebSocketConfig` — STOMP端点配置(/ws)
|
|||
|
|
- [x] REST发送 + WebSocket接收架构
|
|||
|
|
|
|||
|
|
### Core Invariants 已保护
|
|||
|
|
- [x] 无Match不可发送消息(服务层校验)
|
|||
|
|
- [x] Match可发送(通过match_id关联校验)
|
|||
|
|
- [x] 重复clientMessageId不重复(唯一索引 + 服务端检查)
|
|||
|
|
- [x] Block即时失效(Conversation canSend字段)
|
|||
|
|
- [x] Unmatch即时失效(closeConversation关闭canSend)
|
|||
|
|
- [x] WS恢复(REST可重建会话状态)
|
|||
|
|
|
|||
|
|
### Miniapp 页面
|
|||
|
|
- [x] U23 消息列表 — 会话列表 + 未读数 + 下拉刷新
|
|||
|
|
- [x] U24 聊天页 — 消息气泡 + 历史分页 + 安全提示 + 发送
|
|||
|
|
|
|||
|
|
## Database Changes
|
|||
|
|
- V008: +3 张表(conversations, conversation_members, messages)
|
|||
|
|
- 唯一约束:uk_message_client_id(sender_id + client_message_id)
|
|||
|
|
|
|||
|
|
## API Changes
|
|||
|
|
新增接口:
|
|||
|
|
| Method | Path | 描述 |
|
|||
|
|
|---|---|---|
|
|||
|
|
| GET | /messages/conversations | 会话列表 |
|
|||
|
|
| GET | /messages/conversations/{id} | 会话详情 |
|
|||
|
|
| POST | /messages/conversations/{id}/send | 发送消息 |
|
|||
|
|
| GET | /messages/conversations/{id}/history | 消息历史 |
|
|||
|
|
| PUT | /messages/conversations/{id}/read | 标记已读 |
|
|||
|
|
| GET | /messages/unread-count | 未读总数 |
|
|||
|
|
|
|||
|
|
## Tests
|
|||
|
|
- `MessagingServiceTest`: 4 个用例
|
|||
|
|
|
|||
|
|
## Security Review
|
|||
|
|
- [x] 消息幂等:sender_id + client_message_id 唯一
|
|||
|
|
- [x] 发送前校验Match有效 + Block状态
|
|||
|
|
- [x] 安全提示固定展示在聊天顶部
|
|||
|
|
- [x] WebSocket需带userId认证
|
|||
|
|
|
|||
|
|
## Known Issues
|
|||
|
|
- WebSocket推送为骨架实现,生产需接入完整STOMP订阅
|
|||
|
|
- 图片消息上传在Phase 10实现
|
|||
|
|
|
|||
|
|
## Next Phase
|
|||
|
|
Phase 10: 图片与安全聊天(图片上传/Magic Number校验/风险关键词/限流)
|