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