Feature Spec: 个人档案
Status: Active · Map: 1.1 创建个人档案 · 5.1 我的档案 [P1] · Phase: P1
规范:../feature-design.md
1. 功能定义
| 字段 |
内容 |
| Name |
个人档案 |
| Purpose |
建立「我」与「TA」的结构化档案,作为画像、关系、问答的输入 |
| Business Goal |
漏斗 Step 1;提高后续功能完成率 |
| In |
Out |
| Self / Other;生日必填;编辑删除 |
完整户籍式资料收集 |
| 关系类型(伴侣/家人/朋友) |
强制出生时辰地点(可后置) |
2. 用户价值
- 为何需要: 个性化分析需要稳定身份锚点。
- 完成后获得: 可切换的 Self/Other 列表;后续功能可挂档案。
- 付费: N/A(档案本身免费)。
3. 用户角色
| Actor |
能力 |
| Visitor |
CRUD 自己的 profiles |
| 他人档案 |
不可读写 |
4. 用户流程
5. 页面设计
| 路由 |
页面 |
/ |
首页内嵌建档入口 |
/profile |
ProfilePage(列表/编辑/删除/加 TA) |
/mine |
入口到档案 |
6. 页面状态规范
| 状态 |
UI |
| Loading |
拉取列表 |
| Empty |
CTA 创建「我」 |
| Error |
重试 |
| Normal |
Self/Other 卡片;编辑表单;删除确认 |
7. Business Rules
| ID |
Rule |
| R1 |
birth_date P1 必填 |
| R2 |
relation = self | other;other 建议 relation_type |
| R3 |
仅所有者可 PATCH/DELETE |
| R4 |
删除策略:任务未要求硬删 PII 时按实现(软删优先);级联影响报告见服务规则 |
| R5 |
Ask / 画像 / 关系必须挂合法 profile_id |
| R6 |
文案用「个人档案」,不用命盘 |
| R7 |
每账号至多一条 relation=self(唯一索引);再建 self → 409;解码/星盘等复用或更新既有 Self,禁止重复造「我」 |
| R8 |
合盘/匹配对象列表只展示 other + 附近的人;不得把多余 self 当作 TA |
8. 数据模型影响
| 表 |
字段要点 |
profiles |
id, user_id, relation, display_name, birth_date, birth_time?, birth_place?, gender?, relation_type? |
| 约束 |
部分唯一:(user_id) WHERE relation='self' AND deleted_at IS NULL |
9. API 需求
| Method |
Path |
意图 |
| GET |
/api/v1/profiles |
列表 |
| POST |
/api/v1/profiles |
创建 |
| PATCH |
/api/v1/profiles/{id} |
更新 |
| DELETE |
/api/v1/profiles/{id} |
删除 |
10. 权限设计
| 能力 |
Visitor(己方) |
他方 |
| 列表/创建/改/删 |
✓ |
✗ |
11. 埋点
| Event |
触发 |
profile_create_started |
开始创建 |
profile_created |
Self 或 Other 创建成功 |
profile_updated |
保存编辑 |
profile_deleted |
删除成功 |
12. 测试验收标准
Given 无档案
When 创建 Self 合法生日
Then 列表出现;可被画像使用
Given 已有 Self
When 添加 TA
Then relation=other 且可用于关系理解
Given 已有 Self
When 再次 POST relation=self
Then 409 conflict;列表仍仅一条 Self
Given 他人 id
When PATCH
Then 失败
Given 同账号多条历史 self(脏数据)
When 迁移/启动
Then 仅保留最新一条,其余软删;合盘 TA 侧不再出现多个「我」
13. AI 开发前检查
14. Implementation Notes
| 项 |
内容 |
| Packages |
service/profile · ProfilePage · 首页建档 |
| Gaps |
birth_time/place UI 可后置;硬删 vs 软删统一;埋点未接 |
| Tests |
Profile 更新/删除 API L2;ProfilePage 四态 |
| Process Review |
2026-08-02 P1-PROCESS-REVIEW · 设计闭合 · 实现 PASS · 测试 PARTIAL |