Files
fquiz/api/migrations
chengkai3 483fdb982b feat:[FL-165][给系统开发一个操作文档管理和展示功能]
- 创建后端数据库模型:DocumentChapter 和 Document,支持按章节组织的树形文档结构
- 创建数据库迁移文件:002_add_document_management.sql
- 创建 Pydantic schemas:定义文档和章节的请求/响应模型
- 创建后端服务层:document_service.py 实现 CRUD 和树形结构构建
- 创建 API 路由:/api/v1/documents 和 /api/v1/documents/chapters,支持完整的 RESTful 操作
- 创建前端类型定义:document.ts
- 创建文档管理页面:/admin/documents,包含章节树形目录和文档表格,支持增删改查
- 创建文档展示页面:/admin/docs-view,左侧目录树右侧内容展示,支持 Markdown 渲染
- 安装 react-markdown 依赖用于文档内容展示

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 23:22:03 +08:00
..

数据库迁移说明

本目录包含数据库迁移脚本,用于重构高程数据管理功能。

迁移文件

001_add_elevation_file_record.sql

目的: 将高程数据管理从数据集中心模式重构为文件中心模式

主要变更:

  1. 创建新表 elevation_file_record

    • 包含所有文件记录相关字段
    • 每个文件对应一条记录
    • 合并了原 elevation_dataset 的核心字段
  2. 数据迁移

    • elevation_dataset 迁移数据到 elevation_file_record
    • 保留原有的 ID 以保持关联关系
  3. 更新关联表

    • elevation_apply_job 添加 file_record_id 字段
    • elevation_data_import_job 添加 file_record_id 字段
    • 将现有的 dataset_id 值复制到新字段
  4. 向后兼容

    • 保留旧表和旧字段用于过渡期
    • 创建兼容性视图 elevation_dataset_compat

执行迁移

# 使用 psql 执行迁移
psql -U your_user -d your_database -f 001_add_elevation_file_record.sql

# 或使用 Python 脚本执行
python -c "
from app.core.database import engine
with open('migrations/001_add_elevation_file_record.sql') as f:
    sql = f.read()
with engine.begin() as conn:
    conn.execute(sql)
"

回滚计划

如需回滚,执行以下操作:

  1. 停止使用新的 /records API
  2. 删除 elevation_file_record
  3. 删除 elevation_apply_job.file_record_idelevation_data_import_job.file_record_id 字段
  4. 继续使用原有的 /datasets API

注意事项

  • 迁移前务必备份数据库
  • 迁移过程中保留旧表,确保可以回滚
  • 完全迁移完成并测试通过后,再考虑删除旧表
  • 新旧 API 可以并存一段时间,逐步切换

后续清理

当确认新系统运行稳定后,可执行清理:

-- 删除旧表
DROP TABLE IF EXISTS elevation_dataset_file_meta;
DROP TABLE IF EXISTS elevation_dataset CASCADE;

-- 删除旧字段
ALTER TABLE elevation_apply_job DROP COLUMN IF EXISTS dataset_id;
ALTER TABLE elevation_data_import_job DROP COLUMN IF EXISTS dataset_id;

-- 删除兼容性视图
DROP VIEW IF EXISTS elevation_dataset_compat;