跳转至

DIP1 工作日志 — Migration / Seed / /ready 验证

DWLG 编号:DWLG-20260809-04 日期:2026-08-09(实际执行至 2026-08-10 00:23) 参与方:DIP1 Code Agent 关联文档:DIP1-SCH(DOC-D01-DB V2.0)、DIP1-P3(DOC-D01-D3 V1.1)、DIP1-IMP(DOC-D01-IMP V2.0 §7.1)


一、工作内容

  1. 修复 Alembic 双向迁移:
  2. 0001_initial_schema.py downgrade 使用 DROP TABLE ... CASCADE 处理 cpt_orders <-> ops_leads 等循环外键依赖;
  3. 显式 DROP TYPE IF EXISTS 清理 sa.Enum(..., create_type=True) 创建的枚举类型,避免 upgrade -> downgrade -> upgrade 二周目失败。
  4. 修复 0002_cst_mobile_push.py downgrade 同样使用 CASCADE 删表,并补充 4 个 create_type=True 枚举类型的删除。
  5. 修复 Seed CLI 运行问题:
  6. SysRole.role_idSysRolePermission.role_id ORM 模型字段从 String(16) 改为 ENUM(..., name="app_enum__sys_role_6"),与数据库类型对齐;
  7. MdsSclCategory.category_id 补充 server_default=text("app_gen_ulid('CAT')") 消除 SQLAlchemy 警告;
  8. Seed CLI 输出去掉 emoji,避免 Windows Git Bash GBK 编码报错。
  9. 创建本地 .env 开发配置。
  10. 验证:
  11. alembic upgrade head && alembic downgrade base && alembic upgrade head 三遍循环通过;
  12. python -m app.infrastructure.db.seed.cli 成功写入角色、权限、管理员、SCL 品类种子数据;
  13. 启动 FastAPI 后 GET /ready 返回 {"ready":true,"checks":{"db":"ok"}}

二、产出物

类型 路径 说明
代码 backend/alembic/versions/0001_initial_schema.py downgrade 使用 CASCADE + 显式删 TYPE
代码 backend/alembic/versions/0002_cst_mobile_push.py 同上,补充 4 个枚举类型删除
代码 backend/app/infrastructure/db/models/sys.py role_id 改为 ENUM 对齐数据库
代码 backend/app/infrastructure/db/models/mds.py category_id 补充 ULID server_default
代码 backend/app/infrastructure/db/seed/cli.py 输出改为 ASCII,避免编码异常
配置 .env 本地开发环境变量

三、关键决策

  • 使用 DROP TABLE ... CASCADE 而不是手动排序删表:0001/0002 表间存在 cpt_orders <-> ops_leads 等双向外键,人工维护 drop 顺序脆弱;CASCADE 由 PostgreSQL 自动解除依赖,可逆且健壮。
  • 枚举类型显式删除:SQLAlchemy create_type=True 在 raw DROP TABLE CASCADE 场景下不会自动回收 TYPE,必须在 downgrade 末尾逐个 DROP TYPE IF EXISTS

四、问题与待办

# 问题 状态 负责人 截止
1 Windows Git Bash 下 Python 输出中文需 PYTHONIOENCODING=utf-8 🟢 已 workaround Code Agent
2 模型与迁移的枚举字段未完全对齐,后续新增 ORM 操作需逐表复核 🟡 持续 Code Agent

五、状态矩阵更新(DIP1-IMP §7.1)

  • C-D1(Alembic 迁移 / 22 表 / 30 枚举 / RLS):🟡 → 🟢 — upgrade/downgrade/upgrade 循环通过
  • C-D2(Seed 数据 / 角色权限 / SCL 品类):🟡 → 🟢 — Seed CLI 可重复执行,数据写入正常
  • C-B0(后端服务可启动 / /ready):🟡 → 🟢 — /ready 返回 DB ok