Files
eryao/backend/alembic/versions/20260413_0004_register_bonus_claims_snapshot.py
T
qzl c55be6d3fd fix: preserve points balance across account re-registration
Persist a per-email balance snapshot before account deletion and restore it on same-email re-registration, preventing both unintended balance reset and repeated signup bonus grants.
2026-04-13 11:28:58 +08:00

51 lines
1.4 KiB
Python

"""store register bonus balance snapshot and remove first_user_id fk
Revision ID: 20260413_0004
Revises: 20260411_0005
Create Date: 2026-04-13 00:10:00
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
revision: str = "20260413_0004"
down_revision: Union[str, Sequence[str], None] = "20260411_0005"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.execute(
"ALTER TABLE register_bonus_claims DROP CONSTRAINT IF EXISTS register_bonus_claims_first_user_id_fkey"
)
op.drop_column("register_bonus_claims", "first_user_id")
op.add_column(
"register_bonus_claims",
sa.Column("first_user_id_snapshot", sa.UUID(), nullable=True),
)
op.add_column(
"register_bonus_claims",
sa.Column("balance_snapshot", sa.BigInteger(), nullable=True),
)
def downgrade() -> None:
op.drop_column("register_bonus_claims", "balance_snapshot")
op.drop_column("register_bonus_claims", "first_user_id_snapshot")
op.add_column(
"register_bonus_claims",
sa.Column("first_user_id", sa.UUID(), nullable=True),
)
op.create_foreign_key(
"register_bonus_claims_first_user_id_fkey",
"register_bonus_claims",
"users",
["first_user_id"],
["id"],
source_schema="public",
referent_schema="auth",
ondelete="SET NULL",
)