feat: 全局设置系统 — settings 表、CRUD 路由、主题偏好持久化

This commit is contained in:
2026-06-05 23:10:32 +08:00
parent e2eba6dc1f
commit 3f88e33bd1
23 changed files with 652 additions and 54 deletions

View File

@@ -31,35 +31,45 @@ Request -> Bun.serve routes 声明式匹配 -> routes/*.ts handler -> helpers/
- 共享类型在 `src/shared/`
- 前端禁止 import `src/server/` 运行时实现;后端禁止依赖 `src/web/` 运行时代码HTML import 集成除外)。
## 配置定位
| 配置类型 | 来源 | 内容 | 可变性 |
| -------- | ------------------------------------------------------------------------ | ------------------------------ | ---------- |
| 启动配置 | CLI 传入的 `config.yaml` | 监听地址、端口、日志、数据目录 | 进程内只读 |
| 业务设置 | 管理台 `/settings` 页面 → `GET/PUT /api/settings` → SQLite `settings` 表 | 主题偏好等 UI/业务开关 | 运行时可变 |
启动配置由 `src/server/config.ts``loadServerConfig()` 在启动时加载并校验,运行时不可更改。业务设置通过独立 API 持久化,与启动配置在存储和生命周期上完全解耦。
## 主要模块
| 模块 | 职责 |
| ------------------------- | -------------------------------------------------------- |
| `src/server/bootstrap.ts` | 统一启动引导、DB 初始化、shutdown 编排 |
| `src/server/config.ts` | 配置加载入口YAML 解析、规范化、契约校验、运行时校验 |
| `src/server/config/` | 配置子系统types、variables、issues、normalizer、schema |
| `src/server/logger.ts` | Logger 接口 + Pino 实现 + 测试替身 |
| `src/server/server.ts` | Bun HTTP server + routes 注册 |
| `src/server/routes/` | API handler按资源端点拆分 |
| `src/server/db/` | SQLite 连接、schema、migration、data access |
| `src/server/ai/` | AI Provider Registry + Agent + 工具 |
| `src/server/helpers/` | 响应格式化、URL 工具 |
| `src/server/middleware/` | 参数校验 + 错误处理 |
| `src/web/layouts/` | 前端布局组件AdminLayout / WorkbenchLayout |
| `src/web/features/` | 前端功能模块dashboard / projects / models / chat |
| `src/web/shared/` | 前端共享代码components / hooks / utils |
| `src/shared/api.ts` | 前后端共享 API 类型 |
| `src/shared/app.ts` | 应用全局常量 |
| 模块 | 职责 |
| ------------------------- | --------------------------------------------------------------- |
| `src/server/bootstrap.ts` | 统一启动引导、DB 初始化、shutdown 编排 |
| `src/server/config.ts` | 配置加载入口YAML 解析、规范化、契约校验、运行时校验 |
| `src/server/config/` | 配置子系统types、variables、issues、normalizer、schema |
| `src/server/logger.ts` | Logger 接口 + Pino 实现 + 测试替身 |
| `src/server/server.ts` | Bun HTTP server + routes 注册 |
| `src/server/routes/` | API handler按资源端点拆分 |
| `src/server/db/` | SQLite 连接、schema、migration、data access |
| `src/server/ai/` | AI Provider Registry + Agent + 工具 |
| `src/server/helpers/` | 响应格式化、URL 工具 |
| `src/server/middleware/` | 参数校验 + 错误处理 |
| `src/web/layouts/` | 前端布局组件AdminLayout / WorkbenchLayout |
| `src/web/features/` | 前端功能模块dashboard / projects / models / chat / settings |
| `src/web/shared/` | 前端共享代码components / hooks / utils |
| `src/shared/api.ts` | 前后端共享 API 类型 |
| `src/shared/app.ts` | 应用全局常量 |
## 路由分组
| 资源 | 路径前缀 | 文件目录 |
| --------- | ----------------------------------------------- | ------------------- |
| meta | `/api/meta` | `routes/meta.ts` |
| providers | `/api/providers` | `routes/providers/` |
| models | `/api/models` | `routes/models/` |
| projects | `/api/projects` | `routes/projects/` |
| chat | `/api/projects/:id/conversations``:id/chat` | `routes/chat/` |
| 资源 | 路径前缀 | 文件目录 |
| --------- | ----------------------------------------------- | -------------------- |
| meta | `/api/meta` | `routes/meta.ts` |
| providers | `/api/providers` | `routes/providers/` |
| models | `/api/models` | `routes/models/` |
| projects | `/api/projects` | `routes/projects/` |
| chat | `/api/projects/:id/conversations``:id/chat` | `routes/chat/` |
| settings | `/api/settings` | `routes/settings.ts` |
## 更新触发条件