66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
"""add canonical tackle items and rig components
|
|
|
|
Revision ID: 0021
|
|
Revises: 0020
|
|
"""
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
revision = "0021"
|
|
down_revision = "0020"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.create_table(
|
|
"tackle_item",
|
|
sa.Column("id", sa.Uuid(), primary_key=True),
|
|
sa.Column("name", sa.String(200), nullable=False),
|
|
sa.Column("normalized_name", sa.String(200), nullable=False, unique=True),
|
|
sa.Column("category", sa.String(20), nullable=False),
|
|
sa.Column("subcategory", sa.String(100)),
|
|
sa.Column("brand", sa.String(100)),
|
|
sa.Column("family", sa.String(100)),
|
|
sa.Column("unlock_level", sa.Integer()),
|
|
sa.Column("source_system", sa.String(50)),
|
|
sa.Column("source_external_id", sa.String(200)),
|
|
sa.Column("source_url", sa.Text()),
|
|
sa.Column("source_checked_at", sa.DateTime(timezone=True)),
|
|
sa.Column("raw_payload", sa.JSON()),
|
|
sa.UniqueConstraint("source_system", "source_external_id"),
|
|
sa.CheckConstraint(
|
|
"category IN ('bait', 'lure', 'rod', 'reel', 'line', 'hook', 'rig', 'float', 'sinker', 'other')",
|
|
name="ck_tackle_item_category",
|
|
),
|
|
)
|
|
op.create_table(
|
|
"rig",
|
|
sa.Column("id", sa.Uuid(), primary_key=True),
|
|
sa.Column("name", sa.String(200), nullable=False),
|
|
sa.Column("normalized_name", sa.String(200), nullable=False, unique=True),
|
|
sa.Column("source_system", sa.String(50)),
|
|
sa.Column("source_external_id", sa.String(200)),
|
|
sa.Column("source_url", sa.Text()),
|
|
sa.Column("source_checked_at", sa.DateTime(timezone=True)),
|
|
sa.Column("raw_payload", sa.JSON()),
|
|
)
|
|
op.create_table(
|
|
"rig_component",
|
|
sa.Column("id", sa.Uuid(), primary_key=True),
|
|
sa.Column("rig_id", sa.Uuid(), sa.ForeignKey("rig.id"), nullable=False),
|
|
sa.Column("tackle_item_id", sa.Uuid(), sa.ForeignKey("tackle_item.id")),
|
|
sa.Column("role", sa.String(50), nullable=False),
|
|
sa.Column("position", sa.Integer(), nullable=False),
|
|
sa.Column("raw_value", sa.String(200)),
|
|
sa.UniqueConstraint("rig_id", "position"),
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_table("rig_component")
|
|
op.drop_table("rig")
|
|
op.drop_table("tackle_item")
|