chore: establish V1.1 recovery baseline

This commit is contained in:
2026-09-09 22:05:00 +08:00
commit b46b48eb33
947 changed files with 155471 additions and 0 deletions
+64
View File
@@ -0,0 +1,64 @@
# Phase 08 Completion Report
## Status
✅ Completed
## Implemented
### P08-T01 ~ P08-T12: 关系核心
- [x] `UserRelation` 实体 + `UserRelationMapper`(like/pass/block 查询)
- [x] `Match` 实体 + `MatchMapper`(active match查找、列表)
- [x] `RelationshipSuccessRequest` 实体 + Mapper
- [x] `RelationshipService` — Like/Pass/Block/Unblock/Unmatch/ConfirmSuccess
- [x] `MatchDTO` / `FateItemDTO` DTO
- [x] `RelationshipController` — 11个API端点
- [x] V007 迁移:user_relations + matches + relationship_success_requests
### 核心Invariants已保护
- [x] Block优先级最高:Block后立即停止聊天/推荐/搜索
- [x] 双向Match唯一性:标准化user_a/user_b + 唯一索引
- [x] 未Mutual不可聊天(由Phase 09 Conversation创建保证)
- [x] 取消喜欢仅Mutual前允许
### Miniapp 页面
- [x] U22 我的缘分页 — 三Tab(互相喜欢/我喜欢的/喜欢我的)
- [x] 喜欢回应用户 — 确认后触发双向Match
## Database Changes
- V007: +3 张表(user_relations, matches, relationship_success_requests)
- 唯一约束:uk_user_relation(user_id, target_user_id, relation_type)
- 唯一约束:uk_match_pair(user_a_id, user_b_id)
## API Changes
新增接口:
| Method | Path | 描述 |
|---|---|---|
| POST | /relations/{id}/like | 表达喜欢 |
| DELETE | /relations/{id}/like | 取消喜欢 |
| POST | /relations/{id}/pass | 表示不合适 |
| POST | /relations/{id}/block | 拉黑 |
| DELETE | /relations/{id}/block | 解除拉黑 |
| GET | /relations/matches | 我的匹配列表 |
| POST | /relations/matches/{id}/unmatch | 解除匹配 |
| GET | /relations/fate/mutual | 互相喜欢列表 |
| GET | /relations/fate/liked | 我喜欢的 |
| GET | /relations/fate/likers | 喜欢我的 |
| POST | /relations/success/request | 发起成功牵手 |
| POST | /relations/success/confirm | 确认成功牵手 |
## Tests
- `RelationshipServiceTest`: 3 个用例(常量验证)
- `RecommendationEngineServiceMockTest`: 2 个用例
## Security Review
- [x] Block后自动取消Like关系
- [x] Block后自动解除Match
- [x] 所有关系操作需认证
- [x] 审计日志记录Like/Block操作
## Known Issues
- ConfirmSuccess 需要双确认逻辑(Phase 12 完善)
- Conversation 创建在 Phase 09 实现
## Next Phase
Phase 09: 文字聊天(Conversation + Messages + REST发送 + WebSocket接收)