"""add platform memberships Revision ID: 20260428_add_platform_memberships Revises: 20260428_add_phone_auth_identity Create Date: 2026-04-28 """ from __future__ import annotations from alembic import op import sqlalchemy as sa revision = "20260428_add_platform_memberships" down_revision = "20260428_add_phone_auth_identity" branch_labels = None depends_on = None def _table_exists(bind, table_name: str) -> bool: return sa.inspect(bind).has_table(table_name) def _index_exists(bind, table_name: str, index_name: str) -> bool: if not _table_exists(bind, table_name): return False return any(index["name"] == index_name for index in sa.inspect(bind).get_indexes(table_name)) def upgrade() -> None: bind = op.get_bind() if _table_exists(bind, "platform_memberships"): return op.create_table( "platform_memberships", sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True), sa.Column("created_at", sa.TIMESTAMP(), server_default=sa.func.now(), nullable=False), sa.Column("updated_at", sa.TIMESTAMP(), server_default=sa.func.now(), nullable=False), sa.Column("user_id", sa.BigInteger(), sa.ForeignKey("users.id", ondelete="CASCADE"), nullable=False), sa.Column("role", sa.String(length=50), nullable=False), sa.Column("status", sa.String(length=32), nullable=False, server_default="active"), sa.UniqueConstraint("user_id", "role", name="uq_platform_memberships_user_role"), ) op.create_index("ix_platform_memberships_user_id", "platform_memberships", ["user_id"], unique=False) op.create_index("ix_platform_memberships_status", "platform_memberships", ["status"], unique=False) def downgrade() -> None: bind = op.get_bind() if not _table_exists(bind, "platform_memberships"): return if _index_exists(bind, "platform_memberships", "ix_platform_memberships_status"): op.drop_index("ix_platform_memberships_status", table_name="platform_memberships") if _index_exists(bind, "platform_memberships", "ix_platform_memberships_user_id"): op.drop_index("ix_platform_memberships_user_id", table_name="platform_memberships") op.drop_table("platform_memberships")