0005_category_flat_mode.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. """分类扁平模式:一级分类新增 flat_mode 标记。
  2. Revision ID: 0005_category_flat_mode
  3. Revises: 0004_organization_user_maintenance
  4. Create Date: 2026-08-13
  5. 变更要点:
  6. 1. doc_category 新增 flat_mode TINYINT(1) NOT NULL DEFAULT 0,
  7. 仅一级分类(parent_id IS NULL)字段在业务上有意义;二级及以下恒为 0。
  8. 2. 语义:flat_mode=true 时,挂在该分类(直接或间接)下的主案
  9. 在前端不展示"挂载子方案"与"挂载配套资料"入口;
  10. 后端挂载接口不强制拒绝(弱约束)。
  11. 3. 切换保护:update_category 在 false→true 切换前会校验
  12. 该一级分类下是否已存在 SUB_PLAN 子方案或配套资料挂载,
  13. 若有则拒绝切换并返回 CATEGORY_FLAT_MODE_CONFLICT。
  14. """
  15. from __future__ import annotations
  16. from collections.abc import Sequence
  17. from alembic import op
  18. import sqlalchemy as sa
  19. revision: str = "0005_category_flat_mode"
  20. down_revision: str | None = "0004_organization_user_maintenance"
  21. branch_labels: str | Sequence[str] | None = None
  22. depends_on: str | Sequence[str] | None = None
  23. def upgrade() -> None:
  24. op.add_column(
  25. "doc_category",
  26. sa.Column(
  27. "flat_mode",
  28. sa.Boolean(),
  29. nullable=False,
  30. server_default=sa.text("0"),
  31. ),
  32. )
  33. def downgrade() -> None:
  34. op.drop_column("doc_category", "flat_mode")