left4me/l4d2web/alembic/versions/0005_script_overlays.py
mwiegand 43dc9b0ccf
feat(l4d2-web): script overlay schema — add overlay.script + last_build_status, drop globals tables
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 15:33:04 +02:00

79 lines
2.3 KiB
Python

"""script overlays
Revision ID: 0005_script_overlays
Revises: 0004_drop_legacy_external_overlay_type
Create Date: 2026-05-08
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
revision: str = "0005_script_overlays"
down_revision: Union[str, Sequence[str], None] = "0004_drop_legacy_external_overlay_type"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# 1. Wipe legacy global-type overlay rows and any references to them.
op.execute(
"DELETE FROM jobs "
"WHERE overlay_id IN (SELECT id FROM overlays "
"WHERE type IN ('l4d2center_maps', 'cedapug_maps'))"
)
op.execute(
"DELETE FROM blueprint_overlays "
"WHERE overlay_id IN (SELECT id FROM overlays "
"WHERE type IN ('l4d2center_maps', 'cedapug_maps'))"
)
op.execute(
"DELETE FROM overlay_workshop_items "
"WHERE overlay_id IN (SELECT id FROM overlays "
"WHERE type IN ('l4d2center_maps', 'cedapug_maps'))"
)
op.execute(
"DELETE FROM overlays WHERE type IN ('l4d2center_maps', 'cedapug_maps')"
)
# 2. Drop globals tables in FK order: item_files -> items -> sources.
op.drop_index(
"ix_global_overlay_item_files_item",
table_name="global_overlay_item_files",
)
op.drop_table("global_overlay_item_files")
op.drop_index(
"ix_global_overlay_items_source", table_name="global_overlay_items"
)
op.drop_table("global_overlay_items")
op.drop_index(
"ix_global_overlay_sources_type", table_name="global_overlay_sources"
)
op.drop_table("global_overlay_sources")
# 3. Add new columns on overlays.
with op.batch_alter_table("overlays") as batch_op:
batch_op.add_column(
sa.Column(
"script",
sa.Text(),
nullable=False,
server_default="",
)
)
batch_op.add_column(
sa.Column(
"last_build_status",
sa.String(length=16),
nullable=False,
server_default="",
)
)
def downgrade() -> None:
# data is gone; intentional one-way migration
pass