"""Add bill_category, cosponsors, and member effectiveness score columns Revision ID: 0018 Revises: 0017 """ from alembic import op import sqlalchemy as sa revision = "0018" down_revision = "0017" branch_labels = None depends_on = None def upgrade(): # Bill additions op.add_column("bills", sa.Column("bill_category", sa.String(20), nullable=True)) op.add_column("bills", sa.Column("cosponsors_fetched_at", sa.DateTime(timezone=True), nullable=True)) # Co-sponsors table op.create_table( "bill_cosponsors", sa.Column("id", sa.Integer, primary_key=True, autoincrement=True), sa.Column("bill_id", sa.String, sa.ForeignKey("bills.bill_id", ondelete="CASCADE"), nullable=False), sa.Column("bioguide_id", sa.String, sa.ForeignKey("members.bioguide_id", ondelete="SET NULL"), nullable=True), sa.Column("name", sa.String(200)), sa.Column("party", sa.String(50)), sa.Column("state", sa.String(10)), sa.Column("sponsored_date", sa.Date, nullable=True), sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.text("now()")), ) op.create_index("ix_bill_cosponsors_bill_id", "bill_cosponsors", ["bill_id"]) op.create_index("ix_bill_cosponsors_bioguide_id", "bill_cosponsors", ["bioguide_id"]) # Partial unique index — prevents duplicates for known members, allows multiple nulls op.create_index( "uq_bill_cosponsors_bill_member", "bill_cosponsors", ["bill_id", "bioguide_id"], unique=True, postgresql_where=sa.text("bioguide_id IS NOT NULL"), ) # Member effectiveness columns op.add_column("members", sa.Column("effectiveness_score", sa.Float, nullable=True)) op.add_column("members", sa.Column("effectiveness_percentile", sa.Float, nullable=True)) op.add_column("members", sa.Column("effectiveness_tier", sa.String(20), nullable=True)) def downgrade(): op.drop_column("members", "effectiveness_tier") op.drop_column("members", "effectiveness_percentile") op.drop_column("members", "effectiveness_score") op.drop_index("uq_bill_cosponsors_bill_member", "bill_cosponsors") op.drop_index("ix_bill_cosponsors_bioguide_id", "bill_cosponsors") op.drop_index("ix_bill_cosponsors_bill_id", "bill_cosponsors") op.drop_table("bill_cosponsors") op.drop_column("bills", "cosponsors_fetched_at") op.drop_column("bills", "bill_category")