新增 5 个文档: - ARCHITECTURE.md (308行) — 系统架构图 + 核心模块 + 数据模型 + 关键决策 - AUDIT_REPORT.md (432行) — 完整审计报告 (规模/依赖/测试/数据库) - FEATURES.md (194行) — 功能清单 (已完成/开发中/待实现) - PROJECT_EVALUATION.md (63行) — 项目评估 (4.2/5.0 评分 + 竞品对比) - ROADMAP.md (52行) — 开发路线图 (13个里程碑 + 4个Sprint计划)
20 KiB
20 KiB
SQL-Platform-Pro 全面架构审计报告
生成时间: 2026-05-24
项目路径: ~/devops/sql-platform
Git 总提交数: 56
1. 项目结构概览
1.1 技术栈
| 层级 | 技术 |
|---|---|
| 前端框架 | React 19 + TypeScript 5.9 + Vite 7 |
| UI 组件库 | Radix UI + Tailwind CSS (shadcn/ui 风格) |
| 后端框架 | FastAPI + SQLAlchemy 2 (异步) |
| 数据库 | SQLite (开发) / 可切换 MySQL/PostgreSQL |
| 多数据库支持 | MySQL (aiomysql), PostgreSQL (asyncpg), MongoDB (motor), Redis (redis) |
| 容器化 | Docker Compose + Dockerfile (前后端) |
| 数据库迁移 | Alembic |
1.2 目录结构
sql-platform/
├── backend/ # Python FastAPI 后端
│ ├── app/
│ │ ├── api/v1/endpoints/ # 29 个 API 端点文件
│ │ ├── core/ # 配置/安全/数据库/权限
│ │ ├── dependencies/ # 依赖注入
│ │ ├── models/ # 16 个 ORM 模型
│ │ ├── schemas/ # 17 个 Pydantic Schema
│ │ ├── services/ # 31 个业务服务
│ │ └── utils/ # 工具函数
│ ├── alembic/ # 数据库迁移
│ ├── tests/ # 46 个测试文件
│ ├── venv/ # Python 虚拟环境
│ └── requirements.txt
├── frontend/ # React 前端
│ ├── src/
│ │ ├── api/ # 15 个 API 模块
│ │ ├── components/ # 9 个自定义组件 + 50 个 UI 组件
│ │ ├── hooks/ # 5 个自定义 Hooks
│ │ ├── pages/ # 26 个页面
│ │ ├── lib/ # 工具函数/常量
│ │ ├── constants/ # 菜单常量
│ │ └── types/ # TypeScript 类型定义
│ ├── dist/ # 构建产物
│ ├── public/ # 静态资源 (DB logos)
│ └── package.json
├── docker-compose.yml
├── run.sh / run.bat
└── 文档: ROADMAP.md, RELEASE_NOTES.md, TDD_PLAN.md 等
1.3 源代码规模
| 指标 | 数值 |
|---|---|
| 源文件总数 (排除 dist/venv/node_modules/git) | 326 |
| 后端 Python 总行数 | 47,003 |
| 前端 TS/TSX 总行数 | 23,486 |
| 项目总代码行数 | ~70,489 |
2. 后端模型统计 (16 个模型)
| 模型文件 | 类名 | 主要字段数 | 说明 |
|---|---|---|---|
user.py |
User | 10 | id, username, display_name, email, phone, hashed_password, role, is_active, last_login, timestamps |
instance.py |
Instance | 17 | id, name, db_type, host, port, username, password, database, env, description, status, version, access_mode, workflow_id, excluded_databases, mask_fields, group_id |
instance_group.py |
InstanceGroup | 9 | id, name, description, db_type, permissions, access_type, allowed_databases, is_active, timestamps |
ticket.py |
Ticket | 17 | id, ticket_no, title, db_type, instance_id, target_database, sql_content, rollback_sql, status, priority, applicant_id, approver_id, reason, audit_result, execute_result, timestamps |
workflow.py |
WorkflowDefinition | 6 | id, name, description, category, is_default, is_active, timestamps |
workflow.py |
WorkflowVersion | 8 | id, workflow_id, version_number, version_name, is_active, steps_snapshot, flow_config_snapshot, change_summary |
workflow.py |
WorkflowStep | 13 | id, workflow_id, step_number, name, step_type, approver_role, approver_ids, is_required, timeout_hours, auto_approve_on_timeout, conditions |
workflow.py |
TicketApproval | 15 | id, ticket_id, workflow_id, step_number, step_type, approver_id, actual_approver_id, action, comment, transfer, timestamps |
workflow.py |
WorkflowExecutionLog | 9 | id, workflow_id, ticket_id, step_id, event_type, actor_id, context_data, timestamp |
audit_log.py |
AuditLog | 17 | id, user_id, username, action, target_type, target_id, detail, db_type, database_name, execution_time_ms, rows_affected, result_status, query_content, ip_address |
audit_rule.py |
AuditRule | 10 | id, name, description, rule_type, severity, db_type, pattern, value, is_enabled, message |
query_history.py |
QueryHistory | 14 | id, user_id, username, instance_id, db_type, database_name, query_content, query_type, execution_time_ms, result_rows, is_success, is_favorite |
query_history.py |
QuickQueryModel | 12 | id, name, description, query_content, db_type, database_pattern, is_shared, created_by, usage_count |
scheduled_task.py |
ScheduledTask | 15 | id, name, task_sql_type, instance_id, target_db, sql_content, cron_expression, is_enabled, run_count, next_run_at |
scheduled_task.py |
ScheduledTaskLog | 8 | id, task_id, status, affected_rows, duration_ms, error_message, timestamps |
announcement.py |
Announcement | 6 | id, title, content, is_published, published_at, timestamps |
backup.py |
Backup | 9 | id, instance_id, title, database, filename, size_bytes, status, created_by |
masking_rule.py |
MaskingRule | 9 | id, instance_id, database, table_name, column_name, mask_type, mask_config |
notification.py |
NotificationChannel | 6 | id, name, channel_type, config, is_enabled |
notification_template.py |
NotificationTemplate | 7 | id, name, event_type, channel_type, title_template, body_template |
ldap_config.py |
LdapConfig | 9 | id, ldap_host, ldap_port, use_ldaps, admin_dn, admin_password, search_filter, base_dn |
schema_revision.py |
SchemaRevision | 8 | id, instance_id, database, revision, ddl_content, checksum, applied_by, status |
system_setting.py |
SystemSetting | 8 | id, key, value, value_type, group, label, description, default_value, sort_order |
模型总计: 22 个类 (16 个文件), ~110+ 字段定义
3. API 端点统计 (29 个文件, 146 条路由)
| 端点文件 | 路由数 | 行数 | 功能说明 |
|---|---|---|---|
ticket.py |
11 | 1,073 | SQL 工单全生命周期管理 |
redis.py |
11 | 275 | Redis 连接/查询/Key 管理 |
instance.py |
10 | 295 | 数据库实例 CRUD |
instance_detail.py |
10 | 348 | 实例详情 (表/字段/索引) |
instance_group.py |
10 | 437 | 权限组管理 |
audit_rule.py |
9 | 206 | 审核规则管理 |
scheduled_task.py |
8 | 287 | 定时任务调度 |
workflow.py |
7 | 273 | 审批流定义/版本/步骤 |
mongo.py |
6 | 256 | MongoDB 查询/集合浏览 |
query_history.py |
6 | 111 | 查询历史/快速查询 |
sql_assistant.py |
6 | 182 | AI SQL 助手 |
masking_rule.py |
5 | 337 | 数据脱敏规则 |
notification.py |
5 | 153 | 通知渠道/模板 |
user.py |
5 | 116 | 用户管理 |
db_types.py |
4 | 266 | 多数据库类型支持 |
dictionary.py |
4 | 70 | 数据字典 |
settings.py |
4 | 162 | 系统设置 |
announcement.py |
4 | 93 | 公告管理 |
auth.py |
3 | 58 | 认证 (登录/LDAP) |
backup.py |
3 | 62 | 数据库备份 |
ldap_config.py |
3 | 138 | LDAP 配置 |
pool.py |
3 | 64 | 连接池管理 |
schema_drift.py |
3 | 85 | Schema 漂移检测 |
query.py |
2 | 251 | SQL 查询执行 |
rollback.py |
2 | 176 | 回滚 SQL 生成 |
audit.py |
1 | 27 | 审计日志查询 |
dashboard.py |
1 | 62 | 仪表盘数据 |
impact.py |
1 | 33 | 影响分析 |
| 合计 | 146 | 5,896 |
4. 前端页面统计 (26 个页面, 14,008 行)
| 页面文件 | 行数 | 功能说明 |
|---|---|---|
InstancePage.tsx |
1,452 | 数据库实例管理 (最大页面) |
TicketCreatePage.tsx |
1,192 | 创建 SQL 工单 |
QueriesPage.tsx |
896 | SQL 查询编辑器 |
UsersPage.tsx |
877 | 用户管理 |
Dashboard.tsx |
825 | 仪表盘 |
WorkflowPage.tsx |
808 | 审批流程管理 |
TicketDetailPage.tsx |
808 | 工单详情 |
TicketsPage.tsx |
742 | 工单列表 |
ConfigPlatformPage.tsx |
700 | 平台配置 |
DataDictionaryPage.tsx |
688 | 数据字典 |
AuditRulesPage.tsx |
596 | 审核规则 |
AuditLogsPage.tsx |
555 | 审计日志 |
InstanceGroupPage.tsx |
465 | 权限组管理 |
NotificationPage.tsx |
456 | 通知管理 |
RolesPage.tsx |
417 | 角色权限 |
MongoDBDetailPage.tsx |
386 | MongoDB 浏览 |
AnnouncementPage.tsx |
349 | 公告管理 |
LdapConfigPage.tsx |
335 | LDAP 配置 |
RedisDetailPage.tsx |
309 | Redis 浏览 |
AutoTaskPage.tsx |
293 | 定时任务 |
InstanceDetailPage.tsx |
260 | 实例详情 |
PlatformConfigPage.tsx |
209 | 平台配置页 |
NotificationsPage.tsx |
180 | 通知列表 |
LoginPage.tsx |
134 | 登录页 |
SettingsPage.tsx |
56 | 设置页 |
Home.tsx |
20 | 首页占位 |
自定义组件 (9 个, 1,706 行)
| 组件文件 | 行数 | 功能说明 |
|---|---|---|
SchemaSidebar.tsx |
614 | 数据库 Schema 树形浏览 |
SqlEditor.tsx |
431 | CodeMirror SQL 编辑器 |
EditInstanceDialog.tsx |
276 | 实例编辑对话框 |
Layout.tsx |
126 | 全局布局/侧边栏 |
SkeletonCard.tsx |
65 | 骨架屏加载 |
ConfirmDialog.tsx |
59 | 确认对话框 |
FormDialog.tsx |
53 | 通用表单对话框 |
PageHeader.tsx |
55 | 页面头部 |
EmptyState.tsx |
27 | 空状态占位 |
另外有 50 个 shadcn/ui 基础组件 (components/ui/)。
前端 API 模块 (15 个)
auth.ts, dashboard.ts, dbTypes.ts, dictionary.ts, instance.ts, instanceDetail.ts, instanceGroup.ts, mongo.ts, notification.ts, query.ts, redis.ts, request.ts, ticket.ts, user.ts, workflow.ts
5. 后端服务统计 (31 个服务文件, 22,043 行)
| 服务文件 | 行数 | 功能说明 |
|---|---|---|
mysql_audit_rules.py |
2,199 | MySQL 审核规则库 |
redis_audit_rules.py |
1,869 | Redis 审核规则库 |
audit_engine_v2.py |
1,699 | 审核引擎 V2 |
ticket_executor.py |
1,688 | 工单执行器 |
mongodb_audit_rules.py |
1,638 | MongoDB 审核规则库 |
workflow_engine.py |
1,319 | 工作流引擎 |
postgres_audit_rules.py |
1,289 | PostgreSQL 审核规则库 |
query_service.py |
1,261 | 查询服务 |
audit_engine.py |
790 | 审核引擎 V1 |
mongo_connector.py |
780 | MongoDB 连接器 |
explain_service.py |
789 | EXPLAIN 执行计划分析 |
audit_rule_seeds.py |
637 | 审核规则种子数据 |
rollback_generator.py |
836 | 回滚 SQL 生成 |
data_masker.py |
401 | 数据脱敏 |
query_history_service.py |
451 | 查询历史服务 |
backup_executor.py |
351 | 备份执行器 |
db_connector.py |
345 | 数据库连接器 |
sql_assistant.py |
342 | AI SQL 助手 |
impact_analyzer.py |
315 | 影响分析 |
schema_drift_detector.py |
314 | Schema 漂移检测 |
redis_validator.py |
280 | Redis 命令验证 |
role_permissions.py |
279 | 角色/权限服务 |
redis_connector.py |
269 | Redis 连接器 |
sql_analyzer.py |
255 | SQL 分析器 |
dictionary_service.py |
240 | 数据字典服务 |
notification_sender.py |
238 | 通知发送 |
connection_pool.py |
228 | 连接池管理 |
audit_rule_seeds_v2.py |
500 | 审核规则种子 V2 |
instance_service.py |
134 | 实例服务 |
settings_seeds.py |
136 | 设置种子数据 |
workflow_seeds.py |
93 | 工作流种子数据 |
audit_log_service.py |
78 | 审计日志服务 |
6. 测试统计 (46 个测试文件, 1,075 个测试)
测试总数: 1,075 个测试用例
Top 10 测试文件
| 测试文件 | 测试数 | 覆盖领域 |
|---|---|---|
test_query_service.py |
75 | 查询服务 |
test_ticket_executor.py |
67 | 工单执行器 |
test_audit_engine_v2.py |
65 | 审核引擎 V2 |
test_query_history_service.py |
47 | 查询历史服务 |
test_masking_rule.py |
45 | 脱敏规则 |
test_explain.py |
40 | EXPLAIN 分析 |
test_sql_assistant.py |
37 | SQL 助手 |
test_notification.py |
35 | 通知系统 |
test_user.py |
34 | 用户管理 |
test_sql_analyzer.py |
31 | SQL 分析器 |
测试分布
| 测试数区间 | 文件数 |
|---|---|
| 50+ | 3 |
| 30-49 | 5 |
| 20-29 | 6 |
| 15-19 | 7 |
| 10-14 | 12 |
| 5-9 | 8 |
| <5 | 5 |
7. Git 历史 (56 次提交)
最近 30 次提交
9813741 feat: SchemaSidebar 加宽 + Redis key 点击插入查询命令到编辑器
2f76482 refactor: Redis 树取长补短 — 单列内嵌详情 + 类型颜色图标 + 左竖线层级
327ab33 feat: Redis Keys 目录树结构浏览 — 按 : 分隔符构建层级树
ed13243 feat: 多数据库类型支持 — Redis/MongoDB/PostgreSQL 数据库+表浏览
fb16723 fix: TicketCreatePage 去掉优先级选择器+修复Redis实例切换后database残留触发MySQL tables请求
08f0f88 feat: 工单列表重设计+权限组实例过滤+通知修复
88d064e feat: 权限组重构为一组双Transfer(只读+写入) + 用户管理加权限组关联
39d9600 refactor: 权限组从一组一类型改为一组同时包含readonly+write实例
40868c6 feat: 权限组创建改为双Transfer同时配置只读+写入
128de64 feat: 数据源编辑加排除数据库+脱敏字段+审批流关联; 权限组Transfer改为选择实例
4111e1e refactor: 权限组简化为2组(readonly/write) + Transfer穿梭框选择数据库
8161bcf feat: 权限组简化 + 工单撤销按钮
b80d383 refactor: 重构权限组系统 — 新增 access_type/allowed_databases 字段 + 角色权限服务
35a014e feat: 查询页增强 + 权限体系优化
aa2e26c feat: 查询页目标数据库改为下拉选择
e6ab5bf feat: SchemaSidebar 三级树结构 — 库→表→字段 (类似 Navicat)
6a8c4d9 feat: Redis/MySQL 加载骨架屏 loading 效果
ca99f0e fix: 工单提交422错误处理 + SQL模板占位符校验
0aa4595 fix: 查询模板占位符替换 + _auto_add_limit 跳过非SELECT语句 + 默认用户密码修正
0fb947d feat: TicketCreatePage tab化 + SchemaSidebar + Redis快速搜索 + Dashboard导航修复
8471f36 init
c7fccf9 feat: 三大核心功能完成 — query_history持久化 + EXPLAIN真实解析 + Dashboard修复
1fcb984 fix: Dashboard 页面崩溃修复 + 真实 API 数据对接
8b921c6 refactor: mock清理+安全配置+通用组件+菜单优化
ec3a03c docs: 添加 v0.1.0 Release Notes
4ac2528 fix: 审核引擎优化 + 执行结果结构化展示
9f56e86 fix: 移除所有弹框遮罩层点击关闭 — 防止输入时误触关闭
47f077c test: instance端点扩展测试 (8→17) + 数据库列补齐修复
305bbb1 test: P2测试覆盖 — user/pool/schema_drift端点 43个新测试 (895→1017全通过)
b39c426 fix: merge后14个测试修复+前端TS编译修复 - 895/895通过+前端零错误
开发趋势
- 高频迭代: 近期大量 feat/refactor 提交,围绕权限体系、多数据库支持、UI 优化
- 质量关注: 测试修复、编译修复、错误处理等 fix 提交占比约 30%
- 最新方向: Schema 浏览增强 (Redis 目录树、多数据库类型支持)
8. 依赖统计
后端依赖 (requirements.txt: 20 个包)
| 包名 | 版本 | 用途 |
|---|---|---|
| fastapi | >=0.104.0 | Web 框架 |
| uvicorn[standard] | >=0.24.0 | ASGI 服务器 |
| sqlalchemy[asyncio] | >=2.0.23 | 异步 ORM |
| aiosqlite | >=0.19.0 | SQLite 异步驱动 |
| pydantic | >=2.5.0 | 数据校验 |
| pydantic-settings | >=2.1.0 | 配置管理 |
| python-jose[cryptography] | >=3.3.0 | JWT 令牌 |
| passlib[bcrypt] | >=1.7.4 | 密码哈希 |
| python-multipart | >=0.0.6 | 文件上传 |
| cryptography | >=41.0.0 | 加密库 |
| sqlparse | >=0.4.4 | SQL 解析 |
| alembic | >=1.13.0 | 数据库迁移 |
| aiomysql | >=0.2.0 | MySQL 异步驱动 |
| asyncpg | >=0.29.0 | PostgreSQL 异步驱动 |
| motor | >=3.3.0 | MongoDB 异步驱动 |
| pymongo | >=4.6.0 | MongoDB 驱动 |
| httpx | >=0.25.0 | HTTP 客户端 |
| aiosmtplib | >=3.0.0 | 邮件发送 |
| redis | >=5.0.0 | Redis 客户端 |
前端依赖
dependencies: 53 个包 (含 Radix UI 全家桶 28 个, CodeMirror 9 个, ECharts/Recharts 等)
devDependencies: 17 个包 (Vite 7, TypeScript 5.9, ESLint, Tailwind CSS 等)
9. 数据库状态 (SQLite)
表统计: 28 张表
| 表名 | 行数 | 说明 |
|---|---|---|
audit_rules |
117 | 审核规则 (预置种子数据) |
audit_logs |
69 | 审计日志 |
system_settings |
13 | 系统设置项 |
workflow_steps |
28 | 工作流步骤 |
workflow_definitions |
12 | 工作流定义 |
ticket_approvals |
12 | 工单审批记录 |
query_histories |
24 | 查询历史 |
tickets |
6 | SQL 工单 |
users |
6 | 用户 |
instances |
4 | 数据库实例 |
user_groups |
3 | 用户组 |
instance_group_members |
4 | 权限组成员 |
instance_groups |
1 | 权限组 |
notification_channels |
2 | 通知渠道 |
announcements |
1 | 公告 |
alembic_version |
1 | 迁移版本 |
backups |
0 | 备份记录 |
masking_rules |
0 | 脱敏规则 |
ldap_config |
0 | LDAP 配置 |
notification_templates |
0 | 通知模板 |
query_templates |
0 | 查询模板 |
quick_queries |
0 | 快速查询 |
scheduled_tasks |
0 | 定时任务 |
scheduled_task_logs |
0 | 定时任务日志 |
schema_revisions |
0 | Schema 版本 |
slow_logs |
0 | 慢查询日志 |
workflow_execution_logs |
0 | 工作流执行日志 |
workflow_versions |
0 | 工作流版本 |
数据总量: 28 张表, ~357 行数据
10. 功能模块完整度评估
| 功能模块 | 后端 | 前端 | 测试 | 状态 |
|---|---|---|---|---|
| 用户认证 (JWT/LDAP) | ✅ | ✅ | ✅ (8+34) | 🟢 完整 |
| 数据库实例管理 | ✅ | ✅ | ✅ (17+16+6) | 🟢 完整 |
| SQL 查询执行 | ✅ | ✅ | ✅ (75+22) | 🟢 完整 |
| 工单管理 | ✅ | ✅ | ✅ (67+13) | 🟢 完整 |
| 审批工作流 | ✅ | ✅ | ✅ (27) | 🟢 完整 |
| 审核引擎 (V1+V2) | ✅ | ✅ | ✅ (23+65) | 🟢 完整 |
| 审核规则 | ✅ | ✅ | ✅ (22+12+13) | 🟢 完整 |
| 数据脱敏 | ✅ | ✅ | ✅ (45) | 🟢 完整 |
| 仪表盘 | ✅ | ✅ | ✅ (12) | 🟢 完整 |
| Redis 管理 | ✅ | ✅ | ✅ (14) | 🟢 完整 |
| MongoDB 管理 | ✅ | ✅ | ✅ (30) | 🟢 完整 |
| Schema 浏览 | ✅ | ✅ | ✅ (24+17+13+9) | 🟢 完整 |
| 查询历史 | ✅ | ✅ | ✅ (47) | 🟢 完整 |
| 备份恢复 | ✅ | ❌* | ✅ (22) | 🟡 后端完整,前端无独立页面 |
| 定时任务 | ✅ | ✅ | - | 🟡 无专项测试 |
| 公告管理 | ✅ | ✅ | ✅ (24) | 🟢 完整 |
| 通知系统 | ✅ | ✅ | ✅ (35) | 🟢 完整 |
| 数据字典 | ✅ | ✅ | ✅ (7) | 🟢 完整 |
| 回滚 SQL | ✅ | ✅ | ✅ (10) | 🟢 完整 |
| EXPLAIN 分析 | ✅ | ✅ | ✅ (40) | 🟢 完整 |
| SQL 助手 (AI) | ✅ | ✅ | ✅ (37) | 🟢 完整 |
| 权限组 | ✅ | ✅ | ✅ (20+21+14+16) | 🟢 完整 |
| 系统设置 | ✅ | ✅ | ✅ (18+10) | 🟢 完整 |
| LDAP 配置 | ✅ | ✅ | ✅ (18) | 🟢 完整 |
| Schema 漂移 | ✅ | ✅ | ✅ (24+13+9) | 🟢 完整 |
| 连接池 | ✅ | - | ✅ (21+12) | 🟡 基础设施,无独立前端 |
11. 总结
项目规模
- ~70,500 行源代码 (后端 47K + 前端 23.5K)
- 146 条 API 路由,覆盖 29 个功能域
- 1,075 个测试用例,46 个测试文件
- 22 个 ORM 模型,28 张数据库表
- 26 个前端页面,9 个自定义组件
项目成熟度: ⭐⭐⭐⭐ (高)
优势:
- 全栈 TDD 驱动开发,1,075 个测试确保质量
- 多数据库完整支持 (MySQL/PostgreSQL/MongoDB/Redis)
- 企业级功能完备 (审批流、审核引擎、权限组、数据脱敏)
- 代码组织清晰,分层合理 (endpoint → service → model)
待改进:
- 部分大文件需要拆分 (InstancePage 1,452行, ticket.py 1,073行)
- 审核规则库占用大量代码 (MySQL 2,199行, Redis 1,869行)
- 备份功能缺少独立前端页面
- 14 张表数据为空 (部分功能尚未使用)
motor在 requirements.txt 中重复出现