Files
tiku-backend.net/README.md

90 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TIKU Backend
TIKU Backend 是题库 SaaS 的 ASP.NET Core 后端,使用 EF Core 管理 PostgreSQL 数据,提供平台端、租户端和学生端 API并由独立 Worker 处理后台任务。
![TIKU Backend 技术架构图](docs/assets/tiku-backend-architecture.svg)
## 当前技术栈
- .NET 10 / ASP.NET Core Controller API
- Entity Framework Core 10 + Npgsql 10 + PostgreSQL
- ASP.NET Core Identity + RSA JWT + 数据库存储的 Session
- Scalar + OpenAPI仅 Development 暴露)
- Redis分布式安全频控和生产输出缓存
- MassTransit 8 + RabbitMQ 4 + EF Core Outbox
- Serilog + OpenTelemetry
- xUnit 单元测试和真实 PostgreSQL 集成测试
## 解决方案结构
```text
Tiku.Api HTTP API、中间件、认证授权、OpenAPI/Scalar、静态管理端
Tiku.Application 用例契约、应用服务接口和安全上下文
Tiku.Domain 领域实体、枚举和值对象
Tiku.Infrastructure EF Core、PostgreSQL、认证、消息和外部服务实现
Tiku.Contracts API 与 Worker 之间的版本化消息契约
Tiku.DbMigrator 数据库迁移、内置目录 seed 和平台管理员引导
Tiku.Worker 域名、订阅、用量和后台任务处理
Tiku.UnitTests 单元测试
Tiku.IntegrationTests API、授权、EF 模型、迁移和真实 PostgreSQL 测试
```
依赖方向固定为:`Domain <- Application <- Infrastructure``Api``Worker``DbMigrator` 是组合根;第三方 SDK、数据库访问和密钥处理只放在 Infrastructure。
## 快速启动
需要 .NET 10 SDK 和 PostgreSQL。Development 默认连接本机 `tiku` 数据库,也可以通过 `DATABASE_URL` 覆盖。
```bash
createdb -h 127.0.0.1 -U "$(whoami)" tiku
dotnet restore TIKU-BACKEND.slnx
dotnet build TIKU-BACKEND.slnx --no-restore
ASPNETCORE_ENVIRONMENT=Development dotnet run --project Tiku.DbMigrator
dotnet run --project Tiku.Api
```
Development 首次迁移会创建平台管理员 `admin@tiku.local`,随机临时密码只在 DbMigrator 首次运行的终端输出。完整步骤见[本地开发与运行](docs/quickstart.md)。
默认开发入口:
- 平台管理端:<http://localhost:5090/platform-admin/>
- Scalar<http://localhost:5090/scalar/v1>
- OpenAPI<http://localhost:5090/openapi/v1.json>
- Liveness<http://localhost:5090/api/health>
- Readiness<http://localhost:5090/api/health/ready>
## 运行时边界
- API 不自动执行数据库迁移;部署和本地初始化都使用 `Tiku.DbMigrator`
- Development 可不配置 Redis 和 RabbitMQProduction 缺少任一依赖时 API 与 Worker 会拒绝启动。
- 租户由可信 Host 解析;平台 Host 上只有允许的路径可通过 `x-tenant-code``tenantCode` 指定租户。
- 租户数据由 EF Query Filter、写入拦截器、租户限定外键/唯一索引和 PostgreSQL guard 共同隔离。
- 普通请求默认要求认证;匿名接口必须显式声明 `[AllowAnonymous]`
- API 只在 Development 映射 OpenAPI 和 Scalar不应把文档端点作为生产依赖。
## 常用验证
```bash
dotnet build TIKU-BACKEND.slnx --no-restore
dotnet test TIKU-BACKEND.slnx --no-build
dotnet format TIKU-BACKEND.slnx --verify-no-changes --no-restore
dotnet ef migrations has-pending-model-changes \
--project Tiku.Infrastructure \
--startup-project Tiku.DbMigrator \
--no-build
git diff --check
```
PostgreSQL 特有的迁移、事务、约束和跨租户不变量必须由 `Tiku.IntegrationTests` 在真实 PostgreSQL 上验证,不能只依赖 EF InMemory。
## 文档
当前文档统一从[文档总览](docs/README.md)进入:
- [系统架构与业务边界](docs/architecture/overview.md)
- [认证、授权与租户隔离](docs/architecture/security-and-tenancy.md)
- [配置与后台任务](docs/operations.md)
- [本地开发与运行](docs/quickstart.md)
接口、DTO、请求参数和响应模型以运行时 OpenAPI/Scalar 为准;文档不再维护手写接口清单或迁移过程记录。