feat: P1 合盘/星座/问答与测测完整设计包及模拟器取证工具

落地 synastry/star/ask API 与 H5 页面,补齐 cece-frontend-re complete-design 证据文档,并加入 Android 模拟器截图抓取脚本。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-03 11:37:53 +08:00
co-authored by Cursor
parent 15a9db374a
commit bd22d9dddd
248 changed files with 26309 additions and 842 deletions
+185
View File
@@ -0,0 +1,185 @@
# Feature Spec: 深度版与成长会员
> Status: `Active` · Map: `§6 商业体系 · §5.3 会员中心 [P1]` · Phase: `P1`
> 规范:[../feature-design.md](../feature-design.md)
---
## 1. 功能定义
| 字段 | 内容 |
|---|---|
| Name | 深度版成长报告 + 成长会员 |
| Purpose | 用可理解的权益换取付费;解锁完整分析与更高 Ask 配额 |
| Business Goal | ARPU;验证付费墙与 mock 支付闭环 |
| In | Out |
|---|---|
| 单报告 DeepAccess | 广告干扰主路径 |
| 订阅 Membership(月/季/年 mock | 塔罗商城 |
| Server 侧权益生效 | 纯前端「解锁」 |
---
## 2. 用户价值
1. **为何需要:** 基础结果不够用时需要完整分析 / 更多问答。
2. **完成后获得:** 该报告 detail;或会员期内全部报告深度 + Ask 额度提升。
3. **为何付费:** 明确权益清单(完整分析、AI 次数、专属内容占位)。
---
## 3. 用户角色
| Actor | 能力 |
|---|---|
| Visitor | 可下单 mock 支付 |
| DeepAccess 持有者 | 指定 report 的 detail |
| VIP | 会员期内全局深度 + Ask 配额规则 |
---
## 4. 用户流程
### 深度版(报告内)
```text
报告页 Locked CTA
POST /orders { kind: deep_access, report_id }
POST /orders/{id}/pay-mock
写入 deep_access → 刷新报告 detail 可见
```
### 成长会员
```text
/membership 查看套餐与当前状态
下单 kind=membership + plan
pay-mock → memberships 行 active + expires_at
此后 GET 任意己方报告 detail 可见(按服务规则)
```
---
## 5. 页面设计
| 路由 | 页面 |
|---|---|
| `/membership` | MembershipPage |
| 画像/关系/报告内 | Paywall / DeepAccess CTA |
```text
/membership
├── Loading
├── Normal(未开通 / 已开通+到期)
├── Error
└── (无独立 Locked;本身即售卖页)
```
---
## 6. 页面状态规范
| 状态 | UI |
|---|---|
| Loading | 拉取 `/membership/me` |
| Normal | 展示套餐、当前是否会员、到期时间 |
| Error | 重试 |
| 报告 Locked | 深度版入口文案(lexicon:深度版/成长会员,不用「解锁」作主文案) |
---
## 7. Business Rules
| ID | Rule |
|---|---|
| R1 | DeepAccess 绑定 `user_id` + `report_id` |
| R2 | Membership active`expires_at > now` |
| R3 | 报告 detail 可见 ⇔ Membership active **OR** DeepAccess 存在 |
| R4 | 支付 P1 仅 mock;成功必须服务端落库后再改可见性 |
| R5 | Ask 配额:免费次数耗尽后依赖会员配额(见 ask Spec) |
| R6 | 订单归属必须校验 report 属于当前用户 |
| R7 | 文案:成长会员 / 深度版;禁用恐吓与疗效承诺 |
---
## 8. 数据模型影响
| 表 | 备注 |
|---|---|
| `orders` | kind, amount, status, report_id null |
| `payments` | mock |
| `deep_access` | user_id, report_id, unique |
| `memberships` | plan, expires_at |
---
## 9. API 需求
| Method | Path | 意图 |
|---|---|---|
| GET | `/api/v1/membership/me` | 当前会员状态 |
| POST | `/api/v1/orders` | deep_access \| membership |
| POST | `/api/v1/orders/{id}/pay-mock` | 生效权益 |
---
## 10. 权限设计
| 能力 | Visitor | DeepAccess | VIP |
|---|---|---|---|
| 看基础报告 | ✓ | ✓ | ✓ |
| 看该报告 detail | ✗ | ✓ | ✓ |
| 看任意己方 detail | ✗ | 仅已购报告 | ✓ |
| 下单 mock | ✓ | ✓ | ✓ |
---
## 11. 埋点
| Event | 触发 |
|---|---|
| `paywall_viewed` | 看到锁定区 |
| `deep_access_clicked` | 点深度版 |
| `membership_plan_clicked` | 选套餐 |
| `order_created` | 下单 |
| `purchase_completed` | pay-mock 成功 |
---
## 12. 测试验收标准
**Given** 无权益报告
**When** pay-mock deep_access
**Then** 再 GET 同报告 detail 非空
**Given** 会员未过期
**When** GET 任意己方 portrait/relation 报告
**Then** detail 可见无需每份 DeepAccess
**Given** 他人 report_id
**When** 尝试下单
**Then** 失败(归属校验)
---
## 13. AI 开发前检查
- [x] Spec 齐全 · map · lexicon · OpenAPI · 可测
---
## 14. Implementation Notes
| 项 | 内容 |
|---|---|
| Packages | `service/order` · `service/membership` · `MembershipPage` |
| Gaps | 真支付网关;发票;退款(须先修订本 Spec §9) |
| Tests | L2 membership unlockMembershipPage.spec |
| Process Review | 2026-08-02 [P1-PROCESS-REVIEW](P1-PROCESS-REVIEW.md) · mock 闭环设计闭合 · 实现 PASS · 测试 PASS |