M2-01 User & Account 深化 #21

Closed
opened 2026-05-22 21:09:49 +08:00 by wangdl · 1 comment
Owner

目标

在 M0-14A User & Account 模块架构设计基础之上深化 C 端用户能力,补充会员绑定、账号注销流程和用户设备管理。

本 Issue 只做深化设计,基础身份能力(注册、Apple 登录、用户资料、RefreshToken)已在 M0-14A 完成设计。

背景说明

M0-14A 完成了用户注册和 Apple 登录的基础身份设计。本阶段需要在此基础上补齐会员体系对接(用户购买会员后如何绑定到 User 表)、账号注销的完整流程(申请 → 冷静期 → 数据删除)以及用户设备管理(记录登录设备、支持远程登出)。

模块深化内容

  1. 会员绑定:

    • User 与 MembershipPlan 的关联方式(UserMembership 表或 User 表字段,请判断)
    • 会员到期后的降级处理
    • 会员状态变更事件
  2. 账号注销流程:

    • 注销申请提交 → 冷静期(如 7 天)→ 自动执行删除
    • 注销期间用户可撤销申请
    • 注销执行的异步任务(关联数据清理)
    • 注销状态机设计
  3. 用户设备管理:

    • 记录用户登录设备(设备类型、OS 版本、最后活跃时间)
    • 支持用户查看和管理自己的设备列表
    • 支持远程登出指定设备

候选数据对象(新增)

  • UserMembership(用户会员关联)
  • AccountDeletionRequest(账号注销申请)
  • UserDevice(用户设备)

Domain Event(新增)

  • MembershipChanged:会员状态变更
  • AccountDeletionRequested:注销申请提交
  • AccountDeletionCancelled:注销撤销
  • AccountDeleted:注销完成

Admin 视图设计(深化)

在 M0-14A 基础上新增:

  • 用户会员状态查看和管理
  • 注销申请审核列表
  • 批量设备管理

交付检查

  • 路由归属:CAPI 深化 + AAPI 深化
  • 是否需要 Prisma migration:是(新增表)
  • 是否需要 MySQL:是
  • 是否需要 Redis:是(已有依赖)
  • 是否需要 BullMQ:是(注销异步清理任务)
  • 是否需要 Content Safety:是(已有依赖)
  • 是否需要 AuditLog:是(注销审核、会员变更)
  • 是否需要 Domain Event:是
  • 是否需要 Admin 视图:是

验收标准

  1. 会员绑定方案设计(UserMembership 关系)
  2. 注销流程完整设计(状态机 + 冷静期 + 数据清理)
  3. 设备管理方案设计
  4. Admin 视图深化设计
  5. 集成测试覆盖注销流程

禁止事项

  • 禁止注销执行同步删除数据(应异步通过 BullMQ)
  • 禁止注销期间用户数据不可撤销
  • 禁止会员绑定绕过 Quota 模块直接操作额度表
## 目标 在 M0-14A User & Account 模块架构设计基础之上深化 C 端用户能力,补充会员绑定、账号注销流程和用户设备管理。 本 Issue 只做深化设计,基础身份能力(注册、Apple 登录、用户资料、RefreshToken)已在 M0-14A 完成设计。 ## 背景说明 M0-14A 完成了用户注册和 Apple 登录的基础身份设计。本阶段需要在此基础上补齐会员体系对接(用户购买会员后如何绑定到 User 表)、账号注销的完整流程(申请 → 冷静期 → 数据删除)以及用户设备管理(记录登录设备、支持远程登出)。 ## 模块深化内容 1. 会员绑定: - User 与 MembershipPlan 的关联方式(UserMembership 表或 User 表字段,请判断) - 会员到期后的降级处理 - 会员状态变更事件 2. 账号注销流程: - 注销申请提交 → 冷静期(如 7 天)→ 自动执行删除 - 注销期间用户可撤销申请 - 注销执行的异步任务(关联数据清理) - 注销状态机设计 3. 用户设备管理: - 记录用户登录设备(设备类型、OS 版本、最后活跃时间) - 支持用户查看和管理自己的设备列表 - 支持远程登出指定设备 ## 候选数据对象(新增) - UserMembership(用户会员关联) - AccountDeletionRequest(账号注销申请) - UserDevice(用户设备) ## Domain Event(新增) - MembershipChanged:会员状态变更 - AccountDeletionRequested:注销申请提交 - AccountDeletionCancelled:注销撤销 - AccountDeleted:注销完成 ## Admin 视图设计(深化) 在 M0-14A 基础上新增: - 用户会员状态查看和管理 - 注销申请审核列表 - 批量设备管理 ## 交付检查 - [x] 路由归属:CAPI 深化 + AAPI 深化 - [x] 是否需要 Prisma migration:是(新增表) - [x] 是否需要 MySQL:是 - [x] 是否需要 Redis:是(已有依赖) - [x] 是否需要 BullMQ:是(注销异步清理任务) - [x] 是否需要 Content Safety:是(已有依赖) - [x] 是否需要 AuditLog:是(注销审核、会员变更) - [x] 是否需要 Domain Event:是 - [x] 是否需要 Admin 视图:是 ## 验收标准 1. 会员绑定方案设计(UserMembership 关系) 2. 注销流程完整设计(状态机 + 冷静期 + 数据清理) 3. 设备管理方案设计 4. Admin 视图深化设计 5. 集成测试覆盖注销流程 ## 禁止事项 - 禁止注销执行同步删除数据(应异步通过 BullMQ) - 禁止注销期间用户数据不可撤销 - 禁止会员绑定绕过 Quota 模块直接操作额度表
wangdl added this to the M2:知识库主链路闭环(P1) milestone 2026-05-22 21:09:49 +08:00
wangdl self-assigned this 2026-05-22 21:09:49 +08:00
Author
Owner

M2-01 实施完成

架构决策

决策项 选择 理由
会员绑定 UserMembership 关联表 多对多关系,支持历史记录
注销流程 用户申请→冷静期(7天)→Admin审核→异步清理 支持撤销,Admin 最终确认
设备管理 UserDevice 表 (userId+deviceId unique) 支持远程登出

交付内容

模块 端点 说明
CAPI 会员查询 GET /api/users/me/membership 当前会员状态 + 计划详情
CAPI 注销申请 POST /api/users/me/deletion-request 7天冷静期
CAPI 撤销注销 DELETE /api/users/me/deletion-request 冷却期内可撤销
CAPI 设备管理 GET/DELETE /api/users/me/devices 设备列表 + 远程登出
AAPI 会员管理 GET/POST /admin-api/users/memberships 会员列表 + 手动分配
AAPI 注销审核 GET /admin-api/users/deletion-requests + approve/reject Admin 审批
AAPI 设备查看 GET /admin-api/users/:userId/devices 查看用户设备

E2E (test/m2.e2e-spec.ts)

6 tests covering memberships, deletion approval/rejection, devices.

npx jest --config ./test/jest-e2e.json   # 63 passed (28 M0 + 29 M1 + 6 M2)
## ✅ M2-01 实施完成 ### 架构决策 | 决策项 | 选择 | 理由 | |--------|------|------| | 会员绑定 | UserMembership 关联表 | 多对多关系,支持历史记录 | | 注销流程 | 用户申请→冷静期(7天)→Admin审核→异步清理 | 支持撤销,Admin 最终确认 | | 设备管理 | UserDevice 表 (userId+deviceId unique) | 支持远程登出 | ### 交付内容 | 模块 | 端点 | 说明 | |------|------|------| | CAPI 会员查询 | `GET /api/users/me/membership` | 当前会员状态 + 计划详情 | | CAPI 注销申请 | `POST /api/users/me/deletion-request` | 7天冷静期 | | CAPI 撤销注销 | `DELETE /api/users/me/deletion-request` | 冷却期内可撤销 | | CAPI 设备管理 | `GET/DELETE /api/users/me/devices` | 设备列表 + 远程登出 | | AAPI 会员管理 | `GET/POST /admin-api/users/memberships` | 会员列表 + 手动分配 | | AAPI 注销审核 | `GET /admin-api/users/deletion-requests` + approve/reject | Admin 审批 | | AAPI 设备查看 | `GET /admin-api/users/:userId/devices` | 查看用户设备 | ### E2E (test/m2.e2e-spec.ts) 6 tests covering memberships, deletion approval/rejection, devices. ```bash npx jest --config ./test/jest-e2e.json # 63 passed (28 M0 + 29 M1 + 6 M2) ```
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/api-server#21
No description provided.