"""replace_billstatus_with_depositstatus Revision ID: e6541f81f7de Revises: b2ecec0ef260 Create Date: 2026-04-27 20:38:12.226592 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. revision: str = 'e6541f81f7de' down_revision: Union[str, Sequence[str], None] = 'b2ecec0ef260' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: """Upgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### op.create_table('balance_transactions', sa.Column('id', sa.BIGINT(), autoincrement=True, nullable=False), sa.Column('user_id', sa.BIGINT(), nullable=False), sa.Column('amount', sa.INTEGER(), nullable=False), sa.Column('tx_type', sa.Enum('DEPOSIT', 'PURCHASE', 'REFUND', 'REFERRAL_BONUS', 'MANUAL', name='balancetxtype'), nullable=False), sa.Column('balance_before', sa.INTEGER(), nullable=False), sa.Column('balance_after', sa.INTEGER(), nullable=False), sa.Column('description', sa.TEXT(), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_balance_transactions_user_id'), 'balance_transactions', ['user_id'], unique=False) op.execute("CREATE TYPE depositstatus AS ENUM ('pending', 'success', 'failed', 'expired')") op.execute("ALTER TABLE bills ALTER COLUMN status DROP DEFAULT") op.execute(""" ALTER TABLE bills ALTER COLUMN status TYPE depositstatus USING ( CASE status::text WHEN 'NEW' THEN 'pending'::depositstatus WHEN 'PROCESS' THEN 'pending'::depositstatus WHEN 'UNDERPAID' THEN 'pending'::depositstatus WHEN 'SUCCESS' THEN 'success'::depositstatus WHEN 'OVERPAID' THEN 'success'::depositstatus WHEN 'FAIL' THEN 'failed'::depositstatus ELSE 'pending'::depositstatus END ) """) op.execute("ALTER TABLE bills ALTER COLUMN status SET DEFAULT 'pending'::depositstatus") op.execute("DROP TYPE billstatus") # ### end Alembic commands ### def downgrade() -> None: """Downgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### op.execute("CREATE TYPE billstatus AS ENUM ('NEW', 'PROCESS', 'UNDERPAID', 'SUCCESS', 'OVERPAID', 'FAIL')") op.execute("ALTER TABLE bills ALTER COLUMN status DROP DEFAULT") op.execute(""" ALTER TABLE bills ALTER COLUMN status TYPE billstatus USING ( CASE status::text WHEN 'pending' THEN 'NEW'::billstatus WHEN 'success' THEN 'SUCCESS'::billstatus WHEN 'failed' THEN 'FAIL'::billstatus WHEN 'expired' THEN 'FAIL'::billstatus ELSE 'NEW'::billstatus END ) """) op.execute("ALTER TABLE bills ALTER COLUMN status SET DEFAULT 'NEW'::billstatus") op.execute("DROP TYPE depositstatus") op.drop_index(op.f('ix_balance_transactions_user_id'), table_name='balance_transactions') op.drop_table('balance_transactions') # ### end Alembic commands ###