"""方案拖动排序:doc_document 新增 sort_no。 Revision ID: 0008_document_sort_no Revises: 0007_document_description Create Date: 2026-08-18 变更要点: 1. doc_document 新增 sort_no(INT,非空,默认0)。 2. 用途:管理员在方案管理页拖动主案/子方案排序——主案在全局范围内 排序,子方案在所属主案内排序;共享附件库不参与拖动排序。 3. 存量数据保持0,列表按 (sort_no, id) 升序退化为创建顺序;首次拖动 重排后按步长10重新编号。 """ from __future__ import annotations from collections.abc import Sequence from alembic import op import sqlalchemy as sa revision: str = "0008_document_sort_no" down_revision: str | None = "0007_document_description" branch_labels: str | Sequence[str] | None = None depends_on: str | Sequence[str] | None = None _TABLE = "doc_document" _COLUMN = "sort_no" def _existing_columns(table: str) -> set[str]: inspector = sa.inspect(op.get_bind()) return {item["name"] for item in inspector.get_columns(table)} def upgrade() -> None: if _COLUMN not in _existing_columns(_TABLE): op.add_column( _TABLE, sa.Column(_COLUMN, sa.Integer(), nullable=False, server_default=sa.text("0")), ) def downgrade() -> None: if _COLUMN in _existing_columns(_TABLE): op.drop_column(_TABLE, _COLUMN)