Files
s1ne/backend/alembic/versions/05d6342e2105_tier_text_not_int.py
2026-03-29 23:50:49 -05:00

67 lines
1.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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,
)