docs: document api migration template

This commit is contained in:
xiong
2026-07-26 13:29:44 +08:00
parent b10e1495c5
commit f0553a7919

View File

@@ -88,6 +88,8 @@ Tiku.Infrastructure/Persistence/Migrations/20260725220742_InitialSchema.cs
- 当前租户成员
- 租户管理员
- 第一批认证/租户接口已经建立:
- `GET /api/tenant/resolve`
- `GET /api/tenant/current-public`
- `POST /api/auth/login/password`
- `POST /api/auth/login/sms`
- `POST /api/auth/oauth/wechat`
@@ -96,6 +98,7 @@ Tiku.Infrastructure/Persistence/Migrations/20260725220742_InitialSchema.cs
- `POST /api/auth/logout`
- `GET /api/me`
- `GET /api/tenants/current`
- `GET /api/health`
- 多租户数据表普遍包含 `TenantId`
- 大量租户内关系使用 composite FK避免只靠应用代码约定租户一致性。
- 不迁移 Supabase RLS、`app_private` schema、生产保护 policy。
@@ -122,6 +125,9 @@ Tiku.Infrastructure/Persistence/Migrations/20260725220742_InitialSchema.cs
- 租户关系 composite FK
- PB raw record 可追踪主键
- API / Auth 测试覆盖:
- 租户按 `tenantCode` / `host` 解析
- 公开品牌、主题、功能开关和 public config 返回
- health smoke test
- 未登录返回 401
- 无权限返回 403
- 密码登录成功/失败
@@ -169,10 +175,33 @@ dotnet ef migrations script \
--startup-project Tiku.DbMigrator
```
## API 迁移模板
后续从旧 Nest/Supabase 迁移 API 时,优先按当前认证和租户接口的模板推进:
1. DTO 放到 `Tiku.Api/Contracts`,只包含 HTTP 输入输出形状、校验属性和 OpenAPI 描述。
2. Controller 保持轻量只做路由、授权、DTO 到 Application request 的映射。
3. 业务流程放到 `Tiku.Application`EF/外部服务实现放到 `Tiku.Infrastructure`
4. 已登录业务接口默认从 `ICurrentTenant` / `ICurrentUser` 取上下文,不直接信任 body 里的 `tenantId`
5. 公开接口只返回 branding、feature flags、public config 等可暴露字段,不泄露 secret/refund/payment/internal metadata。
6. 每迁一个小闭环就补集成测试和 Scalar/OpenAPI 描述,测试通过后单独提交。
建议下一批迁移顺序:
```text
Catalog 基础只读 API
-> 地区 / 模块 / 学校 / 专业 / 科目 / 分类
Content Navigation 只读 API
-> 内容入口 / 内容树 / 题集 / 练习蓝图
Question Bank 只读 API
-> 题库列表 / 题目详情 / 题目版本
```
## 当前状态
- 数据库模型迁移已完成到初始 schema。
- migration 已整理为单个初始建库 migration。
- API 安全底座已建立JWT、Session、本地登录、当前用户、当前租户、基础授权策略。
- 租户公开入口已建立tenant resolve、public config、health。
- 当前模型测试、认证服务测试、API 认证/租户闭环测试通过。
- 下一步重点是继续把题库、内容、导入、订单等业务 API 接入这套安全轨道,而不是重新散写权限判断。