feat(ECR-011): 昵称、首页贴士与档案 Self 唯一/合盘交叉校验
每账号仅一条 self(migration 40902);合盘只选 TA;账号昵称可改;首页穿衣/颜色/养生贴士。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -83,6 +83,8 @@ Device 绑定到账号 User
|
||||
| R4 | 生成/查看档案与报告 API 必须已注册(users.phone 非空)且有效 session 或已绑设备账号 |
|
||||
| R5 | 登出作废 session;设备可再登录其他账号 |
|
||||
| R6 | 正式环境恢复校验前须改回本 Spec |
|
||||
| R7 | 新账号未填昵称时,服务端用「意象词+场景词」词库(100×100)随机生成,如心语岛、微光谷 |
|
||||
| R8 | 账号昵称可在个人档案页修改(PATCH `/auth/me`);首页展示昵称而非「自己」 |
|
||||
|
||||
---
|
||||
|
||||
@@ -97,10 +99,11 @@ Device 绑定到账号 User
|
||||
|
||||
| Method | Path | 说明 |
|
||||
|---|---|---|
|
||||
| POST | `/api/v1/auth/register` | 注册 |
|
||||
| POST | `/api/v1/auth/register` | 注册(可带 nickname) |
|
||||
| POST | `/api/v1/auth/login` | 登录 |
|
||||
| POST | `/api/v1/auth/logout` | 登出 |
|
||||
| GET | `/api/v1/auth/me` | 当前账号 |
|
||||
| PATCH | `/api/v1/auth/me` | 更新昵称 `{ nickname }` |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -63,8 +63,9 @@
|
||||
```text
|
||||
/
|
||||
├── Hero / 品牌
|
||||
├── 建档 CTA
|
||||
├── 功能入口
|
||||
├── 「自己」卡片标题展示账号昵称(默认意象词+场景词;档案页可改)
|
||||
├── 穿衣指数 · 颜色搭配 · 养生推荐
|
||||
├── 功能入口(4 列固定网格 · 多行换行 · 禁止横向滑动)
|
||||
└── (可选)推荐内容
|
||||
```
|
||||
|
||||
@@ -90,27 +91,34 @@ Empty:首页本身是入口,不因无档案空白死页。
|
||||
| R2 | 不展示内部运维信息(API 连接状态等) |
|
||||
| R3 | 入口文案符合 lexicon(个人画像/关系理解/成长会员…) |
|
||||
| R4 | Tab 五名冻结:首页·探索·问答·陪伴·我的 |
|
||||
| R5 | 「自己」卡片:穿衣指数 / 颜色搭配 / 养生推荐;有 Self 档案生日时按生日+本地时刻易经卦象种子调大模型生成;无档案或 LLM 不可用则本地回退 |
|
||||
| R6 | 文案禁止占卜/算命恐吓与医疗疗效承诺;卦象仅作节律意象 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 数据模型影响
|
||||
|
||||
经首页建档时写 `profiles`(见 profile Spec)。
|
||||
经首页建档时写 `profiles`(见 profile Spec)。每日贴士可缓存(同用户约 45 分钟 / 按时段刷新)。
|
||||
|
||||
---
|
||||
|
||||
## 9. API 需求
|
||||
|
||||
复用 `POST /profiles`、`POST /reports/portrait`;无专用 home API。
|
||||
| Method | Path | 说明 |
|
||||
|---|---|---|
|
||||
| GET | `/api/v1/home/tools` | 宫格(已有) |
|
||||
| GET | `/api/v1/home/daily-tips` | 自己卡片贴士(DeviceAuth;有 birthday 则 LLM) |
|
||||
| — | 复用 | `POST /profiles`、`POST /reports/portrait` |
|
||||
|
||||
---
|
||||
|
||||
## 10. 权限设计
|
||||
|
||||
| 能力 | Visitor |
|
||||
|---|---|
|
||||
| 浏览首页 | ✓ |
|
||||
| 建档并生成画像 | ✓ |
|
||||
| 能力 | Visitor | User |
|
||||
|---|---|---|
|
||||
| 浏览首页 | ✓ | ✓ |
|
||||
| 建档并生成画像 | 需登录 | ✓ |
|
||||
| daily-tips(个性化) | 回退文案 | 有 Self 生日则 LLM |
|
||||
|
||||
---
|
||||
|
||||
@@ -134,10 +142,22 @@ Empty:首页本身是入口,不因无档案空白死页。
|
||||
**When** 提交主 CTA
|
||||
**Then** 进入画像基础结果路径
|
||||
|
||||
**Given** 已登录且有 Self 生日、已配 deepseek
|
||||
**When** GET `/home/daily-tips`
|
||||
**Then** `source=llm` 且含 clothing_index / palette / wellness
|
||||
|
||||
**Given** 无档案或无 LLM
|
||||
**When** GET `/home/daily-tips`
|
||||
**Then** `source=fallback` 且页面不白屏
|
||||
|
||||
---
|
||||
|
||||
## 13. AI 开发前检查
|
||||
|
||||
- [x] lexicon
|
||||
- [x] 不恐吓 / 不算命话术
|
||||
- [x] OpenAPI 已登记 `/home/daily-tips`
|
||||
|
||||
- [x] Spec 齐全
|
||||
|
||||
---
|
||||
|
||||
@@ -92,6 +92,8 @@
|
||||
| R4 | 删除策略:任务未要求硬删 PII 时按实现(软删优先);级联影响报告见服务规则 |
|
||||
| R5 | Ask / 画像 / 关系必须挂合法 profile_id |
|
||||
| R6 | 文案用「个人档案」,不用命盘 |
|
||||
| R7 | **每账号至多一条** `relation=self`(唯一索引);再建 self → 409;解码/星盘等复用或更新既有 Self,禁止重复造「我」 |
|
||||
| R8 | 合盘/匹配对象列表只展示 `other` + 附近的人;不得把多余 self 当作 TA |
|
||||
|
||||
---
|
||||
|
||||
@@ -100,6 +102,7 @@
|
||||
| 表 | 字段要点 |
|
||||
|---|---|
|
||||
| `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` |
|
||||
|
||||
---
|
||||
|
||||
@@ -143,10 +146,18 @@
|
||||
**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 开发前检查
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
| R8 | 合盘与人格匹配分流:`/synastry` 盘型;`/relation` 行为风格 |
|
||||
| R9 | 附近的人默认 `geo_visible=false`;仅可见已开启位置的 self 档案 |
|
||||
| R10 | 合盘星历走 Swiss Ephemeris(默认 Moshier);宫位制 Whole Sign |
|
||||
| R11 | 合盘交叉校验:档案 A 为本账号 Self;档案 B 须为本账号 `other` 或附近可见他人 Self;拒绝 self×self / 同 id |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user