forked from gongxuegit/tiku-backend.net
feat: add phase five operations foundation
This commit is contained in:
@@ -164,6 +164,26 @@
|
||||
- SessionQuestion 的版本属于对应题目。
|
||||
- 学习记录与当前租户、学生和会话一致。
|
||||
|
||||
### EF Core 与 PostgreSQL 约束分工
|
||||
|
||||
EF Core 负责实体、Fluent Configuration、Migration 生成和迁移执行入口,迁移仍然是 code-first 管理,不允许去生产库手工补结构。
|
||||
|
||||
但以下跨表、跨租户不变量不能指望 ORM 自动推导:
|
||||
|
||||
- `TenantQuestionReference` 只能引用平台主体公共题或当前租户私题,不能引用其他租户私题。
|
||||
- `TaxonomyNode` 的父节点只能属于平台主体或当前租户,不能挂到其他租户节点。
|
||||
- 需要读取 `tenants.mode` 或比较多列 owner 关系的规则。
|
||||
|
||||
原因是 PostgreSQL `CHECK` 不能跨表查询,普通 FK 只能证明目标记录存在,不能表达“目标 owner 必须是平台主体或本租户”。这类规则必须落到 PostgreSQL trigger / constraint trigger。
|
||||
|
||||
实现要求:
|
||||
|
||||
- 触发器 SQL 必须集中在基础设施层,例如 `Tiku.Infrastructure/Persistence/PostgreSqlTenantConstraintSql.cs`。
|
||||
- Migration 只调用集中 SQL helper,例如 `migrationBuilder.Sql(PostgreSqlTenantConstraintSql.CreateTenantQuestionReferenceGuard)`。
|
||||
- 不允许把触发器 SQL 零散复制到多个 migration。
|
||||
- 每个触发器必须有真实 PostgreSQL 集成测试覆盖允许路径和拒绝路径。
|
||||
- 如果将来新增类似“平台或本租户”的 owner 规则,优先补集中 SQL helper 和模型/集成测试,不要只靠 Service 手写校验。
|
||||
|
||||
## 测试矩阵
|
||||
|
||||
真实 PostgreSQL 测试创建平台主体、租户 A、租户 B 及三套内容,至少覆盖:
|
||||
|
||||
Reference in New Issue
Block a user