"""Staging for authorized external observations.""" from alembic import op import sqlalchemy as sa revision = "0008" down_revision = "0007" branch_labels = None depends_on = None def upgrade() -> None: op.create_table( "data_source", sa.Column("key", sa.String(50), primary_key=True), sa.Column("name", sa.String(100), nullable=False), sa.Column("base_url", sa.Text(), nullable=False), sa.Column("default_confidence", sa.Integer(), nullable=False), sa.Column("enabled", sa.Boolean(), nullable=False, server_default=sa.false()), ) op.create_table( "external_observation", sa.Column("id", sa.Uuid(), primary_key=True), sa.Column("source_system", sa.String(50), sa.ForeignKey("data_source.key"), nullable=False), sa.Column("source_external_id", sa.String(200), nullable=False), sa.Column("source_url", sa.Text(), nullable=False), sa.Column("fish_name", sa.String(200), nullable=False), sa.Column("fish_external_id", sa.String(200)), sa.Column("waterbody_name", sa.String(200), nullable=False), sa.Column("waterbody_external_id", sa.String(200)), sa.Column("x", sa.Integer()), sa.Column("y", sa.Integer()), sa.Column("weight_g", sa.Integer()), sa.Column("published_at", sa.DateTime(timezone=True)), sa.Column("first_seen_at", sa.DateTime(timezone=True), nullable=False), sa.Column("last_seen_at", sa.DateTime(timezone=True), nullable=False), sa.Column("status", sa.String(30), nullable=False, server_default="staged"), sa.Column("payload", sa.JSON(), nullable=False), sa.UniqueConstraint("source_system", "source_external_id"), ) op.create_index("ix_external_observation_source_system", "external_observation", ["source_system"]) op.create_index("ix_external_observation_last_seen_at", "external_observation", ["last_seen_at"]) op.create_index("ix_external_observation_status", "external_observation", ["status"]) sources = sa.table( "data_source", sa.column("key", sa.String), sa.column("name", sa.String), sa.column("base_url", sa.Text), sa.column("default_confidence", sa.Integer), sa.column("enabled", sa.Boolean), ) op.bulk_insert(sources, [ {"key": "rf4db", "name": "RF4DB", "base_url": "https://rf4db.com", "default_confidence": 70, "enabled": False}, {"key": "rf4stat-fishing", "name": "RF4-STAT fishing", "base_url": "https://rf4-stat.ru/fishing/", "default_confidence": 65, "enabled": False}, {"key": "rf4stat-post", "name": "RF4-STAT posts", "base_url": "https://rf4-stat.ru/posts/", "default_confidence": 60, "enabled": False}, ]) def downgrade() -> None: op.drop_index("ix_external_observation_status", table_name="external_observation") op.drop_index("ix_external_observation_last_seen_at", table_name="external_observation") op.drop_index("ix_external_observation_source_system", table_name="external_observation") op.drop_table("external_observation") op.drop_table("data_source")