"""tier text not int Revision ID: 05d6342e2105 Revises: 20250506abcd Create Date: 2025-05-06 16:42:38.378374 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa from sqlalchemy import text # revision identifiers, used by Alembic. revision: str = '05d6342e2105' down_revision: Union[str, None] = '20250506abcd' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # 1) make sure every numeric tier is inside the allowed range # (optional safety; no type change yet) op.execute(""" UPDATE users SET tier = 0 WHERE pg_typeof(tier)::text = 'integer' AND tier NOT IN (0,1,2,3); """) # 2) ALTER COLUMN to TEXT first – numeric values become '0','1',... op.alter_column( "users", "tier", existing_type=sa.Integer(), type_=sa.Text(), postgresql_using="tier::text", nullable=False, server_default=sa.text("'Online'") ) # 3) now map the stringified numbers to names op.execute(""" UPDATE users SET tier = CASE tier WHEN '0' THEN 'Online' WHEN '1' THEN 'Rank 1' WHEN '2' THEN 'Rank 2' WHEN '3' THEN 'Rank 3' ELSE tier END; """) def downgrade() -> None: # revert to integer, mapping back Online→0 etc. if you really need it op.alter_column( "users", "tier", existing_type=sa.Text(), type_=sa.Integer(), postgresql_using=""" CASE tier WHEN 'Rank 1' THEN 1 WHEN 'Rank 2' THEN 2 WHEN 'Rank 3' THEN 3 ELSE 0 END::integer """, server_default=sa.text("0"), nullable=False, )