This commit is contained in:
admin
2026-02-20 15:47:27 +09:00
parent c60cbf2d9a
commit 584530937b
108 changed files with 12112 additions and 416 deletions

120
MIGRATION_FIX_SUMMARY.md Normal file
View File

@@ -0,0 +1,120 @@
# 修复总结:搜索功能和数据库兼容性
## 问题根源
后端 API 报错:`psycopg.errors.UndefinedColumn: column je.revision_count does not exist`
原因:
1. 前端 `journal-entry.html` 中搜索函数缺少函数声明和完整的错误处理
2. 数据库架构更新(添加版本追踪字段),但新字段还未在数据库中创建
3. 后端 API 查询引用了不存在的字段
## 完成的修复
### 1. 前端修复 ✅
**文件**: `frontend/journal-entry.html`
修复内容:
- **printSearchResults()** (第1160-1353行): 添加完整 try-catch 错误处理
- 添加 API 状态检查 (`if (!res.ok)`)
- 添加数据格式验证
- 改为使用 `e.revision_count` 而非 `e.version`
- 添加用户友好的红色错误提示框
- **searchJournals()** (第1357-1572行): 添加函数声明和完整错误处理
- 修复:函数声明从 `async function searchJournals() {` 错误地被删除
- 恢复完整的 try-catch 结构
- 所有搜索相关的字段引用都已更新为 `e.revision_count`
### 2. 后端修复 ✅
**文件**: `backend/app/routers/journal_entries.py`
修复内容:
- 修改 `get_journal_entries()` 函数使其能够处理两种情况:
- **新字段存在时**:使用完整的 `revision_count`, `is_latest`, `original_entry_id` 字段
- **新字段不存在时**:降级处理,返回默认值(`revision_count=1`, `is_latest=true`
- 动态检查字段是否存在
- GROUP BY 子句根据字段存在情况动态调整
- 完全向后兼容
### 3. 数据库迁移指南 ✅
**文件**: `backend/sql/admin_migration_add_fields.sql`
包含:
- 添加 `is_latest` 字段
- 添加 `revision_count` 字段
- 添加 `original_entry_id` 字段
- 添加外键约束
- 创建优化索引
- 验证脚本
**使用方式**: 数据库管理员需以 postgres 超级用户身份执行此脚本
### 4. 迁移文档 ✅
**文件**: `backend/DATABASE_MIGRATION_GUIDE.md`
提供:
- 问题描述
- 迁移步骤Docker 和 pgAdmin 两种方式)
- 验证查询
- 临时解决方案说明
- 数据库连接信息
## 当前状态
系统现在可以:
- ✅ 前端搜索正常显示(已修复函数声明问题)
- ✅ API 自动适应数据库字段
- ✅ 在迁移完成前继续工作(使用默认值)
- ✅ 迁移完成后自动启用版本追踪功能
## 需要的后续操作
**由数据库管理员执行**
1. 使用 postgres 用户连接数据库
2. 执行 `admin_migration_add_fields.sql` 中的 SQL 代码
3. 验证三个新字段是否成功创建
**执行之后**
- 刷新前端Ctrl+F5
- 测试搜索功能
- 版本追踪功能将自动启用
## 测试步骤
1. 打开 `frontend/journal-entry.html`
2. 尝试搜索仕訳
3. 如果仍有错误在浏览器开发者工具中查看控制台日志F12
4. 检查后端日志查看 API 响应
## 文件变更汇总
| 文件 | 变更 | 行数 |
| ------------------------------------------ | ------------------------------------------ | ----------------------------------------- |
| frontend/journal-entry.html | 修复两个搜索函数 | 1794行 |
| backend/app/routers/journal_entries.py | 添加字段存在检查和降级处理 | 对 get_journal_entries 函数进行了重大修改 |
| backend/sql/admin_migration_add_fields.sql | 新建迁移脚本 | 113行 |
| backend/DATABASE_MIGRATION_GUIDE.md | 新建迁移指南 | 文档 |
| backend/run_db_migration.py | 新建(用于尝试自动迁移,因权限限制未成功) | 工具脚本 |
## 权限说明
当前使用的 `njts_app` 用户没有 ALTER TABLE 权限。因此:
- ✅ 可以查询数据SELECT
- ✅ 可以插入/更新数据INSERT/UPDATE
- ❌ 无法修改表结构ALTER TABLE
- ❌ 无法创建索引
这是正常的安全设计。迁移脚本必须由具有 DDL 权限的用户(如 postgres执行。