feat: 查询页面重构 — 去掉新建查询按钮, 默认直接显示编辑器 + 右侧历史抽屉
1. QueriesPage 重构: - 去掉两段式切换(历史列表→新建查询面板) - 默认直接显示 SQL 编辑器,无需点'新建查询' - 实例+数据库选择器紧凑排列在顶栏 - 执行按钮移到顶栏右侧,操作更便捷 - 查询历史改为右侧可折叠抽屉(点击'历史'按钮展开) - 全高布局 h-[calc(100vh-3rem)],编辑区和结果区更宽敞 - Schema 导航侧边栏、快捷模板、CSV导出等保留 2. 文档更新: - FEATURES.md: 补充定时执行、SQL检测、日志清理、系统设置种子机制 - ARCHITECTURE.md: 补充 APScheduler+SQLite 持久化调度、日志清理服务、Settings Seeds - ROADMAP.md: 标记已完成功能,更新P1-P3进度 - AUDIT_REPORT.md: 更新服务/文件/测试数量统计
This commit is contained in:
1 parent
00db0e5bca
commit
0995abce08
5 files changed
+534
-727
No files matched your search
+86
-30
@@ -1,6 +1,6 @@
|
||||
# SQL-Platform-Pro 系统架构文档
|
||||
|
||||
> 生成时间: 2026-05-24 | 最新 Commit: 9813741
|
||||
> 生成时间: 2026-05-25 | 最新 Commit: 9813741+
|
||||
|
||||
## 1. 系统定位
|
||||
|
||||
@@ -8,16 +8,17 @@
|
||||
|
||||
## 2. 技术栈
|
||||
|
||||
| 层级 | 技术 | 版本 |
|
||||
|------|------|------|
|
||||
| 后端框架 | FastAPI + SQLAlchemy 2 async | Python 3.11+ |
|
||||
| 数据库 | SQLite (开发) | aiomysql / asyncpg / redis.asyncio / pymongo |
|
||||
| 前端框架 | React 19 + TypeScript | Vite 7 |
|
||||
| UI 组件 | shadcn/ui + Tailwind CSS 4 | Radix UI |
|
||||
| 代码编辑器 | CodeMirror 6 | @codemirror/lang-sql |
|
||||
| 图表 | Recharts | — |
|
||||
| 认证 | JWT (30min) + bcrypt 4.0 | — |
|
||||
| 部署 | Docker + docker-compose | run.sh PID 管理 |
|
||||
|| 层级 | 技术 | 版本 |
|
||||
||------|------|------|
|
||||
|| 后端框架 | FastAPI + SQLAlchemy 2 async | Python 3.11+ |
|
||||
|| 数据库 | SQLite (开发) | aiomysql / asyncpg / redis.asyncio / pymongo |
|
||||
|| 定时调度 | APScheduler 3.11.2 + SQLite 持久化 | apscheduler.db |
|
||||
|| 前端框架 | React 19 + TypeScript | Vite 7 |
|
||||
|| UI 组件 | shadcn/ui + Tailwind CSS 4 | Radix UI |
|
||||
|| 代码编辑器 | CodeMirror 6 | @codemirror/lang-sql |
|
||||
|| 图表 | Recharts | — |
|
||||
|| 认证 | JWT (30min) + bcrypt 4.0 | — |
|
||||
|| 部署 | Docker + docker-compose | run.sh PID 管理 |
|
||||
|
||||
## 3. 系统架构图
|
||||
|
||||
@@ -27,23 +28,29 @@
|
||||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ Dashboard │ │ Queries │ │ Tickets │ │ Instances│ │
|
||||
│ └─────┬────┘ └─────┬────┘ └─────┬────┘ └─────┬────┘ │
|
||||
│ ┌──────┴──────┐ ┌────┴─────┐ ┌───┴──────┐ │
|
||||
│ │ SchemaSide │ │ SqlEditor│ │ Workflow │ │
|
||||
│ │ bar(Redis树)│ │ (CM6) │ │ Page │ │
|
||||
│ └─────────────┘ └──────────┘ └──────────┘ │
|
||||
│ ┌──────┴──────┐ ┌────┴─────┐ ┌───┴──────┐ ┌──┴───────┐ │
|
||||
│ │ SchemaSide │ │ SqlEditor│ │ Workflow │ │AutoTask │ │
|
||||
│ │ bar(Redis树)│ │ (CM6) │ │ Page │ │Page │ │
|
||||
│ └─────────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
||||
│ ↕ axios /api/v1 │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ 后端 (FastAPI) │
|
||||
│ ┌────────────────────────────────────────────────────┐ │
|
||||
│ │ API Layer (29 endpoints) │ │
|
||||
│ │ API Layer (29+ endpoints) │ │
|
||||
│ │ auth | user | instance | ticket | query | audit │ │
|
||||
│ │ audit_rule | notification | workflow | settings │ │
|
||||
│ │ ticket_scheduler | log_cleanup │ │
|
||||
│ └──────────────────────┬─────────────────────────────┘ │
|
||||
│ ┌──────────────────────┴─────────────────────────────┐ │
|
||||
│ │ Service Layer (31 services) │ │
|
||||
│ │ Service Layer (33+ services) │ │
|
||||
│ │ query_service | audit_engine | ticket_executor │ │
|
||||
│ │ instance_service | notification_sender │ │
|
||||
│ │ approval_timeout | role_permissions │ │
|
||||
│ │ ticket_scheduler | log_cleanup | settings_seeds │ │
|
||||
│ └──────────────────────┬─────────────────────────────┘ │
|
||||
│ ┌──────────────────────┴─────────────────────────────┐ │
|
||||
│ │ Scheduler Layer (APScheduler) │ │
|
||||
│ │ 定时工单执行 | 日志自动清理 (cron 03:00) │ │
|
||||
│ └──────────────────────┬─────────────────────────────┘ │
|
||||
│ ┌──────────────────────┴─────────────────────────────┐ │
|
||||
│ │ Connector Layer │ │
|
||||
@@ -51,7 +58,7 @@
|
||||
│ │ redis_connector | mongo_connector │ │
|
||||
│ └──────────────────────┬─────────────────────────────┘ │
|
||||
│ ┌──────────────────────┴─────────────────────────────┐ │
|
||||
│ │ SQLite(metadata) | MySQL | PostgreSQL | Redis | MongoDB│
|
||||
│ │ SQLite(metadata) | apscheduler.db | MySQL | PostgreSQL | Redis | MongoDB│
|
||||
│ └────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
@@ -133,6 +140,44 @@ ticket_executor.py → 按 instance.db_type 执行:
|
||||
→ ExecutionReport (status/affected_rows/duration/warnings/errors)
|
||||
```
|
||||
|
||||
### 4.6 定时调度器 (APScheduler)
|
||||
|
||||
```
|
||||
ticket_scheduler.py:
|
||||
├─ APScheduler BackgroundScheduler + SQLite 持久化 (apscheduler.db)
|
||||
├─ 工单 scheduled_at 到期 → 自动触发执行
|
||||
├─ 状态流转: approved → scheduled → executing → success/failed
|
||||
├─ 支持取消定时: POST /tickets/{id}/cancel-schedule
|
||||
└─ 统计接口: GET /tickets/scheduled/stats
|
||||
|
||||
log_cleanup.py:
|
||||
├─ APScheduler cron job → 每天 03:00 自动执行
|
||||
├─ 读取 cleanup 分组配置 (6 项)
|
||||
├─ 按保留天数清理:
|
||||
│ ├─ 工单 (只清理已完成/已拒绝, 0天=不清理)
|
||||
│ ├─ 审计日志
|
||||
│ ├─ 查询历史
|
||||
│ └─ 定时任务日志
|
||||
├─ 手动触发: POST /settings/cleanup/run
|
||||
└─ 预览: GET /settings/cleanup/preview
|
||||
```
|
||||
|
||||
### 4.7 系统设置种子机制
|
||||
|
||||
```
|
||||
settings_seeds.py:
|
||||
├─ SETTING_GROUPS: 分组元信息 (query_control / security / ticket / cleanup)
|
||||
├─ _ensure_settings(): 启动时自动补缺失配置项
|
||||
├─ SETTING_DEFINITIONS: 所有设置项定义 (key/value_type/default/group/label)
|
||||
└─ 新增 cleanup 分组 (6 项):
|
||||
├─ cleanup_enabled (bool, false)
|
||||
├─ cleanup_time (str, "03:00")
|
||||
├─ cleanup_ticket_days (int, 90)
|
||||
├─ cleanup_audit_days (int, 180)
|
||||
├─ cleanup_query_history_days (int, 30)
|
||||
└─ cleanup_task_log_days (int, 30)
|
||||
```
|
||||
|
||||
## 5. 数据模型
|
||||
|
||||
### 5.1 核心 ORM 模型 (22 个)
|
||||
@@ -142,7 +187,7 @@ ticket_executor.py → 按 instance.db_type 执行:
|
||||
| User | 用户 | username, password_hash, role, display_name |
|
||||
| Instance | 数据源实例 | name, host, port, db_type, access_mode, group_id |
|
||||
| InstanceGroup | 权限组 | name, description, access_type, workflow_id |
|
||||
| Ticket | 工单 | ticket_no, title, db_type, status, sql_content, audit_result |
|
||||
|| Ticket | 工单 | ticket_no, title, db_type, status, sql_content, audit_result, **scheduled_at** |
|
||||
| TicketApproval | 审批记录 | ticket_id, step_number, approver_id, action, step_type |
|
||||
| AuditLog | 审计日志 | user_id, action, resource_type, resource_id |
|
||||
| AuditRule | 审核规则 | name, code, db_type, rule_type, severity |
|
||||
@@ -245,7 +290,7 @@ Redis Keys 目录树:
|
||||
|
||||
## 8. 系统配置
|
||||
|
||||
12 项配置分 3 组:
|
||||
18 项配置分 4 组:
|
||||
|
||||
**查询控制 (7 项)**:
|
||||
- query_require_approval (bool) - 查询是否需要审批
|
||||
@@ -265,6 +310,14 @@ Redis Keys 目录树:
|
||||
- ticket_default_workflow (string, "standard") - 默认审批流
|
||||
- ticket_allow_rollback (bool) - 允许回滚
|
||||
|
||||
**清理配置 (6 项)** 🆕:
|
||||
- cleanup_enabled (bool, false) - 启用自动清理
|
||||
- cleanup_time (string, "03:00") - 清理执行时间
|
||||
- cleanup_ticket_days (int, 90) - 工单保留天数 (0=不清理)
|
||||
- cleanup_audit_days (int, 180) - 审计日志保留天数
|
||||
- cleanup_query_history_days (int, 30) - 查询历史保留天数
|
||||
- cleanup_task_log_days (int, 30) - 定时任务日志保留天数
|
||||
|
||||
## 9. 四角色体系
|
||||
|
||||
| 角色 | 权限范围 |
|
||||
@@ -296,13 +349,16 @@ docker-compose up -d # 部署
|
||||
|
||||
## 11. 关键设计决策
|
||||
|
||||
| 决策 | 原因 |
|
||||
|------|------|
|
||||
| SQLite 开发数据库 | 零配置,单文件,便于版本管理 |
|
||||
| AES-256-GCM 加密实例密码 | 安全存储,向后兼容明文 |
|
||||
| JWT 30分钟过期 | 安全与便利平衡 |
|
||||
| 暗色主题 CSS 变量体系 (--dg-) | 统一视觉风格 |
|
||||
| CodeMirror 6 | 现代化编辑器,SQL 自动补全 |
|
||||
| 权限组中间表设计 | 一组同时包含只读+写入实例 |
|
||||
| React.lazy 代码分割 | 首屏 -44% (2676KB→1438KB) |
|
||||
| 工单编号 20 位 | 时间戳+微秒+序号,全局唯一 |
|
||||
|| 决策 | 原因 |
|
||||
||------|------|
|
||||
|| SQLite 开发数据库 | 零配置,单文件,便于版本管理 |
|
||||
|| AES-256-GCM 加密实例密码 | 安全存储,向后兼容明文 |
|
||||
|| JWT 30分钟过期 | 安全与便利平衡 |
|
||||
|| 暗色主题 CSS 变量体系 (--dg-) | 统一视觉风格 |
|
||||
|| CodeMirror 6 | 现代化编辑器,SQL 自动补全 |
|
||||
|| 权限组中间表设计 | 一组同时包含只读+写入实例 |
|
||||
|| React.lazy 代码分割 | 首屏 -44% (2676KB→1438KB) |
|
||||
|| 工单编号 20 位 | 时间戳+微秒+序号,全局唯一 |
|
||||
|| APScheduler + SQLite 持久化 | 定时任务跨重启不丢失,轻量级方案 |
|
||||
|| 设置种子数据机制 | `_ensure_settings` 启动自动补全,保证配置完整性 |
|
||||
|| 工单创建页单页化 | 简化三步向导为一键提交,提升操作效率 |
|
||||
Reference in new issue
Block a user