# ADR 0001:以 .NET + PostgreSQL 作为唯一目标后端 - 状态:已接受 - 日期:2026-07-27 ## 背景 旧 NestJS 后端与 Supabase 数据库、认证、存储和规则耦合较深。新的 ASP.NET Core 后端已经具备 EF Core 模型、迁移链和业务 API。前后端尚未正式开发,仍可直接收敛技术路线。 ## 决策 1. 本仓库是题库 SaaS 唯一继续演进的后端。 2. 旧 NestJS 仓库冻结为业务行为、接口契约和数据迁移参考。 3. EF Core Migration 是普通数据库结构变更的权威历史;生产通过 `Tiku.DbMigrator` 显式执行迁移,API 不自动同步结构。 4. 应用只依赖标准 PostgreSQL 和 Npgsql,不以 Supabase 作为运行时依赖或托管目标。 5. 身份、对象存储、短信、支付、通知和 AI 通过 Application 接口隔离供应商,并通过 `TenantExternalProvider` + `TenantSecret` 配置。 6. Yudao 只参考 RBAC、租户套餐、审计和后台产品设计,不作为运行时依赖。 7. 新功能按业务闭环迁移和验收,不以 Controller 或 endpoint 数量作为完成标准。 ## 边界 - 认证和授权由 ASP.NET Core、JWT、数据库 Session 和应用权限策略负责。 - 多租户隔离由请求租户上下文、EF 查询/写入防护、数据库约束和真实 PostgreSQL 测试共同负责。 - 普通表、列、索引、外键和普通约束由 EF Core Migration 管理。 - EF 不能表达的跨表租户不变量使用集中 PostgreSQL guard,由 migration 调用并接受测试。 - 旧 OpenAPI 用于发现能力缺口,不要求新接口逐字兼容。 ## 结果 - 不建设长期双后端或双写链路。 - 不保留 Supabase 作为认证、存储或数据库运行时目标。 - 更换 PostgreSQL 托管商或外部服务供应商不要求重写业务代码。