# TODOlist（需求梳理 + 技术方案）

> 目标：作为后续开发与测试的对照清单，明确范围、方案、接口、数据与测试策略。

## 当前范围与约束
- 认证仅使用 JWT（不做 OAuth/Cookie 方案）。
- 支付集成暂不做，订单/退款仅按既有数据结构做流程与统计。
- 存储仅使用本地 FS 模拟，真实 Provider 延后统一接入。
- 多租户路由强隔离（`/t/:tenantCode/v1` + TenantResolver）暂缓，后续统一优化。

## 统一原则
- 所有后端改动遵循 `backend/llm.txt` 规范与 GORM-Gen 访问方式。
- 分层约束：Controller 仅做绑定与调用，业务与 DB 仅在 `services`。
- 每个需求至少配套：接口说明 + 数据变更（如有）+ 关键业务校验 + 单元测试。

## P0（必须先做）

### 1) 租户成员体系（加入/邀请/审核）（已完成）
**需求目标**
- 完成租户成员生命周期：申请加入、审核通过/拒绝、邀请加入。
- tenant_only 内容在“成员审核通过”后可访问；未审核需前置引导。

**技术方案（后端）**
- API
  - 申请加入：`POST /t/:tenantCode/v1/tenants/:id<int>/join`
  - 取消申请：`DELETE /t/:tenantCode/v1/tenants/:id<int>/join`
  - 接受邀请：`POST /t/:tenantCode/v1/tenants/:id<int>/invites/accept`
  - 管理员审核：`POST /t/:tenantCode/v1/creator/members/:id<int>/review`
  - 邀请成员：`POST /t/:tenantCode/v1/creator/members/invite`
- DB
  - 使用现有 `tenant_join_requests` / `tenant_invites` 表（如已存在则复用；缺失则通过迁移新增）。
- Service
  - 校验：用户是否已是成员/是否已申请；审核流转合法性；邀请有效期。
  - 申请成功后写 `tenant_join_requests`；审核通过写 `tenant_users`。
  - 对 `tenant_only` 内容访问：需要 `tenant_users.status=verified` 或已购买。

**测试方案**
- 申请加入：重复申请拦截。
- 审核通过后，tenant_only 可访问；未通过不可访问。
- 邀请链接过期/重复使用处理。

### 2) 鉴权与权限收口（必需）（已完成）
**需求目标**
- 受保护接口强制鉴权，超管接口增加 `super_admin` 角色校验。
- 补齐 `Super.Login / CheckToken` 逻辑。

**技术方案（后端）**
- 中间件：拆分 `AuthOptional` / `AuthRequired`，路由按需使用。
- 超管接口：校验 JWT roles 含 `super_admin`。
- 服务：补齐登录、token 续期/失效逻辑。

**测试方案**
- 未登录访问受保护接口被拒绝。
- 非超管访问 `/super/v1/*` 被拒绝。

### 3) 上传会话归属测试补齐（已完成）
**需求目标**
- 覆盖上传会话归属校验的服务测试（防止越权）。

**技术方案（后端）**
- 为 `Common.UploadPart` 增加服务测试，验证 owner mismatch 返回 `ErrForbidden`。

**测试方案**
- owner 与非 owner 上传分支。

---

## P1（高优先）

### 4) ID 类型统一（int64 / model 注入）（已完成）
**需求目标**
- 所有业务 ID 使用 `int64`，路由参数统一 `:id<int>`。

**技术方案（后端）**
- Controller/DTO：`string` → `int64`，补齐字段级中文注释。
- Service：移除 `cast.ToInt64`，使用 `int64` 与 `model` 注入。
- Swagger/Route：补齐 `<int>` 约束。

**测试方案**
- 关键接口：正常请求 + 参数类型错误时返回明确错误。

### 5) 内容访问策略完善（资源权限与预览差异化）（已完成）
**需求目标**
- 媒体资源访问遵循：未购仅预览，已购全量，作者/管理员全量。
- 签名 URL 或下载地址生成前进行权限校验。

**技术方案（后端）**
- Service
  - `Content.Get` 根据 `visibility + status + access` 决定 `MediaUrls`。
  - `Common.GetAssetURL` 或资源下载接口增加权限校验参数（通过内容ID校验）。
- 规则
  - public + 未购：仅 preview + cover
  - tenant_only + 已购/成员/作者/管理员：完整
  - private：仅作者/管理员

**测试方案**
- 未登录/未购/已购/作者/管理员的可见资源集合一致性。

### 6) 审计参数传递规范化（已完成）
**需求目标**
- 审计服务禁止自行读取 `ctx`，改为显式传入操作者信息。

**技术方案（后端）**
- 调整 `services.Audit` 方法签名与调用方传参。
- 关键操作补齐操作者字段。

**测试方案**
- 审计记录落库含 `operator_id`，并覆盖缺参错误。

---

## P2（中优先）

### 7) 运营统计报表（曝光/转化/订单/退款）（已完成）
**需求目标**
- 提供租户维度与时间范围的核心指标统计与导出。

**技术方案（后端）**
- API
  - 总览：`GET /t/:tenantCode/v1/creator/dashboard`（已有，需扩展）
  - 明细统计：`GET /t/:tenantCode/v1/creator/reports/overview`
  - 导出：`POST /t/:tenantCode/v1/creator/reports/export`
- Service
  - 聚合：订单、退款、内容曝光（views/likes）、转化率（访问->成交）。
- 导出：同步 CSV（如需异步任务与下载链接，可在后续迭代补齐）。

**测试方案**
- 统计口径一致性；筛选组合；导出任务可用性。

### 8) 超管后台治理能力（健康度/异常监控/内容审核）（已完成）
**需求目标**
- 提供超管对租户的健康指标、异常趋势、内容合规审核。

**技术方案（后端）**
- API
  - 租户健康度统计：`GET /super/v1/tenants/health`
  - 内容审核流：`POST /super/v1/contents/:id<int>/review`
- Service
  - 指标聚合 + 异常阈值定义。
  - 审核状态流转与通知。

**测试方案**
- 审核状态流转有效性；异常阈值命中结果。

### 9) 性能优化（避免 N+1）（已完成）
**需求目标**
- 列表/统计场景避免逐条查询。

**技术方案（后端）**
- 引入批量查询/聚合 SQL，替换逐条查询。
- 重点：订单列表、租户列表统计。

**测试方案**
- 对比查询次数/耗时（可选） + 数据正确性。

---

## P3（延后）

### 10) 多租户强隔离（路由 + TenantResolver）
**需求目标**
- `/t/:tenantCode/v1` 作为唯一入口，服务层强制 tenant_id 过滤。

**技术方案（后端/前端）**
- 中间件解析 tenant_code → tenant_id 并注入 ctx locals。
- 前端 Router/API base 从 URL 解析 tenantCode。

**测试方案**
- 跨租户访问被拒绝；错租户路由返回 404。

### 11) 真实存储 Provider 接入
**需求目标**
- 接入 OSS/云存储，统一上传/访问路径策略。

**技术方案（后端）**
- 通过配置注入 Provider，保留本地 FS 作为 dev fallback。

**测试方案**
- 本地 FS + 真实 Provider 两套配置可用性。

### 12) 支付集成
**需求目标**
- 最终阶段对接真实支付。

**技术方案（后端）**
- 接入支付网关并补齐回调/退款逻辑。

**测试方案**
- 沙箱支付 + 回调验签。

---

## 已完成
- 租户成员体系（加入/邀请/审核）。
- 鉴权与权限收口（AuthOptional/AuthRequired、super_admin 校验、Super.Login/CheckToken）。
- 上传会话归属测试补齐（UploadPart owner mismatch）。
- ID 类型统一（int64 / model 注入，upload_id 等非数值标识除外）。
- 内容访问策略完善（资源权限与预览差异化）。
- 审计参数传递规范化（Audit 显式传参）。
- 内容可见性与 tenant_only 访问控制。
- OTP 登录流程与租户成员校验（未加入拒绝登录）。
- ID 类型已统一为 int64（仅保留 upload_id/external_id/uuid 等非数字标识）。
- 内容资源权限与预览差异化（未购预览、已购/管理员/成员全量）。
- 审计操作显式传入操作者信息（服务层不再依赖 ctx 读取）。
- 运营统计报表（overview + CSV 导出基础版）。
- 超管后台治理能力（健康度/异常监控/内容审核）。
- 性能优化（避免 N+1：订单/租户列表批量聚合 + topics 聚合）。
- 多租户强隔离（/t/:tenantCode/v1 + TenantResolver）。

## 里程碑建议
- M1：完成 P0
- M2：完成 P1
- M3：完成 P2
