feat(saas): implement marketplace and tenant onboarding

This commit is contained in:
2026-07-29 13:58:59 +08:00
parent 76606029e2
commit 6db200a2fc
145 changed files with 16862 additions and 94529 deletions

View File

@@ -83,12 +83,15 @@ PostgreSQL guard 负责 EF 无法表达的跨表租户不变量:
- `TenantQuestionReference` 只能引用平台公共题或当前租户私题;
- `TaxonomyNode` 父节点只能属于平台主体或当前租户;
- 需要读取 `tenants.mode` 或比较 owner 关系的条件约束。
- 已发布套餐版本及其模块、额度清单不可修改;订阅套餐类型与订单快照必须一致。
- 套餐控制 Feature角色控制 Permission菜单仅按有效权限生成导航内容后台按题库、词汇、手册、视频、分数线和站点内容分模块授权。
- 员工、学生、私有题、存储、导入、导出和短信额度在业务写入时原子消费Worker 定期按真实数据校准当前量。
维护规则:
1. SQL 放在 `Tiku.Infrastructure/Persistence/PostgreSqlTenantConstraintSql.cs`
2. Migration 只调用 `migrationBuilder.EnsureTenantIsolationGuards()` / `DropTenantIsolationGuards()`
3. 重建 `InitialSchema` 后,`Up()` 末尾必须调用 `EnsureTenantIsolationGuards()``Down()` 开头必须调用 `DropTenantIsolationGuards()`
1. 租户 SQL 放在 `PostgreSqlTenantConstraintSql.cs`SaaS 商品 SQL 放在 `PostgreSqlSaasCatalogConstraintSql.cs`
2. Migration 只调用集中 helper不复制 trigger SQL
3. 重建 `InitialSchema` 后,`Up()` 末尾必须调用 `EnsureTenantIsolationGuards()``EnsureSaasCatalogGuards()``Down()` 先调用对应 Drop helper
4. 新增 guard 前先判断能否用 EF FK / unique / check 表达;表达不了才加 PostgreSQL guard。
5. 每个 guard 必须有 migration script 断言和真实 PostgreSQL 越权测试。
@@ -110,6 +113,7 @@ PostgreSQL guard 负责 EF 无法表达的跨表租户不变量:
- [迁移路线与剩余范围](docs/migration-roadmap.md)
- [API 契约基线说明](docs/migration/contracts/README.md)
- [AI 底座设计](docs/migration/phase-8-ai-foundation.md)
- [第九阶段SaaS 模块商城与租户交付闭环](docs/migration/phase-9-saas-marketplace-and-onboarding.md)
## 常用命令