fix: merge后14个测试修复+前端TS编译修复 - 895/895通过+前端零错误
This commit is contained in:
1 parent
58eb78c987
commit
b39c426317
24 files changed
+3918
-760
No files matched your search
@@ -0,0 +1,238 @@
|
||||
# 优化包合并分析报告
|
||||
|
||||
## 📋 总览
|
||||
|
||||
| 文件 | 行数变化 | 冲突模型引用 | 安全合并? | 策略 |
|
||||
|------|---------|------------|----------|------|
|
||||
| models/user.py | 23→299 (+276) | ⚠️ **核心冲突** | ❌ | 手动合并 |
|
||||
| models/workflow.py | 55→362 (+307) | ✅ 无 | ✅ | 直接覆盖 |
|
||||
| services/workflow_engine.py | 359→1319 (+960) | ✅ 无 | ✅ | 直接覆盖 |
|
||||
| services/query_service.py | 709→1253 (+544) | ✅ 无 | ✅ | 直接覆盖 |
|
||||
| services/audit_engine.py | 234→790 (+556) | ✅ 无 | ✅ | 直接覆盖 |
|
||||
| services/ticket_executor.py | 1384→1688 (+304) | ✅ 无 | ✅ | 直接覆盖 |
|
||||
| api/v1/endpoints/ticket.py | 747→1029 (+282) | ⚠️ AuditLog引用 | ✅ | 直接覆盖 |
|
||||
| api/v1/endpoints/query.py | 226→426 (+200) | ⚠️ AuditLog引用 | ✅ | 直接覆盖 |
|
||||
| api/v1/endpoints/user.py | 116→116 (0) | ⚠️ AuditLogService | ✅ | 直接覆盖 |
|
||||
|
||||
---
|
||||
|
||||
## 🔴 冲突分析
|
||||
|
||||
### 冲突1:`user_groups` 表名冲突
|
||||
|
||||
| 维度 | 我们的版本 | 优化包版本 |
|
||||
|------|-----------|-----------|
|
||||
| **位置** | `models/instance_group.py` | `models/user.py` |
|
||||
| **类型** | `Table()` 关联表 | `class UserGroup(Base)` ORM模型 |
|
||||
| **表名** | `user_groups` | `user_groups` |
|
||||
| **列** | user_id, group_id, permissions | id, name, description, group_permissions, ... |
|
||||
| **用途** | User ↔ InstanceGroup 多对多关联 | 独立的用户组权限管理实体 |
|
||||
|
||||
**冲突本质**:两个完全不同的数据库表结构映射到同一个表名。优化包的 `UserGroup` 是一个完整的权限组系统,我们的 `user_groups` 只是一个简单的关联表。
|
||||
|
||||
### 冲突2:AuditLog 双重定义
|
||||
|
||||
| 维度 | 我们的版本 (`models/audit_log.py`) | 优化包版本 (`models/user.py`) |
|
||||
|------|----------------------------------|-------------------------------|
|
||||
| **表名** | `audit_logs` | `audit_logs` |
|
||||
| **字段风格** | 运维审计(target_type, query_content, db_type) | 通用审计(resource_type, before_data, after_data) |
|
||||
| **关系** | 无 relationship | `user = relationship("User", ...)` |
|
||||
|
||||
**关键发现**:优化包的 `ticket.py` 和 `query.py` 都 `from app.models.audit_log import AuditLog`(即使用的是我们的版本),而不是从 `models.user` 导入!
|
||||
|
||||
### 冲突3:新增模型类(无冲突但需数据库迁移)
|
||||
|
||||
优化包 `models/user.py` 新增了:
|
||||
- `UserGroup` — 用户组模型(表名与我们的关联表冲突)
|
||||
- `UserGroupMember` — 用户组成员关联表
|
||||
- `AuditLog` — 审计日志(与 `models/audit_log.py` 重复定义)
|
||||
|
||||
---
|
||||
|
||||
## 📁 逐文件分析
|
||||
|
||||
### 1. models/user.py — ⚠️ 需手动合并
|
||||
|
||||
**差异概要**:
|
||||
- User 模型新增了 4 个 JSON 权限字段(data_source_permissions, custom_permissions, column_permissions, permissions_updated_at)
|
||||
- User 模型新增了 5 个 relationship(tickets, approvals, audit_logs, query_histories, user_groups)
|
||||
- User 模型新增了 5 个方法(has_permission, has_data_source_permission, get_allowed_columns, to_dict, __repr__)
|
||||
- 新增 3 个类:UserGroup, UserGroupMember, AuditLog
|
||||
|
||||
**冲突点**:
|
||||
- `secondary="user_groups"` — 与 instance_group.py 的 Table 定义冲突
|
||||
- `user_groups = relationship("UserGroup", ...)` — 引用同文件 UserGroup
|
||||
- `audit_logs = relationship("AuditLog", ...)` — 引用同文件 AuditLog
|
||||
- `to_dict()` 中 `self.user_groups` — 引用 UserGroup relationship
|
||||
|
||||
**合并策略**:
|
||||
```
|
||||
✅ 直接采纳:User 模型的 JSON 权限字段(4个新字段)
|
||||
✅ 直接采纳:User 的便捷方法(has_permission, to_dict 等)
|
||||
⚠️ 需修改:User.groups 的 secondary 保持 "user_groups"(不改,与 instance_group.py 兼容)
|
||||
❌ 不采纳:User.user_groups relationship(引用冲突的 UserGroup)
|
||||
❌ 不采纳:User.tickets/approvals/audit_logs/query_histories(跨模型耦合,按需添加)
|
||||
❌ 不采纳:UserGroup 类(表名冲突)
|
||||
❌ 不采纳:UserGroupMember 类(依赖 UserGroup)
|
||||
❌ 不采纳:AuditLog 类(已在 audit_log.py 独立定义)
|
||||
⚠️ to_dict() 中的 user_groups 引用需要改为 groups 或移除
|
||||
```
|
||||
|
||||
### 2. models/workflow.py — ✅ 可安全覆盖
|
||||
|
||||
**差异概要**:
|
||||
- WorkflowDefinition 新增 category, updated_at, created_by, flow_config, trigger_conditions 字段
|
||||
- 新增 WorkflowVersion 类(版本控制)
|
||||
- WorkflowStep 大幅增强(description, approver_assignment, entry_conditions, transition_conditions, field_permissions)
|
||||
- TicketApproval 大幅增强(workflow_id, version_id, step_type, actual_approver_id, transfer 信息, 超时标记)
|
||||
- 新增 WorkflowExecutionLog 类(执行日志)
|
||||
|
||||
**新增依赖**:`json`, `UniqueConstraint`, `JSON` — 标准库/SQLAlchemy
|
||||
|
||||
**安全评估**:无冲突模型引用,纯功能增强。✅
|
||||
|
||||
### 3. services/workflow_engine.py — ✅ 可安全覆盖
|
||||
|
||||
**差异概要**:
|
||||
- 从简单引擎升级为支持条件审批、超时策略、中断恢复的完整引擎
|
||||
- 新增 WorkflowStatus/ApprovalAction/TimeoutStrategy 枚举
|
||||
- 新增 ConditionResult/ApproverAssignment 数据类
|
||||
- 引擎核心方法大幅扩展
|
||||
|
||||
**import 检查**:
|
||||
- `from app.models.workflow import (WorkflowDefinition, WorkflowStep, WorkflowVersion, TicketApproval, WorkflowExecutionLog)` — 全部来自 workflow.py
|
||||
- `from app.models.user import User` — 只用 User 基础字段
|
||||
- 无冲突模型引用
|
||||
|
||||
### 4. services/query_service.py — ✅ 可安全覆盖
|
||||
|
||||
**差异概要**:查询服务增强,支持更多数据库类型和查询优化。
|
||||
|
||||
**import 检查**:
|
||||
- `from app.models.instance import Instance` — ✅
|
||||
- `from app.schemas.query import UnifiedQueryResult` — ✅
|
||||
- `from app.services.db_connector import DBConnector` — ✅
|
||||
- 无冲突模型引用
|
||||
|
||||
### 5. services/audit_engine.py — ✅ 可安全覆盖
|
||||
|
||||
**差异概要**:审计引擎增强,新增枚举和条件判断。
|
||||
|
||||
**import 检查**:
|
||||
- 无外部模型导入,仅标准库 + typing
|
||||
- 无冲突模型引用
|
||||
|
||||
### 6. services/ticket_executor.py — ✅ 可安全覆盖
|
||||
|
||||
**差异概要**:工单执行器增强,支持更多 SQL 解析和执行策略。
|
||||
|
||||
**import 检查**:
|
||||
- `from app.models.instance import Instance` — ✅
|
||||
- `from app.models.ticket import Ticket` — ✅
|
||||
- `from app.services.sql_analyzer import SQLAnalyzer, SQLType` — ✅
|
||||
- 无冲突模型引用
|
||||
|
||||
### 7. api/v1/endpoints/ticket.py — ✅ 可安全覆盖
|
||||
|
||||
**AuditLog 使用情况**:
|
||||
- `from app.models.audit_log import AuditLog` — ✅ 使用我们的独立 AuditLog
|
||||
- `AuditLog.target_type`, `AuditLog.target_id`, `AuditLog.created_at` — ✅ 我们模型有这些字段
|
||||
- `AuditLogService.log(target_type=..., detail=...)` — ✅ audit_log_service.py 两版完全相同
|
||||
|
||||
**注意**:ticket.py 使用的 AuditLog 字段(target_type, target_id, detail, db_type, status)全部存在于我们的 `models/audit_log.py`。
|
||||
|
||||
### 8. api/v1/endpoints/query.py — ✅ 可安全覆盖(需注意字段)
|
||||
|
||||
**AuditLog 使用情况**:
|
||||
- `from app.models.audit_log import AuditLog` — ✅ 使用我们的独立 AuditLog
|
||||
- 直接创建 `AuditLog(...)` 实例,使用字段:
|
||||
- ✅ 我们模型有:user_id, username, action, target_type, target_id, instance_name, db_type, database_name, query_content, execution_time_ms, rows_affected, result_status, detail
|
||||
- ⚠️ **`query_type`** — 我们模型没有这个字段!
|
||||
- ⚠️ **`status`** — 我们模型没有 `status`,只有 `result_status`
|
||||
|
||||
**需要的处理**:在我们的 `models/audit_log.py` 中新增 `query_type` 字段:
|
||||
```python
|
||||
query_type = Column(String(20), nullable=True) # 新增:查询类型
|
||||
```
|
||||
|
||||
### 9. api/v1/endpoints/user.py — ✅ 可安全覆盖
|
||||
|
||||
**差异**:两版完全相同(0 差异),优化包版本多了 AuditLogService 引用但代码一致。
|
||||
|
||||
---
|
||||
|
||||
## 🗂️ 推荐执行顺序
|
||||
|
||||
### 第一阶段:无冲突文件直接覆盖(7个文件)
|
||||
|
||||
```bash
|
||||
# 1. models/workflow.py
|
||||
# 2. services/workflow_engine.py
|
||||
# 3. services/query_service.py
|
||||
# 4. services/audit_engine.py
|
||||
# 5. services/ticket_executor.py
|
||||
# 6. api/v1/endpoints/ticket.py
|
||||
# 7. api/v1/endpoints/user.py (两版相同,跳过)
|
||||
```
|
||||
|
||||
### 第二阶段:小修复
|
||||
|
||||
在 `models/audit_log.py` 新增 `query_type` 字段:
|
||||
```python
|
||||
query_type = Column(String(20), nullable=True) # 查询类型(SELECT/INSERT/UPDATE/DELETE等)
|
||||
```
|
||||
|
||||
### 第三阶段:手动合并 models/user.py
|
||||
|
||||
**保留我们现有结构**,只合并以下安全内容:
|
||||
|
||||
1. **新增 User 字段**(JSON 权限相关):
|
||||
```python
|
||||
data_source_permissions = Column(JSON, nullable=True, default=list)
|
||||
custom_permissions = Column(JSON, nullable=True, default=dict)
|
||||
column_permissions = Column(JSON, nullable=True, default=dict)
|
||||
permissions_updated_at = Column(DateTime, nullable=True)
|
||||
```
|
||||
|
||||
2. **新增 User 方法**:
|
||||
```python
|
||||
def has_permission(self, action: str) -> bool: ...
|
||||
def has_data_source_permission(self, ...) -> bool: ...
|
||||
def get_allowed_columns(self, ...) -> list: ...
|
||||
def to_dict(self, include_sensitive=False) -> dict: ...
|
||||
```
|
||||
|
||||
3. **不合并的内容**:
|
||||
- `UserGroup` 类 → 如果需要用户组功能,必须改名或用不同表名
|
||||
- `UserGroupMember` 类 → 同上
|
||||
- `AuditLog` 类 → 已有独立文件,不重复定义
|
||||
- `User.user_groups` relationship → 依赖冲突的 UserGroup
|
||||
- `User.audit_logs` relationship → 需要评估是否添加(跨模型耦合)
|
||||
- `User.tickets`/`approvals`/`query_histories` → 按需添加
|
||||
|
||||
4. **to_dict 方法调整**:
|
||||
- 将 `self.user_groups` 改为 `self.groups`(匹配现有 InstanceGroup 关系)
|
||||
|
||||
### 第四阶段:数据库迁移
|
||||
|
||||
新增/修改的数据库表:
|
||||
- `workflow_versions` — 新增表
|
||||
- `workflow_execution_logs` — 新增表
|
||||
- `workflow_definitions` — 新增 category, updated_at, created_by, flow_config, trigger_conditions 字段
|
||||
- `workflow_steps` — 新增多个字段
|
||||
- `ticket_approvals` — 新增多个字段
|
||||
- `audit_logs` — 新增 query_type 字段
|
||||
- `users` — 新增 4 个 JSON 权限字段
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 风险提示
|
||||
|
||||
1. **UserGroup/user_groups 冲突**:如果未来需要优化包的用户组功能,需要:
|
||||
- 将优化包的 `UserGroup` 改表名为 `user_permission_groups`
|
||||
- 或将我们的关联表 `user_groups` 改名为 `user_instance_groups`
|
||||
- 同时更新所有外键和 relationship 引用
|
||||
|
||||
2. **AuditLog 双定义**:SQLAlchemy 的 metadata 中如果同时注册两个同名 `__tablename__` 的类会报错。只要不同时 import 就没问题。确保不 import `models/user.py` 中的 AuditLog 即可。
|
||||
|
||||
3. **workflow.py 的 relationship 指向 "User"**:通过字符串引用,SQLAlchemy 在运行时解析。只要所有模型在 metadata 中注册时 User 类存在即可。
|
||||
Reference in new issue
Block a user