Files
danyang-match/docs/Phase-07-V11-Recovery-Completion-Report-2026-09-13.md
Codex bc4531a734 feat(api): 补齐 /me/* 命名空间,恢复 17 个 404 调用 + 修 /me/status 过期桩
背景:小程序 services/*.js 按 REST 规范(§16 / §22-§40 / §80 / §83-§84)统一调用
/me/*,但后端从未注册 /me 基路径,个人资料、照片、择偶条件、隐私设置、关系状态、
我的举报/申诉等约 17 个调用全部 404。

后端
- 新增 me/controller/MeController:把既有 service 能力暴露到规范路径(纯委托,不复制
  业务规则,AGENTS.md #26)。旧路径(/profile/*、/photos、/relationship/*、
  /account/privacy-settings、/risk/reports/my、/appeals/my)全部保留。
- 响应形状按小程序 JSDoc 适配(小程序被 86 页引用,是权威契约):
  · /me/relationship-status 返回 status(旧 /relationship/status 返回 relationshipStatus,
    字段名不同,前端读的是 result.status)
  · /me/profile/review-status 返回 {status, items, submittedAt, reviewedAt},时间统一 epoch 毫秒
  · /me/profile/submit-review 返回 {reviewStatus, submittedAt}
- 小程序三条历史写法一并兼容:/me/privacy-settings、/me/photos/{id}/main、/me/appeals

修复
- AuthService.getMeStatus:verified / profileStatus / reviewStatus 三项写死为
  false / not_started / not_submitted,注释标注"Phase 03/04/05 填充",但那三个 Phase
  早已交付,导致 /me/status 长期返回错误的实名与审核状态。改为 capabilityService
  + userProfileMapper + reviewTaskMapper 的真实来源(与首页聚合同一判定)。
- PhotoController.deletePhoto:原用 ((Map<?,?>) p).get("id") 强转 UserPhoto 实体,
  必然抛 ClassCastException,删除照片恒定 500。改用实体主键比对。
- PhotoService.setMainAvatar(新增):数据模型以 photo_type='avatar' 标识头像(见
  UserPhotoMapper#findAvatar),无 is_main 字段,故"设主图"= 换类型并保证至多一张。
  注意:插入该方法时曾把 deletePhoto 原有的 @Transactional 挤到新方法上,导致
  "Transactional is not a repeatable annotation" 并引发 Lombok 全面停摆(满屏
  找不到 getter/setter),已修正注解归属。

验证
- 后端全量:299 tests / 0 failures / 0 errors / 3 skipped / BUILD SUCCESS(+2 为新增契约测试)
- 新增 MeRouteContractTest(2 例):同时断言 HTTP 方法,锁定 21 条 /me/* 与 13 条旧路径
- 小程序 tsc --noEmit 通过;UI 契约门禁 13/13

文档
- STATUS.md:/me/* 从"待裁决"改为"已完成";核心待清债务 1 项 → 0 项
- API_INVENTORY.md:顶部"待收敛"警告改为"已收敛",补全 /me/* 端点表
2026-09-16 12:54:39 +08:00

39 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 07 Completion Report
> **2026-09-16 状态更新:视觉已重新实现并通过用户验收。** 本报告 2026-09-13 记录的**视觉结论已失效**是当时的历史事实——管理端与小程序页面设计结果被用户否决。此后按 2026-09-13 参考图驱动规格重新实现,**首批 11 页于 2026-09-16 通过用户验收(结论:基本达标)**。下述后端首页聚合、Capability、8 入口、TypeScript 迁移和业务测试证据自始有效并继续沿用。
> 阶段:V1.1 首页唯一实现 + 找对象(REPLACE)
> 日期:2026-09-13
> 结论(2026-09-13):业务专项证据保留;UI REOPENED;项目整体继续 NO-GO
> 结论修订(2026-09-16):UI 已按参考图驱动规格重新实现,首批 11 页通过用户验收;UI 条目关闭
## 完成范围
- `HomeApplicationService` 聚合真实实名、资料、审核、本地资格、正式推荐、Banner、活动、服务站和内容数据。
- 服务端 Capability 按正常账户、实名、资料审核、关系状态和推荐开关返回,入口展示服务端 Disabled 原因。
- 修正固定 8 个入口和公益服务建议的真实页面路由,Banner 仅允许内部目标。
- 首页和找对象页统一为 TypeScript 运行源,删除重复 `index.js`、`discover.js`。
- 曾尝试按参考图重建页面视觉,但该实现已被用户否决,现按 2026-09-13 新规格重新设计。
- 保留未登录、未实名、审核中、Searching、Paused、Successful、空数据、网络错误和 Skeleton 状态。
## 验证证据
- Backend 受影响回归:19 tests,0 failures,0 errors,0 skipped。
- Backend Docker 镜像构建成功,容器 healthy;`/api/v1/health/live` 返回 200,未认证 `/api/v1/home` 返回 403。
- `ui-tests/phase07-home-contracts.mjs`:通过。
- `ui-tests/miniapp-redesign-contracts.mjs`:历史执行曾通过,但该视觉契约已失效并删除。
- Miniapp `tsc --noEmit`:通过。
- 微信开发者工具 2.02.2608070:实际项目预览已自动编译,未发现 WXML/WXSS 页面编译错误。
- 旧视觉证据已删除,不再作为验收依据。
- `git diff --check`:通过。
## 已知限制
- 开发者工具安全设置中的 CLI 服务端口仍关闭,当前证据来自 GUI 自动编译日志与实际预览封面;不影响本地开发者工具运行。
- 参考图人物属于设计演示数据,系统无真实推荐时继续展示空状态,不写入或伪造用户资料。
- Backend 全量历史测试债务、后续 Phase 与 UAT/RC/Production 尚未完成,整体维持 NO-GO。
## 下一阶段
Phase 08 已暂停。先执行 2026-09-13 UI 清理计划,完成清理报告并经用户确认后,依次进入管理端框架/工作台和小程序 11 个核心页面重设计。