206 lines
7.2 KiB
Markdown
206 lines
7.2 KiB
Markdown
# 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)、转化率(访问->成交)。
|
||
- 导出:异步任务 + 结果下载。
|
||
|
||
**测试方案**
|
||
- 统计口径一致性;筛选组合;导出任务可用性。
|
||
|
||
### 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) 支付集成
|
||
**需求目标**
|
||
- 最终阶段对接真实支付。
|
||
|
||
**技术方案(后端)**
|
||
- 接入支付网关并补齐回调/退款逻辑。
|
||
|
||
**测试方案**
|
||
- 沙箱支付 + 回调验签。
|
||
|
||
---
|
||
|
||
## 已完成
|
||
- 内容可见性与 tenant_only 访问控制。
|
||
- OTP 登录流程与租户成员校验(未加入拒绝登录)。
|
||
- ID 类型已统一为 int64(仅保留 upload_id/external_id/uuid 等非数字标识)。
|
||
- 内容资源权限与预览差异化(未购预览、已购/管理员/成员全量)。
|
||
- 审计操作显式传入操作者信息(服务层不再依赖 ctx 读取)。
|
||
- 运营统计报表(overview + CSV 导出基础版)。
|
||
- 超管后台治理能力(健康度/异常监控/内容审核)。
|
||
|
||
## 里程碑建议
|
||
- M1:完成 P0
|
||
- M2:完成 P1
|
||
- M3:完成 P2
|