feature/boss-sprites-and-badges (#22)
Reviewed-on: TheFurya/nuzlocke-tracker#22 Co-authored-by: Julian Tabel <juliantabel.jt@gmail.com> Co-committed-by: Julian Tabel <juliantabel.jt@gmail.com>
This commit was merged in pull request #22.
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
"""add game_id to boss battles
|
||||
|
||||
Revision ID: f7a8b9c0d1e2
|
||||
Revises: e5f70a1ca323
|
||||
Create Date: 2026-02-14 12:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "f7a8b9c0d1e2"
|
||||
down_revision: str | Sequence[str] | None = "e5f70a1ca323"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.add_column(
|
||||
"boss_battles",
|
||||
sa.Column("game_id", sa.Integer(), nullable=True),
|
||||
)
|
||||
op.create_foreign_key(
|
||||
"fk_boss_battles_game_id",
|
||||
"boss_battles",
|
||||
"games",
|
||||
["game_id"],
|
||||
["id"],
|
||||
)
|
||||
op.create_index("ix_boss_battles_game_id", "boss_battles", ["game_id"])
|
||||
|
||||
# Data migration: for bosses where section is a game name,
|
||||
# look up the game ID, set game_id, and reset section to null.
|
||||
conn = op.get_bind()
|
||||
rows = conn.execute(
|
||||
sa.text(
|
||||
"SELECT bb.id, g.id AS gid "
|
||||
"FROM boss_battles bb "
|
||||
"JOIN games g ON LOWER(bb.section) = LOWER(g.name) "
|
||||
"WHERE bb.section IS NOT NULL"
|
||||
)
|
||||
).fetchall()
|
||||
for row in rows:
|
||||
conn.execute(
|
||||
sa.text(
|
||||
"UPDATE boss_battles SET game_id = :gid, section = NULL WHERE id = :bid"
|
||||
),
|
||||
{"gid": row.gid, "bid": row.id},
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# Reverse data migration: restore section from game name
|
||||
conn = op.get_bind()
|
||||
rows = conn.execute(
|
||||
sa.text(
|
||||
"SELECT bb.id, g.name "
|
||||
"FROM boss_battles bb "
|
||||
"JOIN games g ON bb.game_id = g.id "
|
||||
"WHERE bb.game_id IS NOT NULL"
|
||||
)
|
||||
).fetchall()
|
||||
for row in rows:
|
||||
conn.execute(
|
||||
sa.text(
|
||||
"UPDATE boss_battles SET section = :name, game_id = NULL WHERE id = :bid"
|
||||
),
|
||||
{"name": row.name, "bid": row.id},
|
||||
)
|
||||
|
||||
op.drop_index("ix_boss_battles_game_id", table_name="boss_battles")
|
||||
op.drop_constraint("fk_boss_battles_game_id", "boss_battles", type_="foreignkey")
|
||||
op.drop_column("boss_battles", "game_id")
|
||||
Reference in New Issue
Block a user