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
+47
View File
@@ -0,0 +1,47 @@
# Phase 16 Completion Report
## Status
✅ Completed
## Implemented
### P16-T01 ~ P16-T08: 活动互选核心
- [x] V011 迁移:`activity_interests` 表(unique(activity_id, source_user_id, target_user_id))
- [x] `ActivityInterest` 实体 + `ActivityInterestMapper`(4个查询方法)
- [x] `ActivityInterestService` — submitFeedback / activateMutual / getMutualMatches
- [x] `ActivityInterestController` — 3个API端点(含JwtTokenService认证)
- [x] Constants 新增:ACTIVITY_INTEREST_STATUS_EXPRESSED / ACTIVITY_INTEREST_STATUS_MUTUAL
### Miniapp 页面
- [x] U32 活动反馈页 — 满意度+意愿+意向选择
- [x] U36 活动缘分页 — 双向互选结果展示 + 快速聊天
### Admin Web
- [x] A15 活动互选管理页 — 列表 + 互选详情抽屉
- [x] 路由注册:/activities/interests
## Core Invariants 已保护
- ✅ **单向意向保密** — expressed 状态仅表达者可见,目标用户不可查询
- ✅ **仅双向确认后通知** — activateMutual 仅在双方均表达后触发
- ✅ **重复表达幂等** — findByActivityPair 检查,已存在则跳过
- ✅ **仅approved参与者可互选** — getApprovedParticipants 过滤
- ✅ **活动结束后才能反馈** — activity.status == 'ended' 校验
## API 端点(3个)
POST /activities/{id}/feedback(提交反馈+表达意向)
GET /activities/{id}/interests/mutual(获取互选结果)
GET /activities/operator/{id}/interest-stats(统计,管理端)
## Migration
V011__add_activity_interests.sql
## Tests
- `ActivityInterestServiceTest`: 6 个不变量用例
## Project Stats
- Java files: 164 (+6 from Phase 15)
- Test classes: 28 (+1)
- Migration SQL: 11
## Next Phase
Phase 17: 举报与风控(report submission + risk event scoring + risk action: warning/limit/suspend/ban + 实时联动)