feat: modularize external providers

This commit is contained in:
2026-07-27 17:47:21 +08:00
parent db4c7b4496
commit 70b99e6063
47 changed files with 1219 additions and 667 deletions

View File

@@ -1,6 +1,6 @@
# TIKU Backend
题库 SaaS 正式后端。项目正在从旧 PocketBase / Supabase / Nest 方案迁到更可控的 ASP.NET Core + PostgreSQL 架构。本仓库是后续开发的唯一目标后端,架构决策见 [`docs/adr/0001-authoritative-dotnet-backend.md`](docs/adr/0001-authoritative-dotnet-backend.md)。
题库 SaaS 正式后端。项目从旧 PocketBase / Supabase / Nest 方案收敛到 ASP.NET Core + PostgreSQL 架构。本仓库是后续开发的唯一目标后端,架构决策见 [`docs/adr/0001-authoritative-dotnet-backend.md`](docs/adr/0001-authoritative-dotnet-backend.md)。
当前判断很明确:现在团队已经有后端开发,继续把核心认证、权限、多租户隔离、业务一致性交给 BaaS 规则会让复杂度藏在平台、SQL policy 和前端约定之间。新后端把这些东西收回应用层和数据库约束里,开发、排查、审计都会更直接。
@@ -74,12 +74,13 @@ Tiku.IntegrationTests # API / EF 模型集成测试
### 5. 资源存储不绑 Supabase
旧版资源层实际使用 Node `ali-oss`。新后端按这个方向迁移到 `AlibabaCloud.OSS.V2`
旧版资源层实际使用 Node `ali-oss`。新后端已经按这个方向迁移到 `AlibabaCloud.OSS.V2`
- Application 只依赖 `IObjectStorageService`
- Infrastructure 收敛阿里云 OSS SDK 细节。
- 租户外部服务统一通过 `TenantExternalProvider` + `TenantSecret` 配置。
- 对象 key 默认要求租户前缀,避免资源混放。
- 上传签名前校验 MIME、大小和 provider。
- 上传签名前校验 MIME、大小和租户对象存储 provider。
- 下载/预览必须先过业务授权,再签发临时 URL。
- OSS HEAD metadata 用于上传确认、大小/MIME/ETag/安全扫描校验。
@@ -90,7 +91,7 @@ Tiku.IntegrationTests # API / EF 模型集成测试
数据库模型迁移已经完成到 greenfield 初始 schema
```text
Tiku.Infrastructure/Persistence/Migrations/20260727084726_InitialSchema.cs
Tiku.Infrastructure/Persistence/Migrations/20260727093301_InitialSchema.cs
```
当前 EF 模型覆盖: