"""Drop social layer — 12 tables removed entirely. Tables dropped: musehub_stars musehub_follows musehub_watches musehub_reactions musehub_view_events musehub_download_events musehub_notifications musehub_comments musehub_events musehub_forks musehub_render_jobs musehub_health_snapshots Revision ID: 0025 Revises: 0024 """ from __future__ import annotations import sqlalchemy as sa from alembic import op revision = "0025" down_revision = "0024" branch_labels = None depends_on = None def upgrade() -> None: # Use IF EXISTS — some tables may have been created and dropped outside # alembic (e.g. health_snapshots, render_jobs) or were never present on # DB instances set up from an earlier schema baseline. op.execute("DROP TABLE IF EXISTS musehub_stars CASCADE") op.execute("DROP TABLE IF EXISTS musehub_follows CASCADE") op.execute("DROP TABLE IF EXISTS musehub_watches CASCADE") op.execute("DROP TABLE IF EXISTS musehub_reactions CASCADE") op.execute("DROP TABLE IF EXISTS musehub_view_events CASCADE") op.execute("DROP TABLE IF EXISTS musehub_download_events CASCADE") op.execute("DROP TABLE IF EXISTS musehub_notifications CASCADE") op.execute("DROP TABLE IF EXISTS musehub_comments CASCADE") op.execute("DROP TABLE IF EXISTS musehub_events CASCADE") op.execute("DROP TABLE IF EXISTS musehub_render_jobs CASCADE") op.execute("DROP TABLE IF EXISTS musehub_health_snapshots CASCADE") op.execute("DROP TABLE IF EXISTS musehub_forks CASCADE") def downgrade() -> None: op.create_table( "musehub_stars", sa.Column("star_id", sa.String(36), primary_key=True), sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False), sa.Column("user_id", sa.String(36), nullable=False), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), sa.UniqueConstraint("repo_id", "user_id", name="uq_musehub_stars_repo_user"), ) op.create_index("ix_musehub_stars_repo_id", "musehub_stars", ["repo_id"]) op.create_index("ix_musehub_stars_user_id", "musehub_stars", ["user_id"]) op.create_table( "musehub_follows", sa.Column("follow_id", sa.String(36), primary_key=True), sa.Column("follower_id", sa.String(255), nullable=False), sa.Column("followee_id", sa.String(255), nullable=False), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), sa.UniqueConstraint("follower_id", "followee_id", name="uq_musehub_follows"), ) op.create_index("ix_musehub_follows_follower_id", "musehub_follows", ["follower_id"]) op.create_index("ix_musehub_follows_followee_id", "musehub_follows", ["followee_id"]) op.create_table( "musehub_watches", sa.Column("watch_id", sa.String(36), primary_key=True), sa.Column("user_id", sa.String(255), nullable=False), sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), sa.UniqueConstraint("user_id", "repo_id", name="uq_musehub_watches"), ) op.create_index("ix_musehub_watches_user_id", "musehub_watches", ["user_id"]) op.create_index("ix_musehub_watches_repo_id", "musehub_watches", ["repo_id"]) op.create_table( "musehub_reactions", sa.Column("reaction_id", sa.String(36), primary_key=True), sa.Column("repo_id", sa.String(36), nullable=False), sa.Column("target_type", sa.String(20), nullable=False), sa.Column("target_id", sa.String(255), nullable=False), sa.Column("user_id", sa.String(255), nullable=False), sa.Column("emoji", sa.String(10), nullable=False), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), sa.UniqueConstraint("user_id", "target_type", "target_id", "emoji", name="uq_musehub_reactions"), ) op.create_index("ix_musehub_reactions_repo_id", "musehub_reactions", ["repo_id"]) op.create_index("ix_musehub_reactions_target_type", "musehub_reactions", ["target_type"]) op.create_index("ix_musehub_reactions_target_id", "musehub_reactions", ["target_id"]) op.create_index("ix_musehub_reactions_user_id", "musehub_reactions", ["user_id"]) op.create_table( "musehub_view_events", sa.Column("view_id", sa.String(36), primary_key=True), sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False), sa.Column("viewer_fingerprint", sa.String(64), nullable=False), sa.Column("event_date", sa.String(10), nullable=False), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), sa.UniqueConstraint("repo_id", "viewer_fingerprint", "event_date", name="uq_musehub_view_events"), ) op.create_index("ix_musehub_view_events_repo_id", "musehub_view_events", ["repo_id"]) op.create_table( "musehub_download_events", sa.Column("dl_id", sa.String(36), primary_key=True), sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False), sa.Column("ref", sa.String(255), nullable=False), sa.Column("downloader_id", sa.String(255), nullable=True), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), ) op.create_index("ix_musehub_download_events_repo_id", "musehub_download_events", ["repo_id"]) op.create_index("ix_musehub_download_events_created_at", "musehub_download_events", ["created_at"]) op.create_table( "musehub_notifications", sa.Column("notif_id", sa.String(36), primary_key=True), sa.Column("recipient_id", sa.String(255), nullable=False), sa.Column("event_type", sa.String(40), nullable=False), sa.Column("repo_id", sa.String(36), nullable=True), sa.Column("actor", sa.String(255), nullable=False), sa.Column("payload", sa.JSON(), nullable=False, server_default="{}"), sa.Column("is_read", sa.Boolean(), nullable=False, server_default="false"), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), ) op.create_index("ix_musehub_notifications_recipient_id", "musehub_notifications", ["recipient_id"]) op.create_index("ix_musehub_notifications_is_read", "musehub_notifications", ["is_read"]) op.create_index("ix_musehub_notifications_created_at", "musehub_notifications", ["created_at"]) op.create_table( "musehub_comments", sa.Column("comment_id", sa.String(36), primary_key=True), sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False), sa.Column("target_type", sa.String(20), nullable=False), sa.Column("target_id", sa.String(255), nullable=False), sa.Column("author", sa.String(255), nullable=False), sa.Column("body", sa.Text(), nullable=False), sa.Column("parent_id", sa.String(36), nullable=True), sa.Column("is_deleted", sa.Boolean(), nullable=False, server_default="false"), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), ) op.create_index("ix_musehub_comments_repo_id", "musehub_comments", ["repo_id"]) op.create_index("ix_musehub_comments_target_type", "musehub_comments", ["target_type"]) op.create_index("ix_musehub_comments_target_id", "musehub_comments", ["target_id"]) op.create_index("ix_musehub_comments_author", "musehub_comments", ["author"]) op.create_index("ix_musehub_comments_created_at", "musehub_comments", ["created_at"]) op.create_table( "musehub_events", sa.Column("event_id", sa.String(36), primary_key=True), sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False), sa.Column("event_type", sa.String(40), nullable=False), sa.Column("actor", sa.String(255), nullable=False), sa.Column("description", sa.Text(), nullable=False, server_default=""), sa.Column("event_metadata", sa.JSON(), nullable=False, server_default="{}"), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), ) op.create_index("ix_musehub_events_repo_id", "musehub_events", ["repo_id"]) op.create_index("ix_musehub_events_event_type", "musehub_events", ["event_type"]) op.create_index("ix_musehub_events_created_at", "musehub_events", ["created_at"]) op.create_table( "musehub_render_jobs", sa.Column("render_job_id", sa.String(36), primary_key=True), sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False), sa.Column("commit_id", sa.String(64), nullable=False), sa.Column("status", sa.String(20), nullable=False, server_default="pending"), sa.Column("error_message", sa.Text(), nullable=True), sa.Column("artifact_count", sa.Integer(), nullable=False, server_default="0"), sa.Column("audio_object_ids", sa.JSON(), nullable=False, server_default="[]"), sa.Column("preview_object_ids", sa.JSON(), nullable=False, server_default="[]"), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), sa.UniqueConstraint("repo_id", "commit_id", name="uq_musehub_render_jobs_repo_commit"), ) op.create_index("ix_musehub_render_jobs_repo_id", "musehub_render_jobs", ["repo_id"]) op.create_index("ix_musehub_render_jobs_commit_id", "musehub_render_jobs", ["commit_id"]) op.create_index("ix_musehub_render_jobs_status", "musehub_render_jobs", ["status"]) op.create_table( "musehub_health_snapshots", sa.Column("snapshot_id", sa.String(36), primary_key=True), sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False), sa.Column("ref", sa.String(64), nullable=False), sa.Column("score", sa.Float(), nullable=True), sa.Column("breakage_count", sa.Integer(), nullable=False, server_default="0"), sa.Column("dead_code_count", sa.Integer(), nullable=False, server_default="0"), sa.Column("type_coverage", sa.Float(), nullable=True), sa.Column("test_gap_count", sa.Integer(), nullable=False, server_default="0"), sa.Column("blast_risk_p95", sa.Float(), nullable=True), sa.Column("computed_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), ) op.create_index("ix_health_snapshots_repo_id", "musehub_health_snapshots", ["repo_id"]) op.create_table( "musehub_forks", sa.Column("fork_id", sa.String(36), primary_key=True), sa.Column("source_repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False), sa.Column("fork_repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False), sa.Column("forked_by", sa.String(255), nullable=False), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), sa.UniqueConstraint("source_repo_id", "fork_repo_id", name="uq_musehub_forks"), ) op.create_index("ix_musehub_forks_source_repo_id", "musehub_forks", ["source_repo_id"]) op.create_index("ix_musehub_forks_fork_repo_id", "musehub_forks", ["fork_repo_id"])