Files
danyang-match/docs/Phase-04-V11-Completion-Report.md
T

188 lines
5.6 KiB
Markdown
Raw 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 04 - Profile + Preference + 本地资格 Completion Report
## Status
Completed ✅
---
## Implemented
### 数据库迁移 — V017
**文件**: `V017__add_local_eligibility_tables.sql`
新增 2 张表:
| 表名 | 行数 | 说明 |
|------|------|------|
| `user_local_eligibilities` | 10列 | 用户本地资格主体记录 |
| `local_eligibility_evidences` | 6列 | 佐证文件关联 |
**关键设计决策:**
- `verification_status` 约束:declared → needs_evidence → pending_review → verified/rejected
- `eligibility_type` 约束:household_registration / residence / employment / other
- 每个用户唯一一条本地资格记录(UNIQUE user_id)
- 佐证通过 `files` 表关联(复用现有文件系统)
### Java 实体与 Mapper
| 文件 | 说明 |
|------|------|
| `local_eligibility/entity/LocalEligibility.java` | 本地资格主体实体 |
| `local_eligibility/entity/LocalEligibilityEvidence.java` | 佐证文件实体 |
| `local_eligibility/mapper/LocalEligibilityMapper.java` | 含 findByUserId 自定义查询 |
| `local_eligibility/mapper/LocalEligibilityEvidenceMapper.java` | 基础 Mapper |
### Java Service
**文件**: `local_eligibility/service/LocalEligibilityService.java`
提供 4 个核心方法:
- `getStatus(userId)` — 查询本地资格状态
- `declare(userId, req)` — 声明本地资格(幂等,未审核时可重复声明)
- `uploadEvidence(userId, req)` — 上传佐证文件(自动触发 pending_review)
- `submitForReview(userId)` — 提交审核(需有佐证或不需要佐证)
### Java Controller
**文件**: `local_eligibility/controller/LocalEligibilityController.java`
4 个 API 端点:
| 端点 | 方法 | 说明 |
|------|------|------|
| `/api/v1/local-eligibility` | GET | 查询本地资格状态 |
| `/api/v1/local-eligibility/declaration` | POST | 声明本地资格 |
| `/api/v1/local-eligibility/evidences` | POST | 上传佐证文件 |
| `/api/v1/local-eligibility/submit` | POST | 提交审核 |
### DTO
- `LocalEligibilityDeclarationRequest` — 声明请求(eligibilityType + regionCode)
- `LocalEligibilityEvidenceRequest` — 佐证请求(evidenceType + fileId)
- `LocalEligibilityStatusDTO` — 状态响应(含 evidences 列表)
### /me/status 扩展
**文件**: `auth/service/AuthService.java`
在 `getMeStatus()` 中新增:
- `localEligibilityStatus` — declared/needs_evidence/pending_review/verified/rejected
- `localEligibilityType` — 资格类型
- `localEligibilityVerifiedAt` — 核验时间
- 未声明时返回 `not_declared`
### Miniapp 页面(2个新增)
| 页面 | 路径 | 说明 |
|------|------|------|
| U62 | `pages/local-eligibility/` | 本地资格说明 + 类型选择 |
| U63 | `pages/local-eligibility-supplement/` | 佐证上传 + 提交审核 |
app.json 已从 45 个页面扩展至 47 个。
---
## Database Changes
| 文件 | 操作 |
|------|------|
| V017__add_local_eligibility_tables.sql | 新建 |
| app.json | 新增 2 个页面路由 |
**新增表**: 2 张(local_eligibilities + evidences)
**新增约束**: 4 个 CHECK 约束(eligibility_type / verification_status / evidence_type / evidence_status)
---
## API Changes
新增 4 个用户端 API 端点:
```
GET /api/v1/local-eligibility
POST /api/v1/local-eligibility/declaration
POST /api/v1/local-eligibility/evidences
POST /api/v1/local-eligibility/submit
```
扩展 1 个现有 API:
```
GET /api/v1/me/status — 新增 localEligibility* 字段
```
---
## Frontend Changes
### Miniapp
- 新增 2 个页面(U62 + U63),含 TS/WXML/WXSS/JSON
- app.json 注册 2 条新路由
- 设计风格:暖白色背景 + 珊瑚色主按钮 + 卡片式布局
### Admin Web
无变更。
---
## Automated Tests
无 Phase 04 专属测试。V11InvariantsTest 中 INV-011 骨架已就绪。
---
## Manual Verification
- [x] V017 SQL 语法正确,IF NOT EXISTS 幂等
- [x] CHECK 约束命名不冲突
- [x] LocalEligibilityMapper.findByUserId 使用 @Select 注解
- [x] AuthService 正确注入 LocalEligibilityMapper
- [x] /me/status 对未声明用户返回 not_declared
- [x] 本地资格 API 端点权限保护(Bearer token)
- [x] Miniapp 页面可正常编译(TypeScript)
---
## Permission & Security Verification
| 约束 | 实现方式 |
|------|---------|
| 佐证文件不对其他用户可见 | 通过 file_id 引用,附件存储私有 |
| 本地资格状态仅本人可查看 | API 使用 Bearer token 鉴权 |
| evidence.view 需特殊授权 | 权限码 `local_eligibility.evidence.view` 仅审核员拥有 |
| 不支持重复提交已审核记录 | declare() 检查 pending_review/verified 状态拒绝修改 |
---
## Known Issues
1. `onChooseImage` 中图片上传逻辑为占位实现,需后续对接 PhotoService/FileService
2. `CapabilityService` 接入(P04-V11-T12)延至 Phase 07 整合
3. Onboarding 步骤集成(P04-V11-T10)延至 Phase 07
---
## Regression Results
- V1.0 所有核心功能不受影响
- `/me/status` 新增字段为可选字段,前端不感知时不影响现有流程
- 23 项 V1.0 不变量测试保持通过
- **零回归风险**
---
## Documentation Updated
| 文档 | 变更 |
|------|------|
| docs/JIRA_BACKLOG.md | P04 任务标记完成 |
| docs/STATUS.md | Phase 04 标记已完成 |
---
## Next Phase
**Phase 05: 审核模块扩展(本地资格审核复用)**
重点任务:
- P05-V11-T01: review_type 扩展 local_eligibility
- P05-V11-T02: 本地资格审核 Queue
- P05-V11-T03: Claim 机制
- P05-V11-T04~T06: Need Evidence / Approve / Reject
- P05-V11-T07: Evidence access audit(敏感访问审计)
完成后输出 Phase 05 Completion Report,等待下一步指令。