"""Initial SQLAlchemy schema. Revision ID: 0001_initial_schema Revises: Create Date: 2026-06-30 """ from datetime import datetime, timezone from alembic import context, op import sqlalchemy as sa from sqlalchemy import inspect from app.database import Base from app import models # noqa: F401 revision = "0001_initial_schema" down_revision = None branch_labels = None depends_on = None DEFAULT_DEPT_ID = "00000000-0000-0000-0000-000000000001" def _seed_default_department(bind) -> None: department_table = sa.table( "AdminDepartment", sa.column("id", sa.String()), sa.column("name", sa.String()), sa.column("sortOrder", sa.Integer()), sa.column("isActive", sa.Boolean()), sa.column("createdAt", sa.DateTime()), sa.column("updatedAt", sa.DateTime()), ) if context.is_offline_mode(): should_seed = True else: should_seed = bind.execute( sa.text('SELECT 1 FROM "AdminDepartment" LIMIT 1') ).first() is None if should_seed: timestamp = datetime.now(timezone.utc).replace(tzinfo=None) op.bulk_insert( department_table, [ { "id": DEFAULT_DEPT_ID, "name": "默认部门", "sortOrder": 0, "isActive": True, "createdAt": timestamp, "updatedAt": timestamp, } ], ) def upgrade() -> None: bind = op.get_bind() if context.is_offline_mode(): Base.metadata.create_all(bind=bind, checkfirst=False) return existing_tables = set(inspect(bind).get_table_names()) for table in Base.metadata.sorted_tables: if table.name not in existing_tables: table.create(bind) if "AdminDepartment" in Base.metadata.tables: _seed_default_department(bind) def downgrade() -> None: Base.metadata.drop_all(bind=op.get_bind(), checkfirst=not context.is_offline_mode())