67 lines
1.8 KiB
Python
67 lines
1.8 KiB
Python
"""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,
|
||
) |