"""Пользователь: любимая фракция (личный выбор в профиле). Идемпотентна: на свежей БД столбец создаёт 0001 (create_all из актуальных моделей) -> no-op; на существующей БД добавляет столбец. render_as_batch включён в env.py (для SQLite). Revision ID: 0010_user_favorite_faction Revises: 0009_participant_eliminated Create Date: 2026-09-07 """ from typing import Sequence, Union import sqlalchemy as sa from sqlalchemy import inspect from alembic import op revision: str = "0010_user_favorite_faction" down_revision: Union[str, None] = "0009_participant_eliminated" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: bind = op.get_bind() insp = inspect(bind) cols = {c["name"] for c in insp.get_columns("users")} if "favorite_faction_id" not in cols: with op.batch_alter_table("users") as b: b.add_column(sa.Column("favorite_faction_id", sa.Integer(), nullable=True)) b.create_foreign_key( "fk_users_favorite_faction_id", "factions", ["favorite_faction_id"], ["id"], ondelete="SET NULL", ) def downgrade() -> None: bind = op.get_bind() insp = inspect(bind) cols = {c["name"] for c in insp.get_columns("users")} if "favorite_faction_id" in cols: with op.batch_alter_table("users") as b: b.drop_constraint("fk_users_favorite_faction_id", type_="foreignkey") b.drop_column("favorite_faction_id")