gabriel / musehub public
0025_drop_social_layer.py python
212 lines 11.8 KB
Raw
sha256:a10adeeb7a0169cb9900f9806ed7a973047258abb6283724fe55e8eb68ff3f0a init: musehub initial commit Human 171 days ago
1 """Drop social layer — 12 tables removed entirely.
2
3 Tables dropped:
4 musehub_stars
5 musehub_follows
6 musehub_watches
7 musehub_reactions
8 musehub_view_events
9 musehub_download_events
10 musehub_notifications
11 musehub_comments
12 musehub_events
13 musehub_forks
14 musehub_render_jobs
15 musehub_health_snapshots
16
17 Revision ID: 0025
18 Revises: 0024
19 """
20 from __future__ import annotations
21
22 import sqlalchemy as sa
23 from alembic import op
24
25 revision = "0025"
26 down_revision = "0024"
27 branch_labels = None
28 depends_on = None
29
30
31 def upgrade() -> None:
32 # Use IF EXISTS — some tables may have been created and dropped outside
33 # alembic (e.g. health_snapshots, render_jobs) or were never present on
34 # DB instances set up from an earlier schema baseline.
35 op.execute("DROP TABLE IF EXISTS musehub_stars CASCADE")
36 op.execute("DROP TABLE IF EXISTS musehub_follows CASCADE")
37 op.execute("DROP TABLE IF EXISTS musehub_watches CASCADE")
38 op.execute("DROP TABLE IF EXISTS musehub_reactions CASCADE")
39 op.execute("DROP TABLE IF EXISTS musehub_view_events CASCADE")
40 op.execute("DROP TABLE IF EXISTS musehub_download_events CASCADE")
41 op.execute("DROP TABLE IF EXISTS musehub_notifications CASCADE")
42 op.execute("DROP TABLE IF EXISTS musehub_comments CASCADE")
43 op.execute("DROP TABLE IF EXISTS musehub_events CASCADE")
44 op.execute("DROP TABLE IF EXISTS musehub_render_jobs CASCADE")
45 op.execute("DROP TABLE IF EXISTS musehub_health_snapshots CASCADE")
46 op.execute("DROP TABLE IF EXISTS musehub_forks CASCADE")
47
48
49 def downgrade() -> None:
50 op.create_table(
51 "musehub_stars",
52 sa.Column("star_id", sa.String(36), primary_key=True),
53 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
54 sa.Column("user_id", sa.String(36), nullable=False),
55 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
56 sa.UniqueConstraint("repo_id", "user_id", name="uq_musehub_stars_repo_user"),
57 )
58 op.create_index("ix_musehub_stars_repo_id", "musehub_stars", ["repo_id"])
59 op.create_index("ix_musehub_stars_user_id", "musehub_stars", ["user_id"])
60
61 op.create_table(
62 "musehub_follows",
63 sa.Column("follow_id", sa.String(36), primary_key=True),
64 sa.Column("follower_id", sa.String(255), nullable=False),
65 sa.Column("followee_id", sa.String(255), nullable=False),
66 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
67 sa.UniqueConstraint("follower_id", "followee_id", name="uq_musehub_follows"),
68 )
69 op.create_index("ix_musehub_follows_follower_id", "musehub_follows", ["follower_id"])
70 op.create_index("ix_musehub_follows_followee_id", "musehub_follows", ["followee_id"])
71
72 op.create_table(
73 "musehub_watches",
74 sa.Column("watch_id", sa.String(36), primary_key=True),
75 sa.Column("user_id", sa.String(255), nullable=False),
76 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
77 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
78 sa.UniqueConstraint("user_id", "repo_id", name="uq_musehub_watches"),
79 )
80 op.create_index("ix_musehub_watches_user_id", "musehub_watches", ["user_id"])
81 op.create_index("ix_musehub_watches_repo_id", "musehub_watches", ["repo_id"])
82
83 op.create_table(
84 "musehub_reactions",
85 sa.Column("reaction_id", sa.String(36), primary_key=True),
86 sa.Column("repo_id", sa.String(36), nullable=False),
87 sa.Column("target_type", sa.String(20), nullable=False),
88 sa.Column("target_id", sa.String(255), nullable=False),
89 sa.Column("user_id", sa.String(255), nullable=False),
90 sa.Column("emoji", sa.String(10), nullable=False),
91 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
92 sa.UniqueConstraint("user_id", "target_type", "target_id", "emoji", name="uq_musehub_reactions"),
93 )
94 op.create_index("ix_musehub_reactions_repo_id", "musehub_reactions", ["repo_id"])
95 op.create_index("ix_musehub_reactions_target_type", "musehub_reactions", ["target_type"])
96 op.create_index("ix_musehub_reactions_target_id", "musehub_reactions", ["target_id"])
97 op.create_index("ix_musehub_reactions_user_id", "musehub_reactions", ["user_id"])
98
99 op.create_table(
100 "musehub_view_events",
101 sa.Column("view_id", sa.String(36), primary_key=True),
102 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
103 sa.Column("viewer_fingerprint", sa.String(64), nullable=False),
104 sa.Column("event_date", sa.String(10), nullable=False),
105 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
106 sa.UniqueConstraint("repo_id", "viewer_fingerprint", "event_date", name="uq_musehub_view_events"),
107 )
108 op.create_index("ix_musehub_view_events_repo_id", "musehub_view_events", ["repo_id"])
109
110 op.create_table(
111 "musehub_download_events",
112 sa.Column("dl_id", sa.String(36), primary_key=True),
113 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
114 sa.Column("ref", sa.String(255), nullable=False),
115 sa.Column("downloader_id", sa.String(255), nullable=True),
116 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
117 )
118 op.create_index("ix_musehub_download_events_repo_id", "musehub_download_events", ["repo_id"])
119 op.create_index("ix_musehub_download_events_created_at", "musehub_download_events", ["created_at"])
120
121 op.create_table(
122 "musehub_notifications",
123 sa.Column("notif_id", sa.String(36), primary_key=True),
124 sa.Column("recipient_id", sa.String(255), nullable=False),
125 sa.Column("event_type", sa.String(40), nullable=False),
126 sa.Column("repo_id", sa.String(36), nullable=True),
127 sa.Column("actor", sa.String(255), nullable=False),
128 sa.Column("payload", sa.JSON(), nullable=False, server_default="{}"),
129 sa.Column("is_read", sa.Boolean(), nullable=False, server_default="false"),
130 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
131 )
132 op.create_index("ix_musehub_notifications_recipient_id", "musehub_notifications", ["recipient_id"])
133 op.create_index("ix_musehub_notifications_is_read", "musehub_notifications", ["is_read"])
134 op.create_index("ix_musehub_notifications_created_at", "musehub_notifications", ["created_at"])
135
136 op.create_table(
137 "musehub_comments",
138 sa.Column("comment_id", sa.String(36), primary_key=True),
139 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
140 sa.Column("target_type", sa.String(20), nullable=False),
141 sa.Column("target_id", sa.String(255), nullable=False),
142 sa.Column("author", sa.String(255), nullable=False),
143 sa.Column("body", sa.Text(), nullable=False),
144 sa.Column("parent_id", sa.String(36), nullable=True),
145 sa.Column("is_deleted", sa.Boolean(), nullable=False, server_default="false"),
146 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
147 sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
148 )
149 op.create_index("ix_musehub_comments_repo_id", "musehub_comments", ["repo_id"])
150 op.create_index("ix_musehub_comments_target_type", "musehub_comments", ["target_type"])
151 op.create_index("ix_musehub_comments_target_id", "musehub_comments", ["target_id"])
152 op.create_index("ix_musehub_comments_author", "musehub_comments", ["author"])
153 op.create_index("ix_musehub_comments_created_at", "musehub_comments", ["created_at"])
154
155 op.create_table(
156 "musehub_events",
157 sa.Column("event_id", sa.String(36), primary_key=True),
158 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
159 sa.Column("event_type", sa.String(40), nullable=False),
160 sa.Column("actor", sa.String(255), nullable=False),
161 sa.Column("description", sa.Text(), nullable=False, server_default=""),
162 sa.Column("event_metadata", sa.JSON(), nullable=False, server_default="{}"),
163 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
164 )
165 op.create_index("ix_musehub_events_repo_id", "musehub_events", ["repo_id"])
166 op.create_index("ix_musehub_events_event_type", "musehub_events", ["event_type"])
167 op.create_index("ix_musehub_events_created_at", "musehub_events", ["created_at"])
168
169 op.create_table(
170 "musehub_render_jobs",
171 sa.Column("render_job_id", sa.String(36), primary_key=True),
172 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
173 sa.Column("commit_id", sa.String(64), nullable=False),
174 sa.Column("status", sa.String(20), nullable=False, server_default="pending"),
175 sa.Column("error_message", sa.Text(), nullable=True),
176 sa.Column("artifact_count", sa.Integer(), nullable=False, server_default="0"),
177 sa.Column("audio_object_ids", sa.JSON(), nullable=False, server_default="[]"),
178 sa.Column("preview_object_ids", sa.JSON(), nullable=False, server_default="[]"),
179 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
180 sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
181 sa.UniqueConstraint("repo_id", "commit_id", name="uq_musehub_render_jobs_repo_commit"),
182 )
183 op.create_index("ix_musehub_render_jobs_repo_id", "musehub_render_jobs", ["repo_id"])
184 op.create_index("ix_musehub_render_jobs_commit_id", "musehub_render_jobs", ["commit_id"])
185 op.create_index("ix_musehub_render_jobs_status", "musehub_render_jobs", ["status"])
186
187 op.create_table(
188 "musehub_health_snapshots",
189 sa.Column("snapshot_id", sa.String(36), primary_key=True),
190 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
191 sa.Column("ref", sa.String(64), nullable=False),
192 sa.Column("score", sa.Float(), nullable=True),
193 sa.Column("breakage_count", sa.Integer(), nullable=False, server_default="0"),
194 sa.Column("dead_code_count", sa.Integer(), nullable=False, server_default="0"),
195 sa.Column("type_coverage", sa.Float(), nullable=True),
196 sa.Column("test_gap_count", sa.Integer(), nullable=False, server_default="0"),
197 sa.Column("blast_risk_p95", sa.Float(), nullable=True),
198 sa.Column("computed_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
199 )
200 op.create_index("ix_health_snapshots_repo_id", "musehub_health_snapshots", ["repo_id"])
201
202 op.create_table(
203 "musehub_forks",
204 sa.Column("fork_id", sa.String(36), primary_key=True),
205 sa.Column("source_repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
206 sa.Column("fork_repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
207 sa.Column("forked_by", sa.String(255), nullable=False),
208 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
209 sa.UniqueConstraint("source_repo_id", "fork_repo_id", name="uq_musehub_forks"),
210 )
211 op.create_index("ix_musehub_forks_source_repo_id", "musehub_forks", ["source_repo_id"])
212 op.create_index("ix_musehub_forks_fork_repo_id", "musehub_forks", ["fork_repo_id"])
File History 1 commit
sha256:a10adeeb7a0169cb9900f9806ed7a973047258abb6283724fe55e8eb68ff3f0a init: musehub initial commit Human 171 days ago