"""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")