1.8 KiB
1.8 KiB
Phase 16 Completion Report
Status
✅ Completed
Implemented
P16-T01 ~ P16-T08: 活动互选核心
- V011 迁移:
activity_interests表(unique(activity_id, source_user_id, target_user_id)) ActivityInterest实体 +ActivityInterestMapper(4个查询方法)ActivityInterestService— submitFeedback / activateMutual / getMutualMatchesActivityInterestController— 3个API端点(含JwtTokenService认证)- Constants 新增:ACTIVITY_INTEREST_STATUS_EXPRESSED / ACTIVITY_INTEREST_STATUS_MUTUAL
Miniapp 页面
- U32 活动反馈页 — 满意度+意愿+意向选择
- U36 活动缘分页 — 双向互选结果展示 + 快速聊天
Admin Web
- A15 活动互选管理页 — 列表 + 互选详情抽屉
- 路由注册:/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 + 实时联动)