@nextblock-cms/db 0.16.4 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/package.json +1 -1
  2. package/supabase/functions/nextblock-migration-ingest/index.ts +8 -8
  3. package/supabase/migrations/02000_catchup_gen1.sql +5880 -0
  4. package/supabase/migrations/{00000000000000_baseline_schema.sql → 02001_baseline_schema.sql} +2734 -2454
  5. package/supabase/migrations/{00000000000001_baseline_constraints_and_indexes.sql → 02002_baseline_constraints_and_indexes.sql} +1262 -1071
  6. package/supabase/migrations/{00000000000002_baseline_security_and_grants.sql → 02003_baseline_security_and_grants.sql} +1577 -1335
  7. package/supabase/migrations/02004_baseline_seed.sql +565 -0
  8. package/supabase/migrations/00000000000003_baseline_seed.sql +0 -468
  9. package/supabase/migrations/00000000000004_default_logo_email_safe.sql +0 -24
  10. package/supabase/migrations/00000000000005_add_custom_canonical.sql +0 -13
  11. package/supabase/migrations/00000000000006_home_live_demo_promo.sql +0 -67
  12. package/supabase/migrations/00000000000007_home_live_demo_promo_copy_fix.sql +0 -49
  13. package/supabase/migrations/00000000000008_setup_article_reorder.sql +0 -30
  14. package/supabase/migrations/00000000000009_home_live_demo_promo_contrast.sql +0 -52
  15. package/supabase/migrations/00000000000010_drop_github_username.sql +0 -79
  16. package/supabase/migrations/00000000000011_language_detection_admin_only.sql +0 -21
  17. package/supabase/migrations/00000000000012_cortex_ai_stock_photo_settings.sql +0 -25
  18. package/supabase/migrations/00000000000013_youtube_nocookie_embeds.sql +0 -136
  19. package/supabase/migrations/00000000000014_site_themes.sql +0 -254
  20. package/supabase/migrations/00000000000015_scheduled_publishing.sql +0 -43
  21. package/supabase/migrations/00000000000016_product_revisions_and_revision_baseline.sql +0 -310
  22. package/supabase/migrations/00000000000017_cortex_ai_mcp_server.sql +0 -91
  23. package/supabase/migrations/00000000000018_site_scripts.sql +0 -96
  24. package/supabase/migrations/00000000000019_site_script_revisions.sql +0 -85
  25. package/supabase/migrations/00000000000020_updating_article.sql +0 -162
  26. package/supabase/migrations/00000000000021_updating_article_git_merge.sql +0 -91
  27. package/supabase/migrations/00000000000022_updating_article_accuracy.sql +0 -94
  28. package/supabase/migrations/00000000000023_updating_article_layout_not_host.sql +0 -87
  29. package/supabase/migrations/00000000000024_updating_article_newline_fix.sql +0 -70
  30. package/supabase/migrations/00000000000025_rebrand_nextblock_dev.sql +0 -53
  31. package/supabase/migrations/00000000000026_product_inquiries.sql +0 -118
  32. package/supabase/migrations/00000000000027_message_threads.sql +0 -391
  33. package/supabase/migrations/00000000000028_interaction_replies.sql +0 -86
  34. package/supabase/migrations/00000000000029_form_endpoints_default_empty.sql +0 -52
  35. package/supabase/migrations/00000000000030_seo_redirects_and_robots.sql +0 -149
  36. package/supabase/migrations/00000000000031_seo_robots_settings_admin_only.sql +0 -35
  37. package/supabase/migrations/00000000000032_seed_seo_score_optimizations.sql +0 -1172
  38. package/supabase/migrations/00000000000033_seed_seo_score_optimizations_p2.sql +0 -353
  39. package/supabase/migrations/00000000000034_seed_seo_french_legal_readability.sql +0 -101
  40. package/supabase/migrations/00000000000035_digital_products_seo_optimizations.sql +0 -134
  41. package/supabase/migrations/00000000000036_seed_posts_missing_seo_metadata.sql +0 -37
@@ -1,1071 +1,1262 @@
1
- -- AUTO-GENERATED baseline (re-baseline of migrations 000..044). Idempotent; safe to replay.
2
- -- 01 · constraints (PK / unique / check / FK) + indexes
3
- -- Regenerate via tools/scripts/rebaseline-transform.mjs. Do not hand-edit.
4
-
5
- DO $rb$ BEGIN
6
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'blocks_pkey' AND conrelid = 'public.blocks'::regclass) THEN
7
- ALTER TABLE ONLY public.blocks
8
- ADD CONSTRAINT blocks_pkey PRIMARY KEY (id);
9
- END IF;
10
- END $rb$;
11
-
12
- DO $rb$ BEGIN
13
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'categories_pkey' AND conrelid = 'public.categories'::regclass) THEN
14
- ALTER TABLE ONLY public.categories
15
- ADD CONSTRAINT categories_pkey PRIMARY KEY (id);
16
- END IF;
17
- END $rb$;
18
-
19
- DO $rb$ BEGIN
20
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'categories_slug_key' AND conrelid = 'public.categories'::regclass) THEN
21
- ALTER TABLE ONLY public.categories
22
- ADD CONSTRAINT categories_slug_key UNIQUE (slug);
23
- END IF;
24
- END $rb$;
25
-
26
- DO $rb$ BEGIN
27
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_interactions_pkey' AND conrelid = 'public.cms_interactions'::regclass) THEN
28
- ALTER TABLE ONLY public.cms_interactions
29
- ADD CONSTRAINT cms_interactions_pkey PRIMARY KEY (id);
30
- END IF;
31
- END $rb$;
32
-
33
- DO $rb$ BEGIN
34
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'content_drafts_parent_unique' AND conrelid = 'public.content_drafts'::regclass) THEN
35
- ALTER TABLE ONLY public.content_drafts
36
- ADD CONSTRAINT content_drafts_parent_unique UNIQUE (parent_type, parent_id);
37
- END IF;
38
- END $rb$;
39
-
40
- DO $rb$ BEGIN
41
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'content_drafts_pkey' AND conrelid = 'public.content_drafts'::regclass) THEN
42
- ALTER TABLE ONLY public.content_drafts
43
- ADD CONSTRAINT content_drafts_pkey PRIMARY KEY (id);
44
- END IF;
45
- END $rb$;
46
-
47
- DO $rb$ BEGIN
48
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cortex_ai_db_mutation_audit_pkey' AND conrelid = 'public.cortex_ai_db_mutation_audit'::regclass) THEN
49
- ALTER TABLE ONLY public.cortex_ai_db_mutation_audit
50
- ADD CONSTRAINT cortex_ai_db_mutation_audit_pkey PRIMARY KEY (id);
51
- END IF;
52
- END $rb$;
53
-
54
- DO $rb$ BEGIN
55
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_freemius_mappings_pkey' AND conrelid = 'public.coupon_freemius_mappings'::regclass) THEN
56
- ALTER TABLE ONLY public.coupon_freemius_mappings
57
- ADD CONSTRAINT coupon_freemius_mappings_pkey PRIMARY KEY (id);
58
- END IF;
59
- END $rb$;
60
-
61
- DO $rb$ BEGIN
62
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_products_pkey' AND conrelid = 'public.coupon_products'::regclass) THEN
63
- ALTER TABLE ONLY public.coupon_products
64
- ADD CONSTRAINT coupon_products_pkey PRIMARY KEY (coupon_id, product_id);
65
- END IF;
66
- END $rb$;
67
-
68
- DO $rb$ BEGIN
69
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_redemptions_pkey' AND conrelid = 'public.coupon_redemptions'::regclass) THEN
70
- ALTER TABLE ONLY public.coupon_redemptions
71
- ADD CONSTRAINT coupon_redemptions_pkey PRIMARY KEY (id);
72
- END IF;
73
- END $rb$;
74
-
75
- DO $rb$ BEGIN
76
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupons_pkey' AND conrelid = 'public.coupons'::regclass) THEN
77
- ALTER TABLE ONLY public.coupons
78
- ADD CONSTRAINT coupons_pkey PRIMARY KEY (id);
79
- END IF;
80
- END $rb$;
81
-
82
- DO $rb$ BEGIN
83
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'currencies_code_key' AND conrelid = 'public.currencies'::regclass) THEN
84
- ALTER TABLE ONLY public.currencies
85
- ADD CONSTRAINT currencies_code_key UNIQUE (code);
86
- END IF;
87
- END $rb$;
88
-
89
- DO $rb$ BEGIN
90
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'currencies_pkey' AND conrelid = 'public.currencies'::regclass) THEN
91
- ALTER TABLE ONLY public.currencies
92
- ADD CONSTRAINT currencies_pkey PRIMARY KEY (id);
93
- END IF;
94
- END $rb$;
95
-
96
- DO $rb$ BEGIN
97
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'custom_block_definitions_pkey' AND conrelid = 'public.custom_block_definitions'::regclass) THEN
98
- ALTER TABLE ONLY public.custom_block_definitions
99
- ADD CONSTRAINT custom_block_definitions_pkey PRIMARY KEY (id);
100
- END IF;
101
- END $rb$;
102
-
103
- DO $rb$ BEGIN
104
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'custom_block_definitions_slug_key' AND conrelid = 'public.custom_block_definitions'::regclass) THEN
105
- ALTER TABLE ONLY public.custom_block_definitions
106
- ADD CONSTRAINT custom_block_definitions_slug_key UNIQUE (slug);
107
- END IF;
108
- END $rb$;
109
-
110
- DO $rb$ BEGIN
111
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'email_2fa_challenges_pkey' AND conrelid = 'public.email_2fa_challenges'::regclass) THEN
112
- ALTER TABLE ONLY public.email_2fa_challenges
113
- ADD CONSTRAINT email_2fa_challenges_pkey PRIMARY KEY (id);
114
- END IF;
115
- END $rb$;
116
-
117
- DO $rb$ BEGIN
118
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'freemius_plans_pkey' AND conrelid = 'public.freemius_plans'::regclass) THEN
119
- ALTER TABLE ONLY public.freemius_plans
120
- ADD CONSTRAINT freemius_plans_pkey PRIMARY KEY (id);
121
- END IF;
122
- END $rb$;
123
-
124
- DO $rb$ BEGIN
125
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'freemius_pricing_pkey' AND conrelid = 'public.freemius_pricing'::regclass) THEN
126
- ALTER TABLE ONLY public.freemius_pricing
127
- ADD CONSTRAINT freemius_pricing_pkey PRIMARY KEY (id);
128
- END IF;
129
- END $rb$;
130
-
131
- DO $rb$ BEGIN
132
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'inventory_items_pkey' AND conrelid = 'public.inventory_items'::regclass) THEN
133
- ALTER TABLE ONLY public.inventory_items
134
- ADD CONSTRAINT inventory_items_pkey PRIMARY KEY (sku);
135
- END IF;
136
- END $rb$;
137
-
138
- DO $rb$ BEGIN
139
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'languages_code_key' AND conrelid = 'public.languages'::regclass) THEN
140
- ALTER TABLE ONLY public.languages
141
- ADD CONSTRAINT languages_code_key UNIQUE (code);
142
- END IF;
143
- END $rb$;
144
-
145
- DO $rb$ BEGIN
146
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'languages_pkey' AND conrelid = 'public.languages'::regclass) THEN
147
- ALTER TABLE ONLY public.languages
148
- ADD CONSTRAINT languages_pkey PRIMARY KEY (id);
149
- END IF;
150
- END $rb$;
151
-
152
- DO $rb$ BEGIN
153
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'logos_pkey' AND conrelid = 'public.logos'::regclass) THEN
154
- ALTER TABLE ONLY public.logos
155
- ADD CONSTRAINT logos_pkey PRIMARY KEY (id);
156
- END IF;
157
- END $rb$;
158
-
159
- DO $rb$ BEGIN
160
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'media_object_key_key' AND conrelid = 'public.media'::regclass) THEN
161
- ALTER TABLE ONLY public.media
162
- ADD CONSTRAINT media_object_key_key UNIQUE (object_key);
163
- END IF;
164
- END $rb$;
165
-
166
- DO $rb$ BEGIN
167
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'media_pkey' AND conrelid = 'public.media'::regclass) THEN
168
- ALTER TABLE ONLY public.media
169
- ADD CONSTRAINT media_pkey PRIMARY KEY (id);
170
- END IF;
171
- END $rb$;
172
-
173
- DO $rb$ BEGIN
174
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'navigation_items_pkey' AND conrelid = 'public.navigation_items'::regclass) THEN
175
- ALTER TABLE ONLY public.navigation_items
176
- ADD CONSTRAINT navigation_items_pkey PRIMARY KEY (id);
177
- END IF;
178
- END $rb$;
179
-
180
- DO $rb$ BEGIN
181
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'order_items_pkey' AND conrelid = 'public.order_items'::regclass) THEN
182
- ALTER TABLE ONLY public.order_items
183
- ADD CONSTRAINT order_items_pkey PRIMARY KEY (id);
184
- END IF;
185
- END $rb$;
186
-
187
- DO $rb$ BEGIN
188
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'orders_pkey' AND conrelid = 'public.orders'::regclass) THEN
189
- ALTER TABLE ONLY public.orders
190
- ADD CONSTRAINT orders_pkey PRIMARY KEY (id);
191
- END IF;
192
- END $rb$;
193
-
194
- DO $rb$ BEGIN
195
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'orders_stripe_session_id_key' AND conrelid = 'public.orders'::regclass) THEN
196
- ALTER TABLE ONLY public.orders
197
- ADD CONSTRAINT orders_stripe_session_id_key UNIQUE (stripe_session_id);
198
- END IF;
199
- END $rb$;
200
-
201
- DO $rb$ BEGIN
202
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'package_activations_license_key_package_id_key' AND conrelid = 'public.package_activations'::regclass) THEN
203
- ALTER TABLE ONLY public.package_activations
204
- ADD CONSTRAINT package_activations_license_key_package_id_key UNIQUE (license_key, package_id);
205
- END IF;
206
- END $rb$;
207
-
208
- DO $rb$ BEGIN
209
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'package_activations_pkey' AND conrelid = 'public.package_activations'::regclass) THEN
210
- ALTER TABLE ONLY public.package_activations
211
- ADD CONSTRAINT package_activations_pkey PRIMARY KEY (id);
212
- END IF;
213
- END $rb$;
214
-
215
- DO $rb$ BEGIN
216
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'page_revisions_page_version_key' AND conrelid = 'public.page_revisions'::regclass) THEN
217
- ALTER TABLE ONLY public.page_revisions
218
- ADD CONSTRAINT page_revisions_page_version_key UNIQUE (page_id, version);
219
- END IF;
220
- END $rb$;
221
-
222
- DO $rb$ BEGIN
223
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'page_revisions_pkey' AND conrelid = 'public.page_revisions'::regclass) THEN
224
- ALTER TABLE ONLY public.page_revisions
225
- ADD CONSTRAINT page_revisions_pkey PRIMARY KEY (id);
226
- END IF;
227
- END $rb$;
228
-
229
- DO $rb$ BEGIN
230
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'pages_language_id_slug_key' AND conrelid = 'public.pages'::regclass) THEN
231
- ALTER TABLE ONLY public.pages
232
- ADD CONSTRAINT pages_language_id_slug_key UNIQUE (language_id, slug);
233
- END IF;
234
- END $rb$;
235
-
236
- DO $rb$ BEGIN
237
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'pages_pkey' AND conrelid = 'public.pages'::regclass) THEN
238
- ALTER TABLE ONLY public.pages
239
- ADD CONSTRAINT pages_pkey PRIMARY KEY (id);
240
- END IF;
241
- END $rb$;
242
-
243
- DO $rb$ BEGIN
244
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'post_revisions_pkey' AND conrelid = 'public.post_revisions'::regclass) THEN
245
- ALTER TABLE ONLY public.post_revisions
246
- ADD CONSTRAINT post_revisions_pkey PRIMARY KEY (id);
247
- END IF;
248
- END $rb$;
249
-
250
- DO $rb$ BEGIN
251
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'post_revisions_post_version_key' AND conrelid = 'public.post_revisions'::regclass) THEN
252
- ALTER TABLE ONLY public.post_revisions
253
- ADD CONSTRAINT post_revisions_post_version_key UNIQUE (post_id, version);
254
- END IF;
255
- END $rb$;
256
-
257
- DO $rb$ BEGIN
258
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'posts_language_id_slug_key' AND conrelid = 'public.posts'::regclass) THEN
259
- ALTER TABLE ONLY public.posts
260
- ADD CONSTRAINT posts_language_id_slug_key UNIQUE (language_id, slug);
261
- END IF;
262
- END $rb$;
263
-
264
- DO $rb$ BEGIN
265
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'posts_pkey' AND conrelid = 'public.posts'::regclass) THEN
266
- ALTER TABLE ONLY public.posts
267
- ADD CONSTRAINT posts_pkey PRIMARY KEY (id);
268
- END IF;
269
- END $rb$;
270
-
271
- DO $rb$ BEGIN
272
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'privacy_consent_logs_consent_token_key' AND conrelid = 'public.privacy_consent_logs'::regclass) THEN
273
- ALTER TABLE ONLY public.privacy_consent_logs
274
- ADD CONSTRAINT privacy_consent_logs_consent_token_key UNIQUE (consent_token);
275
- END IF;
276
- END $rb$;
277
-
278
- DO $rb$ BEGIN
279
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'privacy_consent_logs_pkey' AND conrelid = 'public.privacy_consent_logs'::regclass) THEN
280
- ALTER TABLE ONLY public.privacy_consent_logs
281
- ADD CONSTRAINT privacy_consent_logs_pkey PRIMARY KEY (id);
282
- END IF;
283
- END $rb$;
284
-
285
- DO $rb$ BEGIN
286
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_attribute_terms_attribute_id_slug_key' AND conrelid = 'public.product_attribute_terms'::regclass) THEN
287
- ALTER TABLE ONLY public.product_attribute_terms
288
- ADD CONSTRAINT product_attribute_terms_attribute_id_slug_key UNIQUE (attribute_id, slug);
289
- END IF;
290
- END $rb$;
291
-
292
- DO $rb$ BEGIN
293
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_attribute_terms_pkey' AND conrelid = 'public.product_attribute_terms'::regclass) THEN
294
- ALTER TABLE ONLY public.product_attribute_terms
295
- ADD CONSTRAINT product_attribute_terms_pkey PRIMARY KEY (id);
296
- END IF;
297
- END $rb$;
298
-
299
- DO $rb$ BEGIN
300
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_attributes_pkey' AND conrelid = 'public.product_attributes'::regclass) THEN
301
- ALTER TABLE ONLY public.product_attributes
302
- ADD CONSTRAINT product_attributes_pkey PRIMARY KEY (id);
303
- END IF;
304
- END $rb$;
305
-
306
- DO $rb$ BEGIN
307
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_attributes_slug_key' AND conrelid = 'public.product_attributes'::regclass) THEN
308
- ALTER TABLE ONLY public.product_attributes
309
- ADD CONSTRAINT product_attributes_slug_key UNIQUE (slug);
310
- END IF;
311
- END $rb$;
312
-
313
- DO $rb$ BEGIN
314
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_categories_pkey' AND conrelid = 'public.product_categories'::regclass) THEN
315
- ALTER TABLE ONLY public.product_categories
316
- ADD CONSTRAINT product_categories_pkey PRIMARY KEY (product_id, category_id);
317
- END IF;
318
- END $rb$;
319
-
320
- DO $rb$ BEGIN
321
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_drafts_pkey' AND conrelid = 'public.product_drafts'::regclass) THEN
322
- ALTER TABLE ONLY public.product_drafts
323
- ADD CONSTRAINT product_drafts_pkey PRIMARY KEY (id);
324
- END IF;
325
- END $rb$;
326
-
327
- DO $rb$ BEGIN
328
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_drafts_product_unique' AND conrelid = 'public.product_drafts'::regclass) THEN
329
- ALTER TABLE ONLY public.product_drafts
330
- ADD CONSTRAINT product_drafts_product_unique UNIQUE (product_id);
331
- END IF;
332
- END $rb$;
333
-
334
- DO $rb$ BEGIN
335
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_freemius_sale_coupons_pkey' AND conrelid = 'public.product_freemius_sale_coupons'::regclass) THEN
336
- ALTER TABLE ONLY public.product_freemius_sale_coupons
337
- ADD CONSTRAINT product_freemius_sale_coupons_pkey PRIMARY KEY (id);
338
- END IF;
339
- END $rb$;
340
-
341
- DO $rb$ BEGIN
342
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_freemius_sale_coupons_product_unique' AND conrelid = 'public.product_freemius_sale_coupons'::regclass) THEN
343
- ALTER TABLE ONLY public.product_freemius_sale_coupons
344
- ADD CONSTRAINT product_freemius_sale_coupons_product_unique UNIQUE (product_id);
345
- END IF;
346
- END $rb$;
347
-
348
- DO $rb$ BEGIN
349
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_media_pkey' AND conrelid = 'public.product_media'::regclass) THEN
350
- ALTER TABLE ONLY public.product_media
351
- ADD CONSTRAINT product_media_pkey PRIMARY KEY (product_id, media_id);
352
- END IF;
353
- END $rb$;
354
-
355
- DO $rb$ BEGIN
356
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_variants_pkey' AND conrelid = 'public.product_variants'::regclass) THEN
357
- ALTER TABLE ONLY public.product_variants
358
- ADD CONSTRAINT product_variants_pkey PRIMARY KEY (id);
359
- END IF;
360
- END $rb$;
361
-
362
- DO $rb$ BEGIN
363
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_variants_product_id_sku_key' AND conrelid = 'public.product_variants'::regclass) THEN
364
- ALTER TABLE ONLY public.product_variants
365
- ADD CONSTRAINT product_variants_product_id_sku_key UNIQUE (product_id, sku);
366
- END IF;
367
- END $rb$;
368
-
369
- DO $rb$ BEGIN
370
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'products_language_id_sku_key' AND conrelid = 'public.products'::regclass) THEN
371
- ALTER TABLE ONLY public.products
372
- ADD CONSTRAINT products_language_id_sku_key UNIQUE (language_id, sku);
373
- END IF;
374
- END $rb$;
375
-
376
- DO $rb$ BEGIN
377
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'products_language_id_slug_key' AND conrelid = 'public.products'::regclass) THEN
378
- ALTER TABLE ONLY public.products
379
- ADD CONSTRAINT products_language_id_slug_key UNIQUE (language_id, slug);
380
- END IF;
381
- END $rb$;
382
-
383
- DO $rb$ BEGIN
384
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'products_pkey' AND conrelid = 'public.products'::regclass) THEN
385
- ALTER TABLE ONLY public.products
386
- ADD CONSTRAINT products_pkey PRIMARY KEY (id);
387
- END IF;
388
- END $rb$;
389
-
390
- DO $rb$ BEGIN
391
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'profiles_pkey' AND conrelid = 'public.profiles'::regclass) THEN
392
- ALTER TABLE ONLY public.profiles
393
- ADD CONSTRAINT profiles_pkey PRIMARY KEY (id);
394
- END IF;
395
- END $rb$;
396
-
397
- DO $rb$ BEGIN
398
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'shipping_zone_locations_pkey' AND conrelid = 'public.shipping_zone_locations'::regclass) THEN
399
- ALTER TABLE ONLY public.shipping_zone_locations
400
- ADD CONSTRAINT shipping_zone_locations_pkey PRIMARY KEY (id);
401
- END IF;
402
- END $rb$;
403
-
404
- DO $rb$ BEGIN
405
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'shipping_zone_methods_pkey' AND conrelid = 'public.shipping_zone_methods'::regclass) THEN
406
- ALTER TABLE ONLY public.shipping_zone_methods
407
- ADD CONSTRAINT shipping_zone_methods_pkey PRIMARY KEY (id);
408
- END IF;
409
- END $rb$;
410
-
411
- DO $rb$ BEGIN
412
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'shipping_zones_pkey' AND conrelid = 'public.shipping_zones'::regclass) THEN
413
- ALTER TABLE ONLY public.shipping_zones
414
- ADD CONSTRAINT shipping_zones_pkey PRIMARY KEY (id);
415
- END IF;
416
- END $rb$;
417
-
418
- DO $rb$ BEGIN
419
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'site_settings_pkey' AND conrelid = 'public.site_settings'::regclass) THEN
420
- ALTER TABLE ONLY public.site_settings
421
- ADD CONSTRAINT site_settings_pkey PRIMARY KEY (key);
422
- END IF;
423
- END $rb$;
424
-
425
- DO $rb$ BEGIN
426
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'system_alerts_pkey' AND conrelid = 'public.system_alerts'::regclass) THEN
427
- ALTER TABLE ONLY public.system_alerts
428
- ADD CONSTRAINT system_alerts_pkey PRIMARY KEY (id);
429
- END IF;
430
- END $rb$;
431
-
432
- DO $rb$ BEGIN
433
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'system_configuration_pkey' AND conrelid = 'public.system_configuration'::regclass) THEN
434
- ALTER TABLE ONLY public.system_configuration
435
- ADD CONSTRAINT system_configuration_pkey PRIMARY KEY (id);
436
- END IF;
437
- END $rb$;
438
-
439
- DO $rb$ BEGIN
440
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'tax_rates_pkey' AND conrelid = 'public.tax_rates'::regclass) THEN
441
- ALTER TABLE ONLY public.tax_rates
442
- ADD CONSTRAINT tax_rates_pkey PRIMARY KEY (id);
443
- END IF;
444
- END $rb$;
445
-
446
- DO $rb$ BEGIN
447
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'translations_pkey' AND conrelid = 'public.translations'::regclass) THEN
448
- ALTER TABLE ONLY public.translations
449
- ADD CONSTRAINT translations_pkey PRIMARY KEY (key);
450
- END IF;
451
- END $rb$;
452
-
453
- DO $rb$ BEGIN
454
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'ucp_cart_sessions_pkey' AND conrelid = 'public.ucp_cart_sessions'::regclass) THEN
455
- ALTER TABLE ONLY public.ucp_cart_sessions
456
- ADD CONSTRAINT ucp_cart_sessions_pkey PRIMARY KEY (id);
457
- END IF;
458
- END $rb$;
459
-
460
- DO $rb$ BEGIN
461
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_addresses_pkey' AND conrelid = 'public.user_addresses'::regclass) THEN
462
- ALTER TABLE ONLY public.user_addresses
463
- ADD CONSTRAINT user_addresses_pkey PRIMARY KEY (id);
464
- END IF;
465
- END $rb$;
466
-
467
- DO $rb$ BEGIN
468
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_security_settings_pkey' AND conrelid = 'public.user_security_settings'::regclass) THEN
469
- ALTER TABLE ONLY public.user_security_settings
470
- ADD CONSTRAINT user_security_settings_pkey PRIMARY KEY (user_id);
471
- END IF;
472
- END $rb$;
473
-
474
- DO $rb$ BEGIN
475
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_trusted_devices_device_hash_key' AND conrelid = 'public.user_trusted_devices'::regclass) THEN
476
- ALTER TABLE ONLY public.user_trusted_devices
477
- ADD CONSTRAINT user_trusted_devices_device_hash_key UNIQUE (device_hash);
478
- END IF;
479
- END $rb$;
480
-
481
- DO $rb$ BEGIN
482
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_trusted_devices_pkey' AND conrelid = 'public.user_trusted_devices'::regclass) THEN
483
- ALTER TABLE ONLY public.user_trusted_devices
484
- ADD CONSTRAINT user_trusted_devices_pkey PRIMARY KEY (id);
485
- END IF;
486
- END $rb$;
487
-
488
- DO $rb$ BEGIN
489
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'variant_attribute_mapping_pkey' AND conrelid = 'public.variant_attribute_mapping'::regclass) THEN
490
- ALTER TABLE ONLY public.variant_attribute_mapping
491
- ADD CONSTRAINT variant_attribute_mapping_pkey PRIMARY KEY (variant_id, attribute_term_id);
492
- END IF;
493
- END $rb$;
494
-
495
- CREATE INDEX IF NOT EXISTS content_drafts_author_id_idx ON public.content_drafts USING btree (author_id);
496
-
497
- CREATE INDEX IF NOT EXISTS content_drafts_parent_idx ON public.content_drafts USING btree (parent_type, parent_id);
498
-
499
- CREATE INDEX IF NOT EXISTS content_drafts_updated_at_idx ON public.content_drafts USING btree (updated_at DESC);
500
-
501
- CREATE UNIQUE INDEX IF NOT EXISTS coupon_freemius_mappings_coupon_product_unique ON public.coupon_freemius_mappings USING btree (coupon_id, freemius_product_id);
502
-
503
- CREATE UNIQUE INDEX IF NOT EXISTS coupon_redemptions_order_unique ON public.coupon_redemptions USING btree (order_id) WHERE (order_id IS NOT NULL);
504
-
505
- CREATE UNIQUE INDEX IF NOT EXISTS coupons_code_unique ON public.coupons USING btree (upper(code));
506
-
507
- CREATE UNIQUE INDEX IF NOT EXISTS ensure_single_default_language_idx ON public.languages USING btree (is_default) WHERE (is_default = true);
508
-
509
- CREATE INDEX IF NOT EXISTS idx_blocks_language_id ON public.blocks USING btree (language_id);
510
-
511
- CREATE INDEX IF NOT EXISTS idx_blocks_page_id ON public.blocks USING btree (page_id);
512
-
513
- CREATE INDEX IF NOT EXISTS idx_blocks_post_id ON public.blocks USING btree (post_id);
514
-
515
- CREATE INDEX IF NOT EXISTS idx_coupon_freemius_mappings_freemius_product_id ON public.coupon_freemius_mappings USING btree (freemius_product_id);
516
-
517
- CREATE INDEX IF NOT EXISTS idx_coupon_freemius_mappings_product_id ON public.coupon_freemius_mappings USING btree (product_id) WHERE (product_id IS NOT NULL);
518
-
519
- CREATE INDEX IF NOT EXISTS idx_coupon_products_product_id ON public.coupon_products USING btree (product_id);
520
-
521
- CREATE INDEX IF NOT EXISTS idx_coupon_redemptions_coupon_id ON public.coupon_redemptions USING btree (coupon_id);
522
-
523
- CREATE INDEX IF NOT EXISTS idx_coupon_redemptions_user_id ON public.coupon_redemptions USING btree (user_id) WHERE (user_id IS NOT NULL);
524
-
525
- CREATE INDEX IF NOT EXISTS idx_coupons_active_dates ON public.coupons USING btree (is_active, starts_at, ends_at);
526
-
527
- CREATE UNIQUE INDEX IF NOT EXISTS idx_currencies_single_default ON public.currencies USING btree (is_default) WHERE (is_default = true);
528
-
529
- CREATE INDEX IF NOT EXISTS idx_custom_block_definitions_is_original ON public.custom_block_definitions USING btree (is_original);
530
-
531
- CREATE INDEX IF NOT EXISTS idx_email_2fa_challenges_expires_at ON public.email_2fa_challenges USING btree (expires_at);
532
-
533
- CREATE INDEX IF NOT EXISTS idx_email_2fa_challenges_user_id ON public.email_2fa_challenges USING btree (user_id);
534
-
535
- CREATE INDEX IF NOT EXISTS idx_freemius_plans_product_id ON public.freemius_plans USING btree (product_id);
536
-
537
- CREATE INDEX IF NOT EXISTS idx_freemius_pricing_plan_id ON public.freemius_pricing USING btree (plan_id);
538
-
539
- CREATE INDEX IF NOT EXISTS idx_inventory_items_updated_at ON public.inventory_items USING btree (updated_at DESC);
540
-
541
- CREATE INDEX IF NOT EXISTS idx_logos_media_id ON public.logos USING btree (media_id);
542
-
543
- CREATE INDEX IF NOT EXISTS idx_media_uploader_id ON public.media USING btree (uploader_id);
544
-
545
- CREATE INDEX IF NOT EXISTS idx_navigation_items_language_id ON public.navigation_items USING btree (language_id);
546
-
547
- CREATE INDEX IF NOT EXISTS idx_navigation_items_menu_lang_order ON public.navigation_items USING btree (menu_key, language_id, "order");
548
-
549
- CREATE INDEX IF NOT EXISTS idx_navigation_items_page_id ON public.navigation_items USING btree (page_id);
550
-
551
- CREATE INDEX IF NOT EXISTS idx_navigation_items_parent_id ON public.navigation_items USING btree (parent_id);
552
-
553
- CREATE INDEX IF NOT EXISTS idx_order_items_order_id ON public.order_items USING btree (order_id);
554
-
555
- CREATE INDEX IF NOT EXISTS idx_order_items_product_id ON public.order_items USING btree (product_id);
556
-
557
- CREATE INDEX IF NOT EXISTS idx_order_items_variant_id ON public.order_items USING btree (variant_id);
558
-
559
- CREATE INDEX IF NOT EXISTS idx_orders_coupon_id ON public.orders USING btree (coupon_id) WHERE (coupon_id IS NOT NULL);
560
-
561
- CREATE INDEX IF NOT EXISTS idx_orders_freemius_license_id ON public.orders USING btree (freemius_license_id) WHERE (freemius_license_id IS NOT NULL);
562
-
563
- CREATE INDEX IF NOT EXISTS idx_orders_freemius_subscription_id ON public.orders USING btree (freemius_subscription_id) WHERE (freemius_subscription_id IS NOT NULL);
564
-
565
- CREATE INDEX IF NOT EXISTS idx_orders_freemius_trial_id ON public.orders USING btree (freemius_trial_id) WHERE (freemius_trial_id IS NOT NULL);
566
-
567
- CREATE UNIQUE INDEX IF NOT EXISTS idx_orders_invoice_number_unique ON public.orders USING btree (invoice_number) WHERE (invoice_number IS NOT NULL);
568
-
569
- CREATE INDEX IF NOT EXISTS idx_orders_user_id ON public.orders USING btree (user_id);
570
-
571
- CREATE INDEX IF NOT EXISTS idx_package_activations_license_key ON public.package_activations USING btree (license_key);
572
-
573
- CREATE INDEX IF NOT EXISTS idx_package_activations_package_id ON public.package_activations USING btree (package_id);
574
-
575
- CREATE INDEX IF NOT EXISTS idx_page_revisions_author_id ON public.page_revisions USING btree (author_id);
576
-
577
- CREATE INDEX IF NOT EXISTS idx_page_revisions_page_id_version ON public.page_revisions USING btree (page_id, version);
578
-
579
- CREATE INDEX IF NOT EXISTS idx_pages_author_id ON public.pages USING btree (author_id);
580
-
581
- CREATE INDEX IF NOT EXISTS idx_pages_feature_image_id ON public.pages USING btree (feature_image_id);
582
-
583
- CREATE INDEX IF NOT EXISTS idx_pages_translation_group_id ON public.pages USING btree (translation_group_id);
584
-
585
- CREATE INDEX IF NOT EXISTS idx_post_revisions_author_id ON public.post_revisions USING btree (author_id);
586
-
587
- CREATE INDEX IF NOT EXISTS idx_post_revisions_post_id_version ON public.post_revisions USING btree (post_id, version);
588
-
589
- CREATE INDEX IF NOT EXISTS idx_posts_author_id ON public.posts USING btree (author_id);
590
-
591
- CREATE INDEX IF NOT EXISTS idx_posts_feature_image_id ON public.posts USING btree (feature_image_id);
592
-
593
- CREATE INDEX IF NOT EXISTS idx_posts_translation_group_id ON public.posts USING btree (translation_group_id);
594
-
595
- CREATE INDEX IF NOT EXISTS idx_privacy_consent_logs_created_at ON public.privacy_consent_logs USING btree (created_at DESC);
596
-
597
- CREATE INDEX IF NOT EXISTS idx_product_attribute_terms_attribute_id ON public.product_attribute_terms USING btree (attribute_id);
598
-
599
- CREATE INDEX IF NOT EXISTS idx_product_categories_category_id ON public.product_categories USING btree (category_id);
600
-
601
- CREATE INDEX IF NOT EXISTS idx_product_categories_product_id ON public.product_categories USING btree (product_id);
602
-
603
- CREATE INDEX IF NOT EXISTS idx_product_freemius_sale_coupons_freemius_product_id ON public.product_freemius_sale_coupons USING btree (freemius_product_id);
604
-
605
- CREATE INDEX IF NOT EXISTS idx_product_media_media_id ON public.product_media USING btree (media_id);
606
-
607
- CREATE INDEX IF NOT EXISTS idx_product_media_product_id ON public.product_media USING btree (product_id);
608
-
609
- CREATE INDEX IF NOT EXISTS idx_product_variants_main_media_id ON public.product_variants USING btree (main_media_id);
610
-
611
- CREATE INDEX IF NOT EXISTS idx_product_variants_prices_gin ON public.product_variants USING gin (prices jsonb_path_ops);
612
-
613
- CREATE INDEX IF NOT EXISTS idx_product_variants_product_id ON public.product_variants USING btree (product_id);
614
-
615
- CREATE INDEX IF NOT EXISTS idx_products_prices_gin ON public.products USING gin (prices jsonb_path_ops);
616
-
617
- CREATE INDEX IF NOT EXISTS idx_products_slug ON public.products USING btree (slug);
618
-
619
- CREATE INDEX IF NOT EXISTS idx_products_translation_group_id ON public.products USING btree (translation_group_id);
620
-
621
- CREATE INDEX IF NOT EXISTS idx_shipping_zone_locations_country_state_postal ON public.shipping_zone_locations USING btree (country_code, state_code, postal_code);
622
-
623
- CREATE INDEX IF NOT EXISTS idx_shipping_zone_locations_zone_id ON public.shipping_zone_locations USING btree (zone_id);
624
-
625
- CREATE INDEX IF NOT EXISTS idx_shipping_zone_methods_name_translations ON public.shipping_zone_methods USING gin (name_translations);
626
-
627
- CREATE INDEX IF NOT EXISTS idx_shipping_zone_methods_zone_id ON public.shipping_zone_methods USING btree (zone_id);
628
-
629
- CREATE INDEX IF NOT EXISTS idx_system_alerts_unresolved ON public.system_alerts USING btree (is_resolved, created_at DESC);
630
-
631
- CREATE INDEX IF NOT EXISTS idx_tax_rates_country_state ON public.tax_rates USING btree (country_code, state_code);
632
-
633
- CREATE INDEX IF NOT EXISTS idx_ucp_cart_sessions_created_at ON public.ucp_cart_sessions USING btree (created_at DESC);
634
-
635
- CREATE INDEX IF NOT EXISTS idx_ucp_cart_sessions_status_expires_at ON public.ucp_cart_sessions USING btree (status, expires_at);
636
-
637
- CREATE UNIQUE INDEX IF NOT EXISTS idx_user_addresses_one_default_per_type ON public.user_addresses USING btree (user_id, address_type) WHERE (is_default = true);
638
-
639
- CREATE INDEX IF NOT EXISTS idx_user_addresses_type ON public.user_addresses USING btree (address_type);
640
-
641
- CREATE INDEX IF NOT EXISTS idx_user_addresses_user_id ON public.user_addresses USING btree (user_id);
642
-
643
- CREATE INDEX IF NOT EXISTS idx_user_trusted_devices_expires_at ON public.user_trusted_devices USING btree (expires_at);
644
-
645
- CREATE INDEX IF NOT EXISTS idx_user_trusted_devices_user_id ON public.user_trusted_devices USING btree (user_id);
646
-
647
- CREATE INDEX IF NOT EXISTS idx_variant_attribute_mapping_attribute_term_id ON public.variant_attribute_mapping USING btree (attribute_term_id);
648
-
649
- CREATE INDEX IF NOT EXISTS media_folder_idx ON public.media USING btree (folder);
650
-
651
- CREATE INDEX IF NOT EXISTS product_drafts_author_id_idx ON public.product_drafts USING btree (author_id);
652
-
653
- CREATE INDEX IF NOT EXISTS product_drafts_product_id_idx ON public.product_drafts USING btree (product_id);
654
-
655
- CREATE INDEX IF NOT EXISTS product_drafts_updated_at_idx ON public.product_drafts USING btree (updated_at DESC);
656
-
657
- CREATE INDEX IF NOT EXISTS product_variants_sale_window_idx ON public.product_variants USING btree (sale_start_at, sale_end_at) WHERE ((sale_start_at IS NOT NULL) OR (sale_end_at IS NOT NULL));
658
-
659
- CREATE INDEX IF NOT EXISTS product_variants_scheduled_price_idx ON public.product_variants USING btree (scheduled_price_at) WHERE (scheduled_price_at IS NOT NULL);
660
-
661
- CREATE INDEX IF NOT EXISTS products_sale_window_idx ON public.products USING btree (sale_start_at, sale_end_at) WHERE ((sale_start_at IS NOT NULL) OR (sale_end_at IS NOT NULL));
662
-
663
- CREATE INDEX IF NOT EXISTS products_scheduled_price_idx ON public.products USING btree (scheduled_price_at) WHERE (scheduled_price_at IS NOT NULL);
664
-
665
- CREATE UNIQUE INDEX IF NOT EXISTS tax_rates_country_state_name_key ON public.tax_rates USING btree (country_code, COALESCE(state_code, ''::text), lower(tax_name));
666
-
667
- DO $rb$ BEGIN
668
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'blocks_language_id_fkey' AND conrelid = 'public.blocks'::regclass) THEN
669
- ALTER TABLE ONLY public.blocks
670
- ADD CONSTRAINT blocks_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.languages(id) ON DELETE CASCADE;
671
- END IF;
672
- END $rb$;
673
-
674
- DO $rb$ BEGIN
675
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'blocks_page_id_fkey' AND conrelid = 'public.blocks'::regclass) THEN
676
- ALTER TABLE ONLY public.blocks
677
- ADD CONSTRAINT blocks_page_id_fkey FOREIGN KEY (page_id) REFERENCES public.pages(id) ON DELETE CASCADE;
678
- END IF;
679
- END $rb$;
680
-
681
- DO $rb$ BEGIN
682
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'blocks_post_id_fkey' AND conrelid = 'public.blocks'::regclass) THEN
683
- ALTER TABLE ONLY public.blocks
684
- ADD CONSTRAINT blocks_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.posts(id) ON DELETE CASCADE;
685
- END IF;
686
- END $rb$;
687
-
688
- DO $rb$ BEGIN
689
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'blocks_product_id_fkey' AND conrelid = 'public.blocks'::regclass) THEN
690
- ALTER TABLE ONLY public.blocks
691
- ADD CONSTRAINT blocks_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
692
- END IF;
693
- END $rb$;
694
-
695
- DO $rb$ BEGIN
696
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_interactions_post_id_fkey' AND conrelid = 'public.cms_interactions'::regclass) THEN
697
- ALTER TABLE ONLY public.cms_interactions
698
- ADD CONSTRAINT cms_interactions_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.posts(id) ON DELETE CASCADE;
699
- END IF;
700
- END $rb$;
701
-
702
- DO $rb$ BEGIN
703
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_interactions_product_id_fkey' AND conrelid = 'public.cms_interactions'::regclass) THEN
704
- ALTER TABLE ONLY public.cms_interactions
705
- ADD CONSTRAINT cms_interactions_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
706
- END IF;
707
- END $rb$;
708
-
709
- DO $rb$ BEGIN
710
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_interactions_user_id_profiles_fkey' AND conrelid = 'public.cms_interactions'::regclass) THEN
711
- ALTER TABLE ONLY public.cms_interactions
712
- ADD CONSTRAINT cms_interactions_user_id_profiles_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id) ON DELETE CASCADE;
713
- END IF;
714
- END $rb$;
715
-
716
- DO $rb$ BEGIN
717
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'content_drafts_author_id_fkey' AND conrelid = 'public.content_drafts'::regclass) THEN
718
- ALTER TABLE ONLY public.content_drafts
719
- ADD CONSTRAINT content_drafts_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
720
- END IF;
721
- END $rb$;
722
-
723
- DO $rb$ BEGIN
724
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cortex_ai_db_mutation_audit_actor_user_id_fkey' AND conrelid = 'public.cortex_ai_db_mutation_audit'::regclass) THEN
725
- ALTER TABLE ONLY public.cortex_ai_db_mutation_audit
726
- ADD CONSTRAINT cortex_ai_db_mutation_audit_actor_user_id_fkey FOREIGN KEY (actor_user_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
727
- END IF;
728
- END $rb$;
729
-
730
- DO $rb$ BEGIN
731
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_freemius_mappings_coupon_id_fkey' AND conrelid = 'public.coupon_freemius_mappings'::regclass) THEN
732
- ALTER TABLE ONLY public.coupon_freemius_mappings
733
- ADD CONSTRAINT coupon_freemius_mappings_coupon_id_fkey FOREIGN KEY (coupon_id) REFERENCES public.coupons(id) ON DELETE CASCADE;
734
- END IF;
735
- END $rb$;
736
-
737
- DO $rb$ BEGIN
738
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_freemius_mappings_product_id_fkey' AND conrelid = 'public.coupon_freemius_mappings'::regclass) THEN
739
- ALTER TABLE ONLY public.coupon_freemius_mappings
740
- ADD CONSTRAINT coupon_freemius_mappings_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE SET NULL;
741
- END IF;
742
- END $rb$;
743
-
744
- DO $rb$ BEGIN
745
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_products_coupon_id_fkey' AND conrelid = 'public.coupon_products'::regclass) THEN
746
- ALTER TABLE ONLY public.coupon_products
747
- ADD CONSTRAINT coupon_products_coupon_id_fkey FOREIGN KEY (coupon_id) REFERENCES public.coupons(id) ON DELETE CASCADE;
748
- END IF;
749
- END $rb$;
750
-
751
- DO $rb$ BEGIN
752
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_products_product_id_fkey' AND conrelid = 'public.coupon_products'::regclass) THEN
753
- ALTER TABLE ONLY public.coupon_products
754
- ADD CONSTRAINT coupon_products_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
755
- END IF;
756
- END $rb$;
757
-
758
- DO $rb$ BEGIN
759
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_redemptions_coupon_id_fkey' AND conrelid = 'public.coupon_redemptions'::regclass) THEN
760
- ALTER TABLE ONLY public.coupon_redemptions
761
- ADD CONSTRAINT coupon_redemptions_coupon_id_fkey FOREIGN KEY (coupon_id) REFERENCES public.coupons(id) ON DELETE SET NULL;
762
- END IF;
763
- END $rb$;
764
-
765
- DO $rb$ BEGIN
766
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_redemptions_order_id_fkey' AND conrelid = 'public.coupon_redemptions'::regclass) THEN
767
- ALTER TABLE ONLY public.coupon_redemptions
768
- ADD CONSTRAINT coupon_redemptions_order_id_fkey FOREIGN KEY (order_id) REFERENCES public.orders(id) ON DELETE CASCADE;
769
- END IF;
770
- END $rb$;
771
-
772
- DO $rb$ BEGIN
773
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_redemptions_user_id_fkey' AND conrelid = 'public.coupon_redemptions'::regclass) THEN
774
- ALTER TABLE ONLY public.coupon_redemptions
775
- ADD CONSTRAINT coupon_redemptions_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE SET NULL;
776
- END IF;
777
- END $rb$;
778
-
779
- DO $rb$ BEGIN
780
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'email_2fa_challenges_user_id_fkey' AND conrelid = 'public.email_2fa_challenges'::regclass) THEN
781
- ALTER TABLE ONLY public.email_2fa_challenges
782
- ADD CONSTRAINT email_2fa_challenges_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
783
- END IF;
784
- END $rb$;
785
-
786
- DO $rb$ BEGIN
787
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'freemius_plans_product_id_fkey' AND conrelid = 'public.freemius_plans'::regclass) THEN
788
- ALTER TABLE ONLY public.freemius_plans
789
- ADD CONSTRAINT freemius_plans_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
790
- END IF;
791
- END $rb$;
792
-
793
- DO $rb$ BEGIN
794
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'freemius_pricing_plan_id_fkey' AND conrelid = 'public.freemius_pricing'::regclass) THEN
795
- ALTER TABLE ONLY public.freemius_pricing
796
- ADD CONSTRAINT freemius_pricing_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.freemius_plans(id) ON DELETE CASCADE;
797
- END IF;
798
- END $rb$;
799
-
800
- DO $rb$ BEGIN
801
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'logos_media_id_fkey' AND conrelid = 'public.logos'::regclass) THEN
802
- ALTER TABLE ONLY public.logos
803
- ADD CONSTRAINT logos_media_id_fkey FOREIGN KEY (media_id) REFERENCES public.media(id) ON DELETE SET NULL;
804
- END IF;
805
- END $rb$;
806
-
807
- DO $rb$ BEGIN
808
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'media_uploader_id_fkey' AND conrelid = 'public.media'::regclass) THEN
809
- ALTER TABLE ONLY public.media
810
- ADD CONSTRAINT media_uploader_id_fkey FOREIGN KEY (uploader_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
811
- END IF;
812
- END $rb$;
813
-
814
- DO $rb$ BEGIN
815
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'navigation_items_language_id_fkey' AND conrelid = 'public.navigation_items'::regclass) THEN
816
- ALTER TABLE ONLY public.navigation_items
817
- ADD CONSTRAINT navigation_items_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.languages(id) ON DELETE CASCADE;
818
- END IF;
819
- END $rb$;
820
-
821
- DO $rb$ BEGIN
822
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'navigation_items_page_id_fkey' AND conrelid = 'public.navigation_items'::regclass) THEN
823
- ALTER TABLE ONLY public.navigation_items
824
- ADD CONSTRAINT navigation_items_page_id_fkey FOREIGN KEY (page_id) REFERENCES public.pages(id) ON DELETE SET NULL;
825
- END IF;
826
- END $rb$;
827
-
828
- DO $rb$ BEGIN
829
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'navigation_items_parent_id_fkey' AND conrelid = 'public.navigation_items'::regclass) THEN
830
- ALTER TABLE ONLY public.navigation_items
831
- ADD CONSTRAINT navigation_items_parent_id_fkey FOREIGN KEY (parent_id) REFERENCES public.navigation_items(id) ON DELETE CASCADE;
832
- END IF;
833
- END $rb$;
834
-
835
- DO $rb$ BEGIN
836
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'order_items_order_id_fkey' AND conrelid = 'public.order_items'::regclass) THEN
837
- ALTER TABLE ONLY public.order_items
838
- ADD CONSTRAINT order_items_order_id_fkey FOREIGN KEY (order_id) REFERENCES public.orders(id) ON DELETE CASCADE;
839
- END IF;
840
- END $rb$;
841
-
842
- DO $rb$ BEGIN
843
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'order_items_product_id_fkey' AND conrelid = 'public.order_items'::regclass) THEN
844
- ALTER TABLE ONLY public.order_items
845
- ADD CONSTRAINT order_items_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE SET NULL;
846
- END IF;
847
- END $rb$;
848
-
849
- DO $rb$ BEGIN
850
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'order_items_variant_id_fkey' AND conrelid = 'public.order_items'::regclass) THEN
851
- ALTER TABLE ONLY public.order_items
852
- ADD CONSTRAINT order_items_variant_id_fkey FOREIGN KEY (variant_id) REFERENCES public.product_variants(id) ON DELETE SET NULL;
853
- END IF;
854
- END $rb$;
855
-
856
- DO $rb$ BEGIN
857
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'orders_coupon_id_fkey' AND conrelid = 'public.orders'::regclass) THEN
858
- ALTER TABLE ONLY public.orders
859
- ADD CONSTRAINT orders_coupon_id_fkey FOREIGN KEY (coupon_id) REFERENCES public.coupons(id) ON DELETE SET NULL;
860
- END IF;
861
- END $rb$;
862
-
863
- DO $rb$ BEGIN
864
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'orders_user_id_fkey' AND conrelid = 'public.orders'::regclass) THEN
865
- ALTER TABLE ONLY public.orders
866
- ADD CONSTRAINT orders_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE SET NULL;
867
- END IF;
868
- END $rb$;
869
-
870
- DO $rb$ BEGIN
871
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'page_revisions_author_id_fkey' AND conrelid = 'public.page_revisions'::regclass) THEN
872
- ALTER TABLE ONLY public.page_revisions
873
- ADD CONSTRAINT page_revisions_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
874
- END IF;
875
- END $rb$;
876
-
877
- DO $rb$ BEGIN
878
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'page_revisions_page_id_fkey' AND conrelid = 'public.page_revisions'::regclass) THEN
879
- ALTER TABLE ONLY public.page_revisions
880
- ADD CONSTRAINT page_revisions_page_id_fkey FOREIGN KEY (page_id) REFERENCES public.pages(id) ON DELETE CASCADE;
881
- END IF;
882
- END $rb$;
883
-
884
- DO $rb$ BEGIN
885
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'pages_author_id_fkey' AND conrelid = 'public.pages'::regclass) THEN
886
- ALTER TABLE ONLY public.pages
887
- ADD CONSTRAINT pages_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
888
- END IF;
889
- END $rb$;
890
-
891
- DO $rb$ BEGIN
892
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'pages_feature_image_id_fkey' AND conrelid = 'public.pages'::regclass) THEN
893
- ALTER TABLE ONLY public.pages
894
- ADD CONSTRAINT pages_feature_image_id_fkey FOREIGN KEY (feature_image_id) REFERENCES public.media(id) ON DELETE SET NULL;
895
- END IF;
896
- END $rb$;
897
-
898
- DO $rb$ BEGIN
899
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'pages_language_id_fkey' AND conrelid = 'public.pages'::regclass) THEN
900
- ALTER TABLE ONLY public.pages
901
- ADD CONSTRAINT pages_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.languages(id) ON DELETE CASCADE;
902
- END IF;
903
- END $rb$;
904
-
905
- DO $rb$ BEGIN
906
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'post_revisions_author_id_fkey' AND conrelid = 'public.post_revisions'::regclass) THEN
907
- ALTER TABLE ONLY public.post_revisions
908
- ADD CONSTRAINT post_revisions_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
909
- END IF;
910
- END $rb$;
911
-
912
- DO $rb$ BEGIN
913
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'post_revisions_post_id_fkey' AND conrelid = 'public.post_revisions'::regclass) THEN
914
- ALTER TABLE ONLY public.post_revisions
915
- ADD CONSTRAINT post_revisions_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.posts(id) ON DELETE CASCADE;
916
- END IF;
917
- END $rb$;
918
-
919
- DO $rb$ BEGIN
920
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'posts_author_id_fkey' AND conrelid = 'public.posts'::regclass) THEN
921
- ALTER TABLE ONLY public.posts
922
- ADD CONSTRAINT posts_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
923
- END IF;
924
- END $rb$;
925
-
926
- DO $rb$ BEGIN
927
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'posts_feature_image_id_fkey' AND conrelid = 'public.posts'::regclass) THEN
928
- ALTER TABLE ONLY public.posts
929
- ADD CONSTRAINT posts_feature_image_id_fkey FOREIGN KEY (feature_image_id) REFERENCES public.media(id) ON DELETE SET NULL;
930
- END IF;
931
- END $rb$;
932
-
933
- DO $rb$ BEGIN
934
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'posts_language_id_fkey' AND conrelid = 'public.posts'::regclass) THEN
935
- ALTER TABLE ONLY public.posts
936
- ADD CONSTRAINT posts_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.languages(id) ON DELETE CASCADE;
937
- END IF;
938
- END $rb$;
939
-
940
- DO $rb$ BEGIN
941
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_attribute_terms_attribute_id_fkey' AND conrelid = 'public.product_attribute_terms'::regclass) THEN
942
- ALTER TABLE ONLY public.product_attribute_terms
943
- ADD CONSTRAINT product_attribute_terms_attribute_id_fkey FOREIGN KEY (attribute_id) REFERENCES public.product_attributes(id) ON DELETE CASCADE;
944
- END IF;
945
- END $rb$;
946
-
947
- DO $rb$ BEGIN
948
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_categories_category_id_fkey' AND conrelid = 'public.product_categories'::regclass) THEN
949
- ALTER TABLE ONLY public.product_categories
950
- ADD CONSTRAINT product_categories_category_id_fkey FOREIGN KEY (category_id) REFERENCES public.categories(id) ON DELETE CASCADE;
951
- END IF;
952
- END $rb$;
953
-
954
- DO $rb$ BEGIN
955
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_categories_product_id_fkey' AND conrelid = 'public.product_categories'::regclass) THEN
956
- ALTER TABLE ONLY public.product_categories
957
- ADD CONSTRAINT product_categories_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
958
- END IF;
959
- END $rb$;
960
-
961
- DO $rb$ BEGIN
962
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_drafts_author_id_fkey' AND conrelid = 'public.product_drafts'::regclass) THEN
963
- ALTER TABLE ONLY public.product_drafts
964
- ADD CONSTRAINT product_drafts_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
965
- END IF;
966
- END $rb$;
967
-
968
- DO $rb$ BEGIN
969
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_drafts_product_id_fkey' AND conrelid = 'public.product_drafts'::regclass) THEN
970
- ALTER TABLE ONLY public.product_drafts
971
- ADD CONSTRAINT product_drafts_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
972
- END IF;
973
- END $rb$;
974
-
975
- DO $rb$ BEGIN
976
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_freemius_sale_coupons_product_id_fkey' AND conrelid = 'public.product_freemius_sale_coupons'::regclass) THEN
977
- ALTER TABLE ONLY public.product_freemius_sale_coupons
978
- ADD CONSTRAINT product_freemius_sale_coupons_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
979
- END IF;
980
- END $rb$;
981
-
982
- DO $rb$ BEGIN
983
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_media_media_id_fkey' AND conrelid = 'public.product_media'::regclass) THEN
984
- ALTER TABLE ONLY public.product_media
985
- ADD CONSTRAINT product_media_media_id_fkey FOREIGN KEY (media_id) REFERENCES public.media(id) ON DELETE CASCADE;
986
- END IF;
987
- END $rb$;
988
-
989
- DO $rb$ BEGIN
990
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_media_product_id_fkey' AND conrelid = 'public.product_media'::regclass) THEN
991
- ALTER TABLE ONLY public.product_media
992
- ADD CONSTRAINT product_media_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
993
- END IF;
994
- END $rb$;
995
-
996
- DO $rb$ BEGIN
997
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_variants_main_media_id_fkey' AND conrelid = 'public.product_variants'::regclass) THEN
998
- ALTER TABLE ONLY public.product_variants
999
- ADD CONSTRAINT product_variants_main_media_id_fkey FOREIGN KEY (main_media_id) REFERENCES public.media(id) ON DELETE SET NULL;
1000
- END IF;
1001
- END $rb$;
1002
-
1003
- DO $rb$ BEGIN
1004
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_variants_product_id_fkey' AND conrelid = 'public.product_variants'::regclass) THEN
1005
- ALTER TABLE ONLY public.product_variants
1006
- ADD CONSTRAINT product_variants_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
1007
- END IF;
1008
- END $rb$;
1009
-
1010
- DO $rb$ BEGIN
1011
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'products_language_id_fkey' AND conrelid = 'public.products'::regclass) THEN
1012
- ALTER TABLE ONLY public.products
1013
- ADD CONSTRAINT products_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.languages(id) ON DELETE CASCADE;
1014
- END IF;
1015
- END $rb$;
1016
-
1017
- DO $rb$ BEGIN
1018
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'profiles_id_fkey' AND conrelid = 'public.profiles'::regclass) THEN
1019
- ALTER TABLE ONLY public.profiles
1020
- ADD CONSTRAINT profiles_id_fkey FOREIGN KEY (id) REFERENCES auth.users(id) ON DELETE CASCADE;
1021
- END IF;
1022
- END $rb$;
1023
-
1024
- DO $rb$ BEGIN
1025
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'shipping_zone_locations_zone_id_fkey' AND conrelid = 'public.shipping_zone_locations'::regclass) THEN
1026
- ALTER TABLE ONLY public.shipping_zone_locations
1027
- ADD CONSTRAINT shipping_zone_locations_zone_id_fkey FOREIGN KEY (zone_id) REFERENCES public.shipping_zones(id) ON DELETE CASCADE;
1028
- END IF;
1029
- END $rb$;
1030
-
1031
- DO $rb$ BEGIN
1032
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'shipping_zone_methods_zone_id_fkey' AND conrelid = 'public.shipping_zone_methods'::regclass) THEN
1033
- ALTER TABLE ONLY public.shipping_zone_methods
1034
- ADD CONSTRAINT shipping_zone_methods_zone_id_fkey FOREIGN KEY (zone_id) REFERENCES public.shipping_zones(id) ON DELETE CASCADE;
1035
- END IF;
1036
- END $rb$;
1037
-
1038
- DO $rb$ BEGIN
1039
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_addresses_user_id_fkey' AND conrelid = 'public.user_addresses'::regclass) THEN
1040
- ALTER TABLE ONLY public.user_addresses
1041
- ADD CONSTRAINT user_addresses_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id) ON DELETE CASCADE;
1042
- END IF;
1043
- END $rb$;
1044
-
1045
- DO $rb$ BEGIN
1046
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_security_settings_user_id_fkey' AND conrelid = 'public.user_security_settings'::regclass) THEN
1047
- ALTER TABLE ONLY public.user_security_settings
1048
- ADD CONSTRAINT user_security_settings_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
1049
- END IF;
1050
- END $rb$;
1051
-
1052
- DO $rb$ BEGIN
1053
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_trusted_devices_user_id_fkey' AND conrelid = 'public.user_trusted_devices'::regclass) THEN
1054
- ALTER TABLE ONLY public.user_trusted_devices
1055
- ADD CONSTRAINT user_trusted_devices_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
1056
- END IF;
1057
- END $rb$;
1058
-
1059
- DO $rb$ BEGIN
1060
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'variant_attribute_mapping_attribute_term_id_fkey' AND conrelid = 'public.variant_attribute_mapping'::regclass) THEN
1061
- ALTER TABLE ONLY public.variant_attribute_mapping
1062
- ADD CONSTRAINT variant_attribute_mapping_attribute_term_id_fkey FOREIGN KEY (attribute_term_id) REFERENCES public.product_attribute_terms(id) ON DELETE CASCADE;
1063
- END IF;
1064
- END $rb$;
1065
-
1066
- DO $rb$ BEGIN
1067
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'variant_attribute_mapping_variant_id_fkey' AND conrelid = 'public.variant_attribute_mapping'::regclass) THEN
1068
- ALTER TABLE ONLY public.variant_attribute_mapping
1069
- ADD CONSTRAINT variant_attribute_mapping_variant_id_fkey FOREIGN KEY (variant_id) REFERENCES public.product_variants(id) ON DELETE CASCADE;
1070
- END IF;
1071
- END $rb$;
1
+ -- AUTO-GENERATED baseline: squash generation 2 (of migrations 00000000000000..00000000000042).
2
+ -- 002 · constraints (PK / unique / check / FK) + indexes
3
+ -- Idempotent; safe to replay. Regenerate via tools/scripts/rebaseline-transform.mjs do not hand-edit.
4
+ -- Naming: GGNNN_name.sql (GG = squash generation, NNN = sequence). See docs/04-DATABASE-AND-AUTH.md.
5
+
6
+ DO $rb$ BEGIN
7
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'blocks_pkey' AND conrelid = 'public.blocks'::regclass) THEN
8
+ ALTER TABLE ONLY public.blocks
9
+ ADD CONSTRAINT blocks_pkey PRIMARY KEY (id);
10
+ END IF;
11
+ END $rb$;
12
+
13
+ DO $rb$ BEGIN
14
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'categories_pkey' AND conrelid = 'public.categories'::regclass) THEN
15
+ ALTER TABLE ONLY public.categories
16
+ ADD CONSTRAINT categories_pkey PRIMARY KEY (id);
17
+ END IF;
18
+ END $rb$;
19
+
20
+ DO $rb$ BEGIN
21
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'categories_slug_key' AND conrelid = 'public.categories'::regclass) THEN
22
+ ALTER TABLE ONLY public.categories
23
+ ADD CONSTRAINT categories_slug_key UNIQUE (slug);
24
+ END IF;
25
+ END $rb$;
26
+
27
+ DO $rb$ BEGIN
28
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_interactions_pkey' AND conrelid = 'public.cms_interactions'::regclass) THEN
29
+ ALTER TABLE ONLY public.cms_interactions
30
+ ADD CONSTRAINT cms_interactions_pkey PRIMARY KEY (id);
31
+ END IF;
32
+ END $rb$;
33
+
34
+ DO $rb$ BEGIN
35
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_redirects_pkey' AND conrelid = 'public.cms_redirects'::regclass) THEN
36
+ ALTER TABLE ONLY public.cms_redirects
37
+ ADD CONSTRAINT cms_redirects_pkey PRIMARY KEY (id);
38
+ END IF;
39
+ END $rb$;
40
+
41
+ DO $rb$ BEGIN
42
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_redirects_source_path_key' AND conrelid = 'public.cms_redirects'::regclass) THEN
43
+ ALTER TABLE ONLY public.cms_redirects
44
+ ADD CONSTRAINT cms_redirects_source_path_key UNIQUE (source_path);
45
+ END IF;
46
+ END $rb$;
47
+
48
+ DO $rb$ BEGIN
49
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'content_drafts_parent_unique' AND conrelid = 'public.content_drafts'::regclass) THEN
50
+ ALTER TABLE ONLY public.content_drafts
51
+ ADD CONSTRAINT content_drafts_parent_unique UNIQUE (parent_type, parent_id);
52
+ END IF;
53
+ END $rb$;
54
+
55
+ DO $rb$ BEGIN
56
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'content_drafts_pkey' AND conrelid = 'public.content_drafts'::regclass) THEN
57
+ ALTER TABLE ONLY public.content_drafts
58
+ ADD CONSTRAINT content_drafts_pkey PRIMARY KEY (id);
59
+ END IF;
60
+ END $rb$;
61
+
62
+ DO $rb$ BEGIN
63
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cortex_ai_db_mutation_audit_pkey' AND conrelid = 'public.cortex_ai_db_mutation_audit'::regclass) THEN
64
+ ALTER TABLE ONLY public.cortex_ai_db_mutation_audit
65
+ ADD CONSTRAINT cortex_ai_db_mutation_audit_pkey PRIMARY KEY (id);
66
+ END IF;
67
+ END $rb$;
68
+
69
+ DO $rb$ BEGIN
70
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_freemius_mappings_pkey' AND conrelid = 'public.coupon_freemius_mappings'::regclass) THEN
71
+ ALTER TABLE ONLY public.coupon_freemius_mappings
72
+ ADD CONSTRAINT coupon_freemius_mappings_pkey PRIMARY KEY (id);
73
+ END IF;
74
+ END $rb$;
75
+
76
+ DO $rb$ BEGIN
77
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_products_pkey' AND conrelid = 'public.coupon_products'::regclass) THEN
78
+ ALTER TABLE ONLY public.coupon_products
79
+ ADD CONSTRAINT coupon_products_pkey PRIMARY KEY (coupon_id, product_id);
80
+ END IF;
81
+ END $rb$;
82
+
83
+ DO $rb$ BEGIN
84
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_redemptions_pkey' AND conrelid = 'public.coupon_redemptions'::regclass) THEN
85
+ ALTER TABLE ONLY public.coupon_redemptions
86
+ ADD CONSTRAINT coupon_redemptions_pkey PRIMARY KEY (id);
87
+ END IF;
88
+ END $rb$;
89
+
90
+ DO $rb$ BEGIN
91
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupons_pkey' AND conrelid = 'public.coupons'::regclass) THEN
92
+ ALTER TABLE ONLY public.coupons
93
+ ADD CONSTRAINT coupons_pkey PRIMARY KEY (id);
94
+ END IF;
95
+ END $rb$;
96
+
97
+ DO $rb$ BEGIN
98
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'currencies_code_key' AND conrelid = 'public.currencies'::regclass) THEN
99
+ ALTER TABLE ONLY public.currencies
100
+ ADD CONSTRAINT currencies_code_key UNIQUE (code);
101
+ END IF;
102
+ END $rb$;
103
+
104
+ DO $rb$ BEGIN
105
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'currencies_pkey' AND conrelid = 'public.currencies'::regclass) THEN
106
+ ALTER TABLE ONLY public.currencies
107
+ ADD CONSTRAINT currencies_pkey PRIMARY KEY (id);
108
+ END IF;
109
+ END $rb$;
110
+
111
+ DO $rb$ BEGIN
112
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'custom_block_definitions_pkey' AND conrelid = 'public.custom_block_definitions'::regclass) THEN
113
+ ALTER TABLE ONLY public.custom_block_definitions
114
+ ADD CONSTRAINT custom_block_definitions_pkey PRIMARY KEY (id);
115
+ END IF;
116
+ END $rb$;
117
+
118
+ DO $rb$ BEGIN
119
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'custom_block_definitions_slug_key' AND conrelid = 'public.custom_block_definitions'::regclass) THEN
120
+ ALTER TABLE ONLY public.custom_block_definitions
121
+ ADD CONSTRAINT custom_block_definitions_slug_key UNIQUE (slug);
122
+ END IF;
123
+ END $rb$;
124
+
125
+ DO $rb$ BEGIN
126
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'email_2fa_challenges_pkey' AND conrelid = 'public.email_2fa_challenges'::regclass) THEN
127
+ ALTER TABLE ONLY public.email_2fa_challenges
128
+ ADD CONSTRAINT email_2fa_challenges_pkey PRIMARY KEY (id);
129
+ END IF;
130
+ END $rb$;
131
+
132
+ DO $rb$ BEGIN
133
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'form_endpoints_pkey' AND conrelid = 'public.form_endpoints'::regclass) THEN
134
+ ALTER TABLE ONLY public.form_endpoints
135
+ ADD CONSTRAINT form_endpoints_pkey PRIMARY KEY (form_key);
136
+ END IF;
137
+ END $rb$;
138
+
139
+ DO $rb$ BEGIN
140
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'freemius_plans_pkey' AND conrelid = 'public.freemius_plans'::regclass) THEN
141
+ ALTER TABLE ONLY public.freemius_plans
142
+ ADD CONSTRAINT freemius_plans_pkey PRIMARY KEY (id);
143
+ END IF;
144
+ END $rb$;
145
+
146
+ DO $rb$ BEGIN
147
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'freemius_pricing_pkey' AND conrelid = 'public.freemius_pricing'::regclass) THEN
148
+ ALTER TABLE ONLY public.freemius_pricing
149
+ ADD CONSTRAINT freemius_pricing_pkey PRIMARY KEY (id);
150
+ END IF;
151
+ END $rb$;
152
+
153
+ DO $rb$ BEGIN
154
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'inventory_items_pkey' AND conrelid = 'public.inventory_items'::regclass) THEN
155
+ ALTER TABLE ONLY public.inventory_items
156
+ ADD CONSTRAINT inventory_items_pkey PRIMARY KEY (sku);
157
+ END IF;
158
+ END $rb$;
159
+
160
+ DO $rb$ BEGIN
161
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'languages_code_key' AND conrelid = 'public.languages'::regclass) THEN
162
+ ALTER TABLE ONLY public.languages
163
+ ADD CONSTRAINT languages_code_key UNIQUE (code);
164
+ END IF;
165
+ END $rb$;
166
+
167
+ DO $rb$ BEGIN
168
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'languages_pkey' AND conrelid = 'public.languages'::regclass) THEN
169
+ ALTER TABLE ONLY public.languages
170
+ ADD CONSTRAINT languages_pkey PRIMARY KEY (id);
171
+ END IF;
172
+ END $rb$;
173
+
174
+ DO $rb$ BEGIN
175
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'logos_pkey' AND conrelid = 'public.logos'::regclass) THEN
176
+ ALTER TABLE ONLY public.logos
177
+ ADD CONSTRAINT logos_pkey PRIMARY KEY (id);
178
+ END IF;
179
+ END $rb$;
180
+
181
+ DO $rb$ BEGIN
182
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'mcp_access_tokens_pkey' AND conrelid = 'public.mcp_access_tokens'::regclass) THEN
183
+ ALTER TABLE ONLY public.mcp_access_tokens
184
+ ADD CONSTRAINT mcp_access_tokens_pkey PRIMARY KEY (id);
185
+ END IF;
186
+ END $rb$;
187
+
188
+ DO $rb$ BEGIN
189
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'mcp_access_tokens_token_hash_key' AND conrelid = 'public.mcp_access_tokens'::regclass) THEN
190
+ ALTER TABLE ONLY public.mcp_access_tokens
191
+ ADD CONSTRAINT mcp_access_tokens_token_hash_key UNIQUE (token_hash);
192
+ END IF;
193
+ END $rb$;
194
+
195
+ DO $rb$ BEGIN
196
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'media_object_key_key' AND conrelid = 'public.media'::regclass) THEN
197
+ ALTER TABLE ONLY public.media
198
+ ADD CONSTRAINT media_object_key_key UNIQUE (object_key);
199
+ END IF;
200
+ END $rb$;
201
+
202
+ DO $rb$ BEGIN
203
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'media_pkey' AND conrelid = 'public.media'::regclass) THEN
204
+ ALTER TABLE ONLY public.media
205
+ ADD CONSTRAINT media_pkey PRIMARY KEY (id);
206
+ END IF;
207
+ END $rb$;
208
+
209
+ DO $rb$ BEGIN
210
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'message_threads_pkey' AND conrelid = 'public.message_threads'::regclass) THEN
211
+ ALTER TABLE ONLY public.message_threads
212
+ ADD CONSTRAINT message_threads_pkey PRIMARY KEY (id);
213
+ END IF;
214
+ END $rb$;
215
+
216
+ DO $rb$ BEGIN
217
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'message_threads_token_hash_key' AND conrelid = 'public.message_threads'::regclass) THEN
218
+ ALTER TABLE ONLY public.message_threads
219
+ ADD CONSTRAINT message_threads_token_hash_key UNIQUE (token_hash);
220
+ END IF;
221
+ END $rb$;
222
+
223
+ DO $rb$ BEGIN
224
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'navigation_items_pkey' AND conrelid = 'public.navigation_items'::regclass) THEN
225
+ ALTER TABLE ONLY public.navigation_items
226
+ ADD CONSTRAINT navigation_items_pkey PRIMARY KEY (id);
227
+ END IF;
228
+ END $rb$;
229
+
230
+ DO $rb$ BEGIN
231
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'order_items_pkey' AND conrelid = 'public.order_items'::regclass) THEN
232
+ ALTER TABLE ONLY public.order_items
233
+ ADD CONSTRAINT order_items_pkey PRIMARY KEY (id);
234
+ END IF;
235
+ END $rb$;
236
+
237
+ DO $rb$ BEGIN
238
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'orders_pkey' AND conrelid = 'public.orders'::regclass) THEN
239
+ ALTER TABLE ONLY public.orders
240
+ ADD CONSTRAINT orders_pkey PRIMARY KEY (id);
241
+ END IF;
242
+ END $rb$;
243
+
244
+ DO $rb$ BEGIN
245
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'orders_stripe_session_id_key' AND conrelid = 'public.orders'::regclass) THEN
246
+ ALTER TABLE ONLY public.orders
247
+ ADD CONSTRAINT orders_stripe_session_id_key UNIQUE (stripe_session_id);
248
+ END IF;
249
+ END $rb$;
250
+
251
+ DO $rb$ BEGIN
252
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'package_activations_license_key_package_id_key' AND conrelid = 'public.package_activations'::regclass) THEN
253
+ ALTER TABLE ONLY public.package_activations
254
+ ADD CONSTRAINT package_activations_license_key_package_id_key UNIQUE (license_key, package_id);
255
+ END IF;
256
+ END $rb$;
257
+
258
+ DO $rb$ BEGIN
259
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'package_activations_pkey' AND conrelid = 'public.package_activations'::regclass) THEN
260
+ ALTER TABLE ONLY public.package_activations
261
+ ADD CONSTRAINT package_activations_pkey PRIMARY KEY (id);
262
+ END IF;
263
+ END $rb$;
264
+
265
+ DO $rb$ BEGIN
266
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'page_revisions_page_version_key' AND conrelid = 'public.page_revisions'::regclass) THEN
267
+ ALTER TABLE ONLY public.page_revisions
268
+ ADD CONSTRAINT page_revisions_page_version_key UNIQUE (page_id, version);
269
+ END IF;
270
+ END $rb$;
271
+
272
+ DO $rb$ BEGIN
273
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'page_revisions_pkey' AND conrelid = 'public.page_revisions'::regclass) THEN
274
+ ALTER TABLE ONLY public.page_revisions
275
+ ADD CONSTRAINT page_revisions_pkey PRIMARY KEY (id);
276
+ END IF;
277
+ END $rb$;
278
+
279
+ DO $rb$ BEGIN
280
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'pages_language_id_slug_key' AND conrelid = 'public.pages'::regclass) THEN
281
+ ALTER TABLE ONLY public.pages
282
+ ADD CONSTRAINT pages_language_id_slug_key UNIQUE (language_id, slug);
283
+ END IF;
284
+ END $rb$;
285
+
286
+ DO $rb$ BEGIN
287
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'pages_pkey' AND conrelid = 'public.pages'::regclass) THEN
288
+ ALTER TABLE ONLY public.pages
289
+ ADD CONSTRAINT pages_pkey PRIMARY KEY (id);
290
+ END IF;
291
+ END $rb$;
292
+
293
+ DO $rb$ BEGIN
294
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'post_revisions_pkey' AND conrelid = 'public.post_revisions'::regclass) THEN
295
+ ALTER TABLE ONLY public.post_revisions
296
+ ADD CONSTRAINT post_revisions_pkey PRIMARY KEY (id);
297
+ END IF;
298
+ END $rb$;
299
+
300
+ DO $rb$ BEGIN
301
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'post_revisions_post_version_key' AND conrelid = 'public.post_revisions'::regclass) THEN
302
+ ALTER TABLE ONLY public.post_revisions
303
+ ADD CONSTRAINT post_revisions_post_version_key UNIQUE (post_id, version);
304
+ END IF;
305
+ END $rb$;
306
+
307
+ DO $rb$ BEGIN
308
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'posts_language_id_slug_key' AND conrelid = 'public.posts'::regclass) THEN
309
+ ALTER TABLE ONLY public.posts
310
+ ADD CONSTRAINT posts_language_id_slug_key UNIQUE (language_id, slug);
311
+ END IF;
312
+ END $rb$;
313
+
314
+ DO $rb$ BEGIN
315
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'posts_pkey' AND conrelid = 'public.posts'::regclass) THEN
316
+ ALTER TABLE ONLY public.posts
317
+ ADD CONSTRAINT posts_pkey PRIMARY KEY (id);
318
+ END IF;
319
+ END $rb$;
320
+
321
+ DO $rb$ BEGIN
322
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'privacy_consent_logs_consent_token_key' AND conrelid = 'public.privacy_consent_logs'::regclass) THEN
323
+ ALTER TABLE ONLY public.privacy_consent_logs
324
+ ADD CONSTRAINT privacy_consent_logs_consent_token_key UNIQUE (consent_token);
325
+ END IF;
326
+ END $rb$;
327
+
328
+ DO $rb$ BEGIN
329
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'privacy_consent_logs_pkey' AND conrelid = 'public.privacy_consent_logs'::regclass) THEN
330
+ ALTER TABLE ONLY public.privacy_consent_logs
331
+ ADD CONSTRAINT privacy_consent_logs_pkey PRIMARY KEY (id);
332
+ END IF;
333
+ END $rb$;
334
+
335
+ DO $rb$ BEGIN
336
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_attribute_terms_attribute_id_slug_key' AND conrelid = 'public.product_attribute_terms'::regclass) THEN
337
+ ALTER TABLE ONLY public.product_attribute_terms
338
+ ADD CONSTRAINT product_attribute_terms_attribute_id_slug_key UNIQUE (attribute_id, slug);
339
+ END IF;
340
+ END $rb$;
341
+
342
+ DO $rb$ BEGIN
343
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_attribute_terms_pkey' AND conrelid = 'public.product_attribute_terms'::regclass) THEN
344
+ ALTER TABLE ONLY public.product_attribute_terms
345
+ ADD CONSTRAINT product_attribute_terms_pkey PRIMARY KEY (id);
346
+ END IF;
347
+ END $rb$;
348
+
349
+ DO $rb$ BEGIN
350
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_attributes_pkey' AND conrelid = 'public.product_attributes'::regclass) THEN
351
+ ALTER TABLE ONLY public.product_attributes
352
+ ADD CONSTRAINT product_attributes_pkey PRIMARY KEY (id);
353
+ END IF;
354
+ END $rb$;
355
+
356
+ DO $rb$ BEGIN
357
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_attributes_slug_key' AND conrelid = 'public.product_attributes'::regclass) THEN
358
+ ALTER TABLE ONLY public.product_attributes
359
+ ADD CONSTRAINT product_attributes_slug_key UNIQUE (slug);
360
+ END IF;
361
+ END $rb$;
362
+
363
+ DO $rb$ BEGIN
364
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_categories_pkey' AND conrelid = 'public.product_categories'::regclass) THEN
365
+ ALTER TABLE ONLY public.product_categories
366
+ ADD CONSTRAINT product_categories_pkey PRIMARY KEY (product_id, category_id);
367
+ END IF;
368
+ END $rb$;
369
+
370
+ DO $rb$ BEGIN
371
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_drafts_pkey' AND conrelid = 'public.product_drafts'::regclass) THEN
372
+ ALTER TABLE ONLY public.product_drafts
373
+ ADD CONSTRAINT product_drafts_pkey PRIMARY KEY (id);
374
+ END IF;
375
+ END $rb$;
376
+
377
+ DO $rb$ BEGIN
378
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_drafts_product_unique' AND conrelid = 'public.product_drafts'::regclass) THEN
379
+ ALTER TABLE ONLY public.product_drafts
380
+ ADD CONSTRAINT product_drafts_product_unique UNIQUE (product_id);
381
+ END IF;
382
+ END $rb$;
383
+
384
+ DO $rb$ BEGIN
385
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_freemius_sale_coupons_pkey' AND conrelid = 'public.product_freemius_sale_coupons'::regclass) THEN
386
+ ALTER TABLE ONLY public.product_freemius_sale_coupons
387
+ ADD CONSTRAINT product_freemius_sale_coupons_pkey PRIMARY KEY (id);
388
+ END IF;
389
+ END $rb$;
390
+
391
+ DO $rb$ BEGIN
392
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_freemius_sale_coupons_product_unique' AND conrelid = 'public.product_freemius_sale_coupons'::regclass) THEN
393
+ ALTER TABLE ONLY public.product_freemius_sale_coupons
394
+ ADD CONSTRAINT product_freemius_sale_coupons_product_unique UNIQUE (product_id);
395
+ END IF;
396
+ END $rb$;
397
+
398
+ DO $rb$ BEGIN
399
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_inquiries_pkey' AND conrelid = 'public.product_inquiries'::regclass) THEN
400
+ ALTER TABLE ONLY public.product_inquiries
401
+ ADD CONSTRAINT product_inquiries_pkey PRIMARY KEY (id);
402
+ END IF;
403
+ END $rb$;
404
+
405
+ DO $rb$ BEGIN
406
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_media_pkey' AND conrelid = 'public.product_media'::regclass) THEN
407
+ ALTER TABLE ONLY public.product_media
408
+ ADD CONSTRAINT product_media_pkey PRIMARY KEY (product_id, media_id);
409
+ END IF;
410
+ END $rb$;
411
+
412
+ DO $rb$ BEGIN
413
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_revisions_pkey' AND conrelid = 'public.product_revisions'::regclass) THEN
414
+ ALTER TABLE ONLY public.product_revisions
415
+ ADD CONSTRAINT product_revisions_pkey PRIMARY KEY (id);
416
+ END IF;
417
+ END $rb$;
418
+
419
+ DO $rb$ BEGIN
420
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_revisions_product_version_key' AND conrelid = 'public.product_revisions'::regclass) THEN
421
+ ALTER TABLE ONLY public.product_revisions
422
+ ADD CONSTRAINT product_revisions_product_version_key UNIQUE (product_id, version);
423
+ END IF;
424
+ END $rb$;
425
+
426
+ DO $rb$ BEGIN
427
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_variants_pkey' AND conrelid = 'public.product_variants'::regclass) THEN
428
+ ALTER TABLE ONLY public.product_variants
429
+ ADD CONSTRAINT product_variants_pkey PRIMARY KEY (id);
430
+ END IF;
431
+ END $rb$;
432
+
433
+ DO $rb$ BEGIN
434
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_variants_product_id_sku_key' AND conrelid = 'public.product_variants'::regclass) THEN
435
+ ALTER TABLE ONLY public.product_variants
436
+ ADD CONSTRAINT product_variants_product_id_sku_key UNIQUE (product_id, sku);
437
+ END IF;
438
+ END $rb$;
439
+
440
+ DO $rb$ BEGIN
441
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'products_language_id_sku_key' AND conrelid = 'public.products'::regclass) THEN
442
+ ALTER TABLE ONLY public.products
443
+ ADD CONSTRAINT products_language_id_sku_key UNIQUE (language_id, sku);
444
+ END IF;
445
+ END $rb$;
446
+
447
+ DO $rb$ BEGIN
448
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'products_language_id_slug_key' AND conrelid = 'public.products'::regclass) THEN
449
+ ALTER TABLE ONLY public.products
450
+ ADD CONSTRAINT products_language_id_slug_key UNIQUE (language_id, slug);
451
+ END IF;
452
+ END $rb$;
453
+
454
+ DO $rb$ BEGIN
455
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'products_pkey' AND conrelid = 'public.products'::regclass) THEN
456
+ ALTER TABLE ONLY public.products
457
+ ADD CONSTRAINT products_pkey PRIMARY KEY (id);
458
+ END IF;
459
+ END $rb$;
460
+
461
+ DO $rb$ BEGIN
462
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'profiles_pkey' AND conrelid = 'public.profiles'::regclass) THEN
463
+ ALTER TABLE ONLY public.profiles
464
+ ADD CONSTRAINT profiles_pkey PRIMARY KEY (id);
465
+ END IF;
466
+ END $rb$;
467
+
468
+ DO $rb$ BEGIN
469
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'shipping_zone_locations_pkey' AND conrelid = 'public.shipping_zone_locations'::regclass) THEN
470
+ ALTER TABLE ONLY public.shipping_zone_locations
471
+ ADD CONSTRAINT shipping_zone_locations_pkey PRIMARY KEY (id);
472
+ END IF;
473
+ END $rb$;
474
+
475
+ DO $rb$ BEGIN
476
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'shipping_zone_methods_pkey' AND conrelid = 'public.shipping_zone_methods'::regclass) THEN
477
+ ALTER TABLE ONLY public.shipping_zone_methods
478
+ ADD CONSTRAINT shipping_zone_methods_pkey PRIMARY KEY (id);
479
+ END IF;
480
+ END $rb$;
481
+
482
+ DO $rb$ BEGIN
483
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'shipping_zones_pkey' AND conrelid = 'public.shipping_zones'::regclass) THEN
484
+ ALTER TABLE ONLY public.shipping_zones
485
+ ADD CONSTRAINT shipping_zones_pkey PRIMARY KEY (id);
486
+ END IF;
487
+ END $rb$;
488
+
489
+ DO $rb$ BEGIN
490
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'site_script_revisions_pkey' AND conrelid = 'public.site_script_revisions'::regclass) THEN
491
+ ALTER TABLE ONLY public.site_script_revisions
492
+ ADD CONSTRAINT site_script_revisions_pkey PRIMARY KEY (id);
493
+ END IF;
494
+ END $rb$;
495
+
496
+ DO $rb$ BEGIN
497
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'site_scripts_pkey' AND conrelid = 'public.site_scripts'::regclass) THEN
498
+ ALTER TABLE ONLY public.site_scripts
499
+ ADD CONSTRAINT site_scripts_pkey PRIMARY KEY (id);
500
+ END IF;
501
+ END $rb$;
502
+
503
+ DO $rb$ BEGIN
504
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'site_settings_pkey' AND conrelid = 'public.site_settings'::regclass) THEN
505
+ ALTER TABLE ONLY public.site_settings
506
+ ADD CONSTRAINT site_settings_pkey PRIMARY KEY (key);
507
+ END IF;
508
+ END $rb$;
509
+
510
+ DO $rb$ BEGIN
511
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'site_themes_pkey' AND conrelid = 'public.site_themes'::regclass) THEN
512
+ ALTER TABLE ONLY public.site_themes
513
+ ADD CONSTRAINT site_themes_pkey PRIMARY KEY (id);
514
+ END IF;
515
+ END $rb$;
516
+
517
+ DO $rb$ BEGIN
518
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'site_themes_slug_key' AND conrelid = 'public.site_themes'::regclass) THEN
519
+ ALTER TABLE ONLY public.site_themes
520
+ ADD CONSTRAINT site_themes_slug_key UNIQUE (slug);
521
+ END IF;
522
+ END $rb$;
523
+
524
+ DO $rb$ BEGIN
525
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'system_alerts_pkey' AND conrelid = 'public.system_alerts'::regclass) THEN
526
+ ALTER TABLE ONLY public.system_alerts
527
+ ADD CONSTRAINT system_alerts_pkey PRIMARY KEY (id);
528
+ END IF;
529
+ END $rb$;
530
+
531
+ DO $rb$ BEGIN
532
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'system_configuration_pkey' AND conrelid = 'public.system_configuration'::regclass) THEN
533
+ ALTER TABLE ONLY public.system_configuration
534
+ ADD CONSTRAINT system_configuration_pkey PRIMARY KEY (id);
535
+ END IF;
536
+ END $rb$;
537
+
538
+ DO $rb$ BEGIN
539
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'tax_rates_pkey' AND conrelid = 'public.tax_rates'::regclass) THEN
540
+ ALTER TABLE ONLY public.tax_rates
541
+ ADD CONSTRAINT tax_rates_pkey PRIMARY KEY (id);
542
+ END IF;
543
+ END $rb$;
544
+
545
+ DO $rb$ BEGIN
546
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'thread_messages_pkey' AND conrelid = 'public.thread_messages'::regclass) THEN
547
+ ALTER TABLE ONLY public.thread_messages
548
+ ADD CONSTRAINT thread_messages_pkey PRIMARY KEY (id);
549
+ END IF;
550
+ END $rb$;
551
+
552
+ DO $rb$ BEGIN
553
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'translations_pkey' AND conrelid = 'public.translations'::regclass) THEN
554
+ ALTER TABLE ONLY public.translations
555
+ ADD CONSTRAINT translations_pkey PRIMARY KEY (key);
556
+ END IF;
557
+ END $rb$;
558
+
559
+ DO $rb$ BEGIN
560
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'ucp_cart_sessions_pkey' AND conrelid = 'public.ucp_cart_sessions'::regclass) THEN
561
+ ALTER TABLE ONLY public.ucp_cart_sessions
562
+ ADD CONSTRAINT ucp_cart_sessions_pkey PRIMARY KEY (id);
563
+ END IF;
564
+ END $rb$;
565
+
566
+ DO $rb$ BEGIN
567
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_addresses_pkey' AND conrelid = 'public.user_addresses'::regclass) THEN
568
+ ALTER TABLE ONLY public.user_addresses
569
+ ADD CONSTRAINT user_addresses_pkey PRIMARY KEY (id);
570
+ END IF;
571
+ END $rb$;
572
+
573
+ DO $rb$ BEGIN
574
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_security_settings_pkey' AND conrelid = 'public.user_security_settings'::regclass) THEN
575
+ ALTER TABLE ONLY public.user_security_settings
576
+ ADD CONSTRAINT user_security_settings_pkey PRIMARY KEY (user_id);
577
+ END IF;
578
+ END $rb$;
579
+
580
+ DO $rb$ BEGIN
581
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_trusted_devices_device_hash_key' AND conrelid = 'public.user_trusted_devices'::regclass) THEN
582
+ ALTER TABLE ONLY public.user_trusted_devices
583
+ ADD CONSTRAINT user_trusted_devices_device_hash_key UNIQUE (device_hash);
584
+ END IF;
585
+ END $rb$;
586
+
587
+ DO $rb$ BEGIN
588
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_trusted_devices_pkey' AND conrelid = 'public.user_trusted_devices'::regclass) THEN
589
+ ALTER TABLE ONLY public.user_trusted_devices
590
+ ADD CONSTRAINT user_trusted_devices_pkey PRIMARY KEY (id);
591
+ END IF;
592
+ END $rb$;
593
+
594
+ DO $rb$ BEGIN
595
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'variant_attribute_mapping_pkey' AND conrelid = 'public.variant_attribute_mapping'::regclass) THEN
596
+ ALTER TABLE ONLY public.variant_attribute_mapping
597
+ ADD CONSTRAINT variant_attribute_mapping_pkey PRIMARY KEY (variant_id, attribute_term_id);
598
+ END IF;
599
+ END $rb$;
600
+
601
+ CREATE INDEX IF NOT EXISTS cms_interactions_inbox_idx ON public.cms_interactions USING btree (created_at DESC) WHERE (parent_id IS NULL);
602
+
603
+ CREATE INDEX IF NOT EXISTS cms_interactions_parent_idx ON public.cms_interactions USING btree (parent_id, created_at) WHERE (parent_id IS NOT NULL);
604
+
605
+ CREATE INDEX IF NOT EXISTS cms_interactions_post_type_status_idx ON public.cms_interactions USING btree (post_id, type, status, created_at DESC) WHERE (post_id IS NOT NULL);
606
+
607
+ CREATE INDEX IF NOT EXISTS cms_interactions_product_type_status_idx ON public.cms_interactions USING btree (product_id, type, status, created_at DESC) WHERE (product_id IS NOT NULL);
608
+
609
+ CREATE INDEX IF NOT EXISTS cms_redirects_active_source_idx ON public.cms_redirects USING btree (source_path) WHERE is_active;
610
+
611
+ CREATE INDEX IF NOT EXISTS content_drafts_author_id_idx ON public.content_drafts USING btree (author_id);
612
+
613
+ CREATE INDEX IF NOT EXISTS content_drafts_parent_idx ON public.content_drafts USING btree (parent_type, parent_id);
614
+
615
+ CREATE INDEX IF NOT EXISTS content_drafts_updated_at_idx ON public.content_drafts USING btree (updated_at DESC);
616
+
617
+ CREATE UNIQUE INDEX IF NOT EXISTS coupon_freemius_mappings_coupon_product_unique ON public.coupon_freemius_mappings USING btree (coupon_id, freemius_product_id);
618
+
619
+ CREATE UNIQUE INDEX IF NOT EXISTS coupon_redemptions_order_unique ON public.coupon_redemptions USING btree (order_id) WHERE (order_id IS NOT NULL);
620
+
621
+ CREATE UNIQUE INDEX IF NOT EXISTS coupons_code_unique ON public.coupons USING btree (upper(code));
622
+
623
+ CREATE UNIQUE INDEX IF NOT EXISTS ensure_single_default_language_idx ON public.languages USING btree (is_default) WHERE (is_default = true);
624
+
625
+ CREATE INDEX IF NOT EXISTS idx_blocks_language_id ON public.blocks USING btree (language_id);
626
+
627
+ CREATE INDEX IF NOT EXISTS idx_blocks_page_id ON public.blocks USING btree (page_id);
628
+
629
+ CREATE INDEX IF NOT EXISTS idx_blocks_post_id ON public.blocks USING btree (post_id);
630
+
631
+ CREATE INDEX IF NOT EXISTS idx_coupon_freemius_mappings_freemius_product_id ON public.coupon_freemius_mappings USING btree (freemius_product_id);
632
+
633
+ CREATE INDEX IF NOT EXISTS idx_coupon_freemius_mappings_product_id ON public.coupon_freemius_mappings USING btree (product_id) WHERE (product_id IS NOT NULL);
634
+
635
+ CREATE INDEX IF NOT EXISTS idx_coupon_products_product_id ON public.coupon_products USING btree (product_id);
636
+
637
+ CREATE INDEX IF NOT EXISTS idx_coupon_redemptions_coupon_id ON public.coupon_redemptions USING btree (coupon_id);
638
+
639
+ CREATE INDEX IF NOT EXISTS idx_coupon_redemptions_user_id ON public.coupon_redemptions USING btree (user_id) WHERE (user_id IS NOT NULL);
640
+
641
+ CREATE INDEX IF NOT EXISTS idx_coupons_active_dates ON public.coupons USING btree (is_active, starts_at, ends_at);
642
+
643
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_currencies_single_default ON public.currencies USING btree (is_default) WHERE (is_default = true);
644
+
645
+ CREATE INDEX IF NOT EXISTS idx_custom_block_definitions_is_original ON public.custom_block_definitions USING btree (is_original);
646
+
647
+ CREATE INDEX IF NOT EXISTS idx_email_2fa_challenges_expires_at ON public.email_2fa_challenges USING btree (expires_at);
648
+
649
+ CREATE INDEX IF NOT EXISTS idx_email_2fa_challenges_user_id ON public.email_2fa_challenges USING btree (user_id);
650
+
651
+ CREATE INDEX IF NOT EXISTS idx_freemius_plans_product_id ON public.freemius_plans USING btree (product_id);
652
+
653
+ CREATE INDEX IF NOT EXISTS idx_freemius_pricing_plan_id ON public.freemius_pricing USING btree (plan_id);
654
+
655
+ CREATE INDEX IF NOT EXISTS idx_inventory_items_updated_at ON public.inventory_items USING btree (updated_at DESC);
656
+
657
+ CREATE INDEX IF NOT EXISTS idx_logos_media_id ON public.logos USING btree (media_id);
658
+
659
+ CREATE INDEX IF NOT EXISTS idx_media_uploader_id ON public.media USING btree (uploader_id);
660
+
661
+ CREATE INDEX IF NOT EXISTS idx_navigation_items_language_id ON public.navigation_items USING btree (language_id);
662
+
663
+ CREATE INDEX IF NOT EXISTS idx_navigation_items_menu_lang_order ON public.navigation_items USING btree (menu_key, language_id, "order");
664
+
665
+ CREATE INDEX IF NOT EXISTS idx_navigation_items_page_id ON public.navigation_items USING btree (page_id);
666
+
667
+ CREATE INDEX IF NOT EXISTS idx_navigation_items_parent_id ON public.navigation_items USING btree (parent_id);
668
+
669
+ CREATE INDEX IF NOT EXISTS idx_order_items_order_id ON public.order_items USING btree (order_id);
670
+
671
+ CREATE INDEX IF NOT EXISTS idx_order_items_product_id ON public.order_items USING btree (product_id);
672
+
673
+ CREATE INDEX IF NOT EXISTS idx_order_items_variant_id ON public.order_items USING btree (variant_id);
674
+
675
+ CREATE INDEX IF NOT EXISTS idx_orders_coupon_id ON public.orders USING btree (coupon_id) WHERE (coupon_id IS NOT NULL);
676
+
677
+ CREATE INDEX IF NOT EXISTS idx_orders_freemius_license_id ON public.orders USING btree (freemius_license_id) WHERE (freemius_license_id IS NOT NULL);
678
+
679
+ CREATE INDEX IF NOT EXISTS idx_orders_freemius_subscription_id ON public.orders USING btree (freemius_subscription_id) WHERE (freemius_subscription_id IS NOT NULL);
680
+
681
+ CREATE INDEX IF NOT EXISTS idx_orders_freemius_trial_id ON public.orders USING btree (freemius_trial_id) WHERE (freemius_trial_id IS NOT NULL);
682
+
683
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_orders_invoice_number_unique ON public.orders USING btree (invoice_number) WHERE (invoice_number IS NOT NULL);
684
+
685
+ CREATE INDEX IF NOT EXISTS idx_orders_user_id ON public.orders USING btree (user_id);
686
+
687
+ CREATE INDEX IF NOT EXISTS idx_package_activations_license_key ON public.package_activations USING btree (license_key);
688
+
689
+ CREATE INDEX IF NOT EXISTS idx_package_activations_package_id ON public.package_activations USING btree (package_id);
690
+
691
+ CREATE INDEX IF NOT EXISTS idx_page_revisions_author_id ON public.page_revisions USING btree (author_id);
692
+
693
+ CREATE INDEX IF NOT EXISTS idx_page_revisions_page_id_version ON public.page_revisions USING btree (page_id, version);
694
+
695
+ CREATE INDEX IF NOT EXISTS idx_pages_author_id ON public.pages USING btree (author_id);
696
+
697
+ CREATE INDEX IF NOT EXISTS idx_pages_feature_image_id ON public.pages USING btree (feature_image_id);
698
+
699
+ CREATE INDEX IF NOT EXISTS idx_pages_translation_group_id ON public.pages USING btree (translation_group_id);
700
+
701
+ CREATE INDEX IF NOT EXISTS idx_post_revisions_author_id ON public.post_revisions USING btree (author_id);
702
+
703
+ CREATE INDEX IF NOT EXISTS idx_post_revisions_post_id_version ON public.post_revisions USING btree (post_id, version);
704
+
705
+ CREATE INDEX IF NOT EXISTS idx_posts_author_id ON public.posts USING btree (author_id);
706
+
707
+ CREATE INDEX IF NOT EXISTS idx_posts_feature_image_id ON public.posts USING btree (feature_image_id);
708
+
709
+ CREATE INDEX IF NOT EXISTS idx_posts_translation_group_id ON public.posts USING btree (translation_group_id);
710
+
711
+ CREATE INDEX IF NOT EXISTS idx_privacy_consent_logs_created_at ON public.privacy_consent_logs USING btree (created_at DESC);
712
+
713
+ CREATE INDEX IF NOT EXISTS idx_product_attribute_terms_attribute_id ON public.product_attribute_terms USING btree (attribute_id);
714
+
715
+ CREATE INDEX IF NOT EXISTS idx_product_categories_category_id ON public.product_categories USING btree (category_id);
716
+
717
+ CREATE INDEX IF NOT EXISTS idx_product_categories_product_id ON public.product_categories USING btree (product_id);
718
+
719
+ CREATE INDEX IF NOT EXISTS idx_product_freemius_sale_coupons_freemius_product_id ON public.product_freemius_sale_coupons USING btree (freemius_product_id);
720
+
721
+ CREATE INDEX IF NOT EXISTS idx_product_media_media_id ON public.product_media USING btree (media_id);
722
+
723
+ CREATE INDEX IF NOT EXISTS idx_product_media_product_id ON public.product_media USING btree (product_id);
724
+
725
+ CREATE INDEX IF NOT EXISTS idx_product_revisions_author_id ON public.product_revisions USING btree (author_id);
726
+
727
+ CREATE INDEX IF NOT EXISTS idx_product_revisions_product_id_version ON public.product_revisions USING btree (product_id, version);
728
+
729
+ CREATE INDEX IF NOT EXISTS idx_product_variants_main_media_id ON public.product_variants USING btree (main_media_id);
730
+
731
+ CREATE INDEX IF NOT EXISTS idx_product_variants_prices_gin ON public.product_variants USING gin (prices jsonb_path_ops);
732
+
733
+ CREATE INDEX IF NOT EXISTS idx_product_variants_product_id ON public.product_variants USING btree (product_id);
734
+
735
+ CREATE INDEX IF NOT EXISTS idx_products_prices_gin ON public.products USING gin (prices jsonb_path_ops);
736
+
737
+ CREATE INDEX IF NOT EXISTS idx_products_slug ON public.products USING btree (slug);
738
+
739
+ CREATE INDEX IF NOT EXISTS idx_products_translation_group_id ON public.products USING btree (translation_group_id);
740
+
741
+ CREATE INDEX IF NOT EXISTS idx_shipping_zone_locations_country_state_postal ON public.shipping_zone_locations USING btree (country_code, state_code, postal_code);
742
+
743
+ CREATE INDEX IF NOT EXISTS idx_shipping_zone_locations_zone_id ON public.shipping_zone_locations USING btree (zone_id);
744
+
745
+ CREATE INDEX IF NOT EXISTS idx_shipping_zone_methods_name_translations ON public.shipping_zone_methods USING gin (name_translations);
746
+
747
+ CREATE INDEX IF NOT EXISTS idx_shipping_zone_methods_zone_id ON public.shipping_zone_methods USING btree (zone_id);
748
+
749
+ CREATE INDEX IF NOT EXISTS idx_system_alerts_unresolved ON public.system_alerts USING btree (is_resolved, created_at DESC);
750
+
751
+ CREATE INDEX IF NOT EXISTS idx_tax_rates_country_state ON public.tax_rates USING btree (country_code, state_code);
752
+
753
+ CREATE INDEX IF NOT EXISTS idx_ucp_cart_sessions_created_at ON public.ucp_cart_sessions USING btree (created_at DESC);
754
+
755
+ CREATE INDEX IF NOT EXISTS idx_ucp_cart_sessions_status_expires_at ON public.ucp_cart_sessions USING btree (status, expires_at);
756
+
757
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_user_addresses_one_default_per_type ON public.user_addresses USING btree (user_id, address_type) WHERE (is_default = true);
758
+
759
+ CREATE INDEX IF NOT EXISTS idx_user_addresses_type ON public.user_addresses USING btree (address_type);
760
+
761
+ CREATE INDEX IF NOT EXISTS idx_user_addresses_user_id ON public.user_addresses USING btree (user_id);
762
+
763
+ CREATE INDEX IF NOT EXISTS idx_user_trusted_devices_expires_at ON public.user_trusted_devices USING btree (expires_at);
764
+
765
+ CREATE INDEX IF NOT EXISTS idx_user_trusted_devices_user_id ON public.user_trusted_devices USING btree (user_id);
766
+
767
+ CREATE INDEX IF NOT EXISTS idx_variant_attribute_mapping_attribute_term_id ON public.variant_attribute_mapping USING btree (attribute_term_id);
768
+
769
+ CREATE INDEX IF NOT EXISTS mcp_access_tokens_created_at_idx ON public.mcp_access_tokens USING btree (created_at DESC);
770
+
771
+ CREATE INDEX IF NOT EXISTS mcp_access_tokens_token_hash_idx ON public.mcp_access_tokens USING btree (token_hash);
772
+
773
+ CREATE INDEX IF NOT EXISTS media_folder_idx ON public.media USING btree (folder);
774
+
775
+ CREATE INDEX IF NOT EXISTS message_threads_last_message_idx ON public.message_threads USING btree (last_message_at DESC);
776
+
777
+ CREATE INDEX IF NOT EXISTS message_threads_source_last_idx ON public.message_threads USING btree (source, last_message_at DESC);
778
+
779
+ CREATE INDEX IF NOT EXISTS message_threads_subject_idx ON public.message_threads USING btree (subject_id) WHERE (subject_id IS NOT NULL);
780
+
781
+ CREATE INDEX IF NOT EXISTS message_threads_unread_idx ON public.message_threads USING btree (last_message_at DESC) WHERE (unread_for_admin = true);
782
+
783
+ CREATE INDEX IF NOT EXISTS pages_status_published_at_idx ON public.pages USING btree (status, published_at);
784
+
785
+ CREATE INDEX IF NOT EXISTS product_drafts_author_id_idx ON public.product_drafts USING btree (author_id);
786
+
787
+ CREATE INDEX IF NOT EXISTS product_drafts_product_id_idx ON public.product_drafts USING btree (product_id);
788
+
789
+ CREATE INDEX IF NOT EXISTS product_drafts_updated_at_idx ON public.product_drafts USING btree (updated_at DESC);
790
+
791
+ CREATE INDEX IF NOT EXISTS product_inquiries_created_idx ON public.product_inquiries USING btree (created_at DESC);
792
+
793
+ CREATE INDEX IF NOT EXISTS product_inquiries_ip_created_idx ON public.product_inquiries USING btree (ip_masked, created_at DESC);
794
+
795
+ CREATE INDEX IF NOT EXISTS product_inquiries_unresolved_idx ON public.product_inquiries USING btree (created_at DESC) WHERE (is_resolved = false);
796
+
797
+ CREATE INDEX IF NOT EXISTS product_variants_sale_window_idx ON public.product_variants USING btree (sale_start_at, sale_end_at) WHERE ((sale_start_at IS NOT NULL) OR (sale_end_at IS NOT NULL));
798
+
799
+ CREATE INDEX IF NOT EXISTS product_variants_scheduled_price_idx ON public.product_variants USING btree (scheduled_price_at) WHERE (scheduled_price_at IS NOT NULL);
800
+
801
+ CREATE INDEX IF NOT EXISTS products_sale_window_idx ON public.products USING btree (sale_start_at, sale_end_at) WHERE ((sale_start_at IS NOT NULL) OR (sale_end_at IS NOT NULL));
802
+
803
+ CREATE INDEX IF NOT EXISTS products_scheduled_price_idx ON public.products USING btree (scheduled_price_at) WHERE (scheduled_price_at IS NOT NULL);
804
+
805
+ CREATE INDEX IF NOT EXISTS products_status_published_at_idx ON public.products USING btree (status, published_at);
806
+
807
+ CREATE INDEX IF NOT EXISTS site_script_revisions_created_idx ON public.site_script_revisions USING btree (created_at DESC);
808
+
809
+ CREATE INDEX IF NOT EXISTS site_script_revisions_script_created_idx ON public.site_script_revisions USING btree (script_id, created_at DESC);
810
+
811
+ CREATE INDEX IF NOT EXISTS site_scripts_active_placement_sort_idx ON public.site_scripts USING btree (is_active, placement, sort_order);
812
+
813
+ CREATE INDEX IF NOT EXISTS site_themes_active_sort_idx ON public.site_themes USING btree (is_active, sort_order);
814
+
815
+ CREATE UNIQUE INDEX IF NOT EXISTS site_themes_single_default_idx ON public.site_themes USING btree (is_default) WHERE (is_default = true);
816
+
817
+ CREATE UNIQUE INDEX IF NOT EXISTS tax_rates_country_state_name_key ON public.tax_rates USING btree (country_code, COALESCE(state_code, ''::text), lower(tax_name));
818
+
819
+ CREATE INDEX IF NOT EXISTS thread_messages_ip_created_idx ON public.thread_messages USING btree (ip_masked, created_at DESC);
820
+
821
+ CREATE INDEX IF NOT EXISTS thread_messages_thread_created_idx ON public.thread_messages USING btree (thread_id, created_at);
822
+
823
+ DO $rb$ BEGIN
824
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'blocks_language_id_fkey' AND conrelid = 'public.blocks'::regclass) THEN
825
+ ALTER TABLE ONLY public.blocks
826
+ ADD CONSTRAINT blocks_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.languages(id) ON DELETE CASCADE;
827
+ END IF;
828
+ END $rb$;
829
+
830
+ DO $rb$ BEGIN
831
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'blocks_page_id_fkey' AND conrelid = 'public.blocks'::regclass) THEN
832
+ ALTER TABLE ONLY public.blocks
833
+ ADD CONSTRAINT blocks_page_id_fkey FOREIGN KEY (page_id) REFERENCES public.pages(id) ON DELETE CASCADE;
834
+ END IF;
835
+ END $rb$;
836
+
837
+ DO $rb$ BEGIN
838
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'blocks_post_id_fkey' AND conrelid = 'public.blocks'::regclass) THEN
839
+ ALTER TABLE ONLY public.blocks
840
+ ADD CONSTRAINT blocks_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.posts(id) ON DELETE CASCADE;
841
+ END IF;
842
+ END $rb$;
843
+
844
+ DO $rb$ BEGIN
845
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'blocks_product_id_fkey' AND conrelid = 'public.blocks'::regclass) THEN
846
+ ALTER TABLE ONLY public.blocks
847
+ ADD CONSTRAINT blocks_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
848
+ END IF;
849
+ END $rb$;
850
+
851
+ DO $rb$ BEGIN
852
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_interactions_parent_id_fkey' AND conrelid = 'public.cms_interactions'::regclass) THEN
853
+ ALTER TABLE ONLY public.cms_interactions
854
+ ADD CONSTRAINT cms_interactions_parent_id_fkey FOREIGN KEY (parent_id) REFERENCES public.cms_interactions(id) ON DELETE CASCADE;
855
+ END IF;
856
+ END $rb$;
857
+
858
+ DO $rb$ BEGIN
859
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_interactions_post_id_fkey' AND conrelid = 'public.cms_interactions'::regclass) THEN
860
+ ALTER TABLE ONLY public.cms_interactions
861
+ ADD CONSTRAINT cms_interactions_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.posts(id) ON DELETE CASCADE;
862
+ END IF;
863
+ END $rb$;
864
+
865
+ DO $rb$ BEGIN
866
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_interactions_product_id_fkey' AND conrelid = 'public.cms_interactions'::regclass) THEN
867
+ ALTER TABLE ONLY public.cms_interactions
868
+ ADD CONSTRAINT cms_interactions_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
869
+ END IF;
870
+ END $rb$;
871
+
872
+ DO $rb$ BEGIN
873
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cms_interactions_user_id_profiles_fkey' AND conrelid = 'public.cms_interactions'::regclass) THEN
874
+ ALTER TABLE ONLY public.cms_interactions
875
+ ADD CONSTRAINT cms_interactions_user_id_profiles_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id) ON DELETE CASCADE;
876
+ END IF;
877
+ END $rb$;
878
+
879
+ DO $rb$ BEGIN
880
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'content_drafts_author_id_fkey' AND conrelid = 'public.content_drafts'::regclass) THEN
881
+ ALTER TABLE ONLY public.content_drafts
882
+ ADD CONSTRAINT content_drafts_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
883
+ END IF;
884
+ END $rb$;
885
+
886
+ DO $rb$ BEGIN
887
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cortex_ai_db_mutation_audit_actor_user_id_fkey' AND conrelid = 'public.cortex_ai_db_mutation_audit'::regclass) THEN
888
+ ALTER TABLE ONLY public.cortex_ai_db_mutation_audit
889
+ ADD CONSTRAINT cortex_ai_db_mutation_audit_actor_user_id_fkey FOREIGN KEY (actor_user_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
890
+ END IF;
891
+ END $rb$;
892
+
893
+ DO $rb$ BEGIN
894
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_freemius_mappings_coupon_id_fkey' AND conrelid = 'public.coupon_freemius_mappings'::regclass) THEN
895
+ ALTER TABLE ONLY public.coupon_freemius_mappings
896
+ ADD CONSTRAINT coupon_freemius_mappings_coupon_id_fkey FOREIGN KEY (coupon_id) REFERENCES public.coupons(id) ON DELETE CASCADE;
897
+ END IF;
898
+ END $rb$;
899
+
900
+ DO $rb$ BEGIN
901
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_freemius_mappings_product_id_fkey' AND conrelid = 'public.coupon_freemius_mappings'::regclass) THEN
902
+ ALTER TABLE ONLY public.coupon_freemius_mappings
903
+ ADD CONSTRAINT coupon_freemius_mappings_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE SET NULL;
904
+ END IF;
905
+ END $rb$;
906
+
907
+ DO $rb$ BEGIN
908
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_products_coupon_id_fkey' AND conrelid = 'public.coupon_products'::regclass) THEN
909
+ ALTER TABLE ONLY public.coupon_products
910
+ ADD CONSTRAINT coupon_products_coupon_id_fkey FOREIGN KEY (coupon_id) REFERENCES public.coupons(id) ON DELETE CASCADE;
911
+ END IF;
912
+ END $rb$;
913
+
914
+ DO $rb$ BEGIN
915
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_products_product_id_fkey' AND conrelid = 'public.coupon_products'::regclass) THEN
916
+ ALTER TABLE ONLY public.coupon_products
917
+ ADD CONSTRAINT coupon_products_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
918
+ END IF;
919
+ END $rb$;
920
+
921
+ DO $rb$ BEGIN
922
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_redemptions_coupon_id_fkey' AND conrelid = 'public.coupon_redemptions'::regclass) THEN
923
+ ALTER TABLE ONLY public.coupon_redemptions
924
+ ADD CONSTRAINT coupon_redemptions_coupon_id_fkey FOREIGN KEY (coupon_id) REFERENCES public.coupons(id) ON DELETE SET NULL;
925
+ END IF;
926
+ END $rb$;
927
+
928
+ DO $rb$ BEGIN
929
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_redemptions_order_id_fkey' AND conrelid = 'public.coupon_redemptions'::regclass) THEN
930
+ ALTER TABLE ONLY public.coupon_redemptions
931
+ ADD CONSTRAINT coupon_redemptions_order_id_fkey FOREIGN KEY (order_id) REFERENCES public.orders(id) ON DELETE CASCADE;
932
+ END IF;
933
+ END $rb$;
934
+
935
+ DO $rb$ BEGIN
936
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'coupon_redemptions_user_id_fkey' AND conrelid = 'public.coupon_redemptions'::regclass) THEN
937
+ ALTER TABLE ONLY public.coupon_redemptions
938
+ ADD CONSTRAINT coupon_redemptions_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE SET NULL;
939
+ END IF;
940
+ END $rb$;
941
+
942
+ DO $rb$ BEGIN
943
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'email_2fa_challenges_user_id_fkey' AND conrelid = 'public.email_2fa_challenges'::regclass) THEN
944
+ ALTER TABLE ONLY public.email_2fa_challenges
945
+ ADD CONSTRAINT email_2fa_challenges_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
946
+ END IF;
947
+ END $rb$;
948
+
949
+ DO $rb$ BEGIN
950
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'freemius_plans_product_id_fkey' AND conrelid = 'public.freemius_plans'::regclass) THEN
951
+ ALTER TABLE ONLY public.freemius_plans
952
+ ADD CONSTRAINT freemius_plans_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
953
+ END IF;
954
+ END $rb$;
955
+
956
+ DO $rb$ BEGIN
957
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'freemius_pricing_plan_id_fkey' AND conrelid = 'public.freemius_pricing'::regclass) THEN
958
+ ALTER TABLE ONLY public.freemius_pricing
959
+ ADD CONSTRAINT freemius_pricing_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.freemius_plans(id) ON DELETE CASCADE;
960
+ END IF;
961
+ END $rb$;
962
+
963
+ DO $rb$ BEGIN
964
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'logos_media_id_fkey' AND conrelid = 'public.logos'::regclass) THEN
965
+ ALTER TABLE ONLY public.logos
966
+ ADD CONSTRAINT logos_media_id_fkey FOREIGN KEY (media_id) REFERENCES public.media(id) ON DELETE SET NULL;
967
+ END IF;
968
+ END $rb$;
969
+
970
+ DO $rb$ BEGIN
971
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'mcp_access_tokens_created_by_fkey' AND conrelid = 'public.mcp_access_tokens'::regclass) THEN
972
+ ALTER TABLE ONLY public.mcp_access_tokens
973
+ ADD CONSTRAINT mcp_access_tokens_created_by_fkey FOREIGN KEY (created_by) REFERENCES auth.users(id) ON DELETE SET NULL;
974
+ END IF;
975
+ END $rb$;
976
+
977
+ DO $rb$ BEGIN
978
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'media_uploader_id_fkey' AND conrelid = 'public.media'::regclass) THEN
979
+ ALTER TABLE ONLY public.media
980
+ ADD CONSTRAINT media_uploader_id_fkey FOREIGN KEY (uploader_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
981
+ END IF;
982
+ END $rb$;
983
+
984
+ DO $rb$ BEGIN
985
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'navigation_items_language_id_fkey' AND conrelid = 'public.navigation_items'::regclass) THEN
986
+ ALTER TABLE ONLY public.navigation_items
987
+ ADD CONSTRAINT navigation_items_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.languages(id) ON DELETE CASCADE;
988
+ END IF;
989
+ END $rb$;
990
+
991
+ DO $rb$ BEGIN
992
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'navigation_items_page_id_fkey' AND conrelid = 'public.navigation_items'::regclass) THEN
993
+ ALTER TABLE ONLY public.navigation_items
994
+ ADD CONSTRAINT navigation_items_page_id_fkey FOREIGN KEY (page_id) REFERENCES public.pages(id) ON DELETE SET NULL;
995
+ END IF;
996
+ END $rb$;
997
+
998
+ DO $rb$ BEGIN
999
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'navigation_items_parent_id_fkey' AND conrelid = 'public.navigation_items'::regclass) THEN
1000
+ ALTER TABLE ONLY public.navigation_items
1001
+ ADD CONSTRAINT navigation_items_parent_id_fkey FOREIGN KEY (parent_id) REFERENCES public.navigation_items(id) ON DELETE CASCADE;
1002
+ END IF;
1003
+ END $rb$;
1004
+
1005
+ DO $rb$ BEGIN
1006
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'order_items_order_id_fkey' AND conrelid = 'public.order_items'::regclass) THEN
1007
+ ALTER TABLE ONLY public.order_items
1008
+ ADD CONSTRAINT order_items_order_id_fkey FOREIGN KEY (order_id) REFERENCES public.orders(id) ON DELETE CASCADE;
1009
+ END IF;
1010
+ END $rb$;
1011
+
1012
+ DO $rb$ BEGIN
1013
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'order_items_product_id_fkey' AND conrelid = 'public.order_items'::regclass) THEN
1014
+ ALTER TABLE ONLY public.order_items
1015
+ ADD CONSTRAINT order_items_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE SET NULL;
1016
+ END IF;
1017
+ END $rb$;
1018
+
1019
+ DO $rb$ BEGIN
1020
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'order_items_variant_id_fkey' AND conrelid = 'public.order_items'::regclass) THEN
1021
+ ALTER TABLE ONLY public.order_items
1022
+ ADD CONSTRAINT order_items_variant_id_fkey FOREIGN KEY (variant_id) REFERENCES public.product_variants(id) ON DELETE SET NULL;
1023
+ END IF;
1024
+ END $rb$;
1025
+
1026
+ DO $rb$ BEGIN
1027
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'orders_coupon_id_fkey' AND conrelid = 'public.orders'::regclass) THEN
1028
+ ALTER TABLE ONLY public.orders
1029
+ ADD CONSTRAINT orders_coupon_id_fkey FOREIGN KEY (coupon_id) REFERENCES public.coupons(id) ON DELETE SET NULL;
1030
+ END IF;
1031
+ END $rb$;
1032
+
1033
+ DO $rb$ BEGIN
1034
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'orders_user_id_fkey' AND conrelid = 'public.orders'::regclass) THEN
1035
+ ALTER TABLE ONLY public.orders
1036
+ ADD CONSTRAINT orders_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE SET NULL;
1037
+ END IF;
1038
+ END $rb$;
1039
+
1040
+ DO $rb$ BEGIN
1041
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'page_revisions_author_id_fkey' AND conrelid = 'public.page_revisions'::regclass) THEN
1042
+ ALTER TABLE ONLY public.page_revisions
1043
+ ADD CONSTRAINT page_revisions_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
1044
+ END IF;
1045
+ END $rb$;
1046
+
1047
+ DO $rb$ BEGIN
1048
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'page_revisions_page_id_fkey' AND conrelid = 'public.page_revisions'::regclass) THEN
1049
+ ALTER TABLE ONLY public.page_revisions
1050
+ ADD CONSTRAINT page_revisions_page_id_fkey FOREIGN KEY (page_id) REFERENCES public.pages(id) ON DELETE CASCADE;
1051
+ END IF;
1052
+ END $rb$;
1053
+
1054
+ DO $rb$ BEGIN
1055
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'pages_author_id_fkey' AND conrelid = 'public.pages'::regclass) THEN
1056
+ ALTER TABLE ONLY public.pages
1057
+ ADD CONSTRAINT pages_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
1058
+ END IF;
1059
+ END $rb$;
1060
+
1061
+ DO $rb$ BEGIN
1062
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'pages_feature_image_id_fkey' AND conrelid = 'public.pages'::regclass) THEN
1063
+ ALTER TABLE ONLY public.pages
1064
+ ADD CONSTRAINT pages_feature_image_id_fkey FOREIGN KEY (feature_image_id) REFERENCES public.media(id) ON DELETE SET NULL;
1065
+ END IF;
1066
+ END $rb$;
1067
+
1068
+ DO $rb$ BEGIN
1069
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'pages_language_id_fkey' AND conrelid = 'public.pages'::regclass) THEN
1070
+ ALTER TABLE ONLY public.pages
1071
+ ADD CONSTRAINT pages_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.languages(id) ON DELETE CASCADE;
1072
+ END IF;
1073
+ END $rb$;
1074
+
1075
+ DO $rb$ BEGIN
1076
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'post_revisions_author_id_fkey' AND conrelid = 'public.post_revisions'::regclass) THEN
1077
+ ALTER TABLE ONLY public.post_revisions
1078
+ ADD CONSTRAINT post_revisions_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
1079
+ END IF;
1080
+ END $rb$;
1081
+
1082
+ DO $rb$ BEGIN
1083
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'post_revisions_post_id_fkey' AND conrelid = 'public.post_revisions'::regclass) THEN
1084
+ ALTER TABLE ONLY public.post_revisions
1085
+ ADD CONSTRAINT post_revisions_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.posts(id) ON DELETE CASCADE;
1086
+ END IF;
1087
+ END $rb$;
1088
+
1089
+ DO $rb$ BEGIN
1090
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'posts_author_id_fkey' AND conrelid = 'public.posts'::regclass) THEN
1091
+ ALTER TABLE ONLY public.posts
1092
+ ADD CONSTRAINT posts_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
1093
+ END IF;
1094
+ END $rb$;
1095
+
1096
+ DO $rb$ BEGIN
1097
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'posts_feature_image_id_fkey' AND conrelid = 'public.posts'::regclass) THEN
1098
+ ALTER TABLE ONLY public.posts
1099
+ ADD CONSTRAINT posts_feature_image_id_fkey FOREIGN KEY (feature_image_id) REFERENCES public.media(id) ON DELETE SET NULL;
1100
+ END IF;
1101
+ END $rb$;
1102
+
1103
+ DO $rb$ BEGIN
1104
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'posts_language_id_fkey' AND conrelid = 'public.posts'::regclass) THEN
1105
+ ALTER TABLE ONLY public.posts
1106
+ ADD CONSTRAINT posts_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.languages(id) ON DELETE CASCADE;
1107
+ END IF;
1108
+ END $rb$;
1109
+
1110
+ DO $rb$ BEGIN
1111
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_attribute_terms_attribute_id_fkey' AND conrelid = 'public.product_attribute_terms'::regclass) THEN
1112
+ ALTER TABLE ONLY public.product_attribute_terms
1113
+ ADD CONSTRAINT product_attribute_terms_attribute_id_fkey FOREIGN KEY (attribute_id) REFERENCES public.product_attributes(id) ON DELETE CASCADE;
1114
+ END IF;
1115
+ END $rb$;
1116
+
1117
+ DO $rb$ BEGIN
1118
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_categories_category_id_fkey' AND conrelid = 'public.product_categories'::regclass) THEN
1119
+ ALTER TABLE ONLY public.product_categories
1120
+ ADD CONSTRAINT product_categories_category_id_fkey FOREIGN KEY (category_id) REFERENCES public.categories(id) ON DELETE CASCADE;
1121
+ END IF;
1122
+ END $rb$;
1123
+
1124
+ DO $rb$ BEGIN
1125
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_categories_product_id_fkey' AND conrelid = 'public.product_categories'::regclass) THEN
1126
+ ALTER TABLE ONLY public.product_categories
1127
+ ADD CONSTRAINT product_categories_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
1128
+ END IF;
1129
+ END $rb$;
1130
+
1131
+ DO $rb$ BEGIN
1132
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_drafts_author_id_fkey' AND conrelid = 'public.product_drafts'::regclass) THEN
1133
+ ALTER TABLE ONLY public.product_drafts
1134
+ ADD CONSTRAINT product_drafts_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
1135
+ END IF;
1136
+ END $rb$;
1137
+
1138
+ DO $rb$ BEGIN
1139
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_drafts_product_id_fkey' AND conrelid = 'public.product_drafts'::regclass) THEN
1140
+ ALTER TABLE ONLY public.product_drafts
1141
+ ADD CONSTRAINT product_drafts_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
1142
+ END IF;
1143
+ END $rb$;
1144
+
1145
+ DO $rb$ BEGIN
1146
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_freemius_sale_coupons_product_id_fkey' AND conrelid = 'public.product_freemius_sale_coupons'::regclass) THEN
1147
+ ALTER TABLE ONLY public.product_freemius_sale_coupons
1148
+ ADD CONSTRAINT product_freemius_sale_coupons_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
1149
+ END IF;
1150
+ END $rb$;
1151
+
1152
+ DO $rb$ BEGIN
1153
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_media_media_id_fkey' AND conrelid = 'public.product_media'::regclass) THEN
1154
+ ALTER TABLE ONLY public.product_media
1155
+ ADD CONSTRAINT product_media_media_id_fkey FOREIGN KEY (media_id) REFERENCES public.media(id) ON DELETE CASCADE;
1156
+ END IF;
1157
+ END $rb$;
1158
+
1159
+ DO $rb$ BEGIN
1160
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_media_product_id_fkey' AND conrelid = 'public.product_media'::regclass) THEN
1161
+ ALTER TABLE ONLY public.product_media
1162
+ ADD CONSTRAINT product_media_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
1163
+ END IF;
1164
+ END $rb$;
1165
+
1166
+ DO $rb$ BEGIN
1167
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_revisions_author_id_fkey' AND conrelid = 'public.product_revisions'::regclass) THEN
1168
+ ALTER TABLE ONLY public.product_revisions
1169
+ ADD CONSTRAINT product_revisions_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id) ON DELETE SET NULL;
1170
+ END IF;
1171
+ END $rb$;
1172
+
1173
+ DO $rb$ BEGIN
1174
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_revisions_product_id_fkey' AND conrelid = 'public.product_revisions'::regclass) THEN
1175
+ ALTER TABLE ONLY public.product_revisions
1176
+ ADD CONSTRAINT product_revisions_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
1177
+ END IF;
1178
+ END $rb$;
1179
+
1180
+ DO $rb$ BEGIN
1181
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_variants_main_media_id_fkey' AND conrelid = 'public.product_variants'::regclass) THEN
1182
+ ALTER TABLE ONLY public.product_variants
1183
+ ADD CONSTRAINT product_variants_main_media_id_fkey FOREIGN KEY (main_media_id) REFERENCES public.media(id) ON DELETE SET NULL;
1184
+ END IF;
1185
+ END $rb$;
1186
+
1187
+ DO $rb$ BEGIN
1188
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'product_variants_product_id_fkey' AND conrelid = 'public.product_variants'::regclass) THEN
1189
+ ALTER TABLE ONLY public.product_variants
1190
+ ADD CONSTRAINT product_variants_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
1191
+ END IF;
1192
+ END $rb$;
1193
+
1194
+ DO $rb$ BEGIN
1195
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'products_language_id_fkey' AND conrelid = 'public.products'::regclass) THEN
1196
+ ALTER TABLE ONLY public.products
1197
+ ADD CONSTRAINT products_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.languages(id) ON DELETE CASCADE;
1198
+ END IF;
1199
+ END $rb$;
1200
+
1201
+ DO $rb$ BEGIN
1202
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'profiles_id_fkey' AND conrelid = 'public.profiles'::regclass) THEN
1203
+ ALTER TABLE ONLY public.profiles
1204
+ ADD CONSTRAINT profiles_id_fkey FOREIGN KEY (id) REFERENCES auth.users(id) ON DELETE CASCADE;
1205
+ END IF;
1206
+ END $rb$;
1207
+
1208
+ DO $rb$ BEGIN
1209
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'shipping_zone_locations_zone_id_fkey' AND conrelid = 'public.shipping_zone_locations'::regclass) THEN
1210
+ ALTER TABLE ONLY public.shipping_zone_locations
1211
+ ADD CONSTRAINT shipping_zone_locations_zone_id_fkey FOREIGN KEY (zone_id) REFERENCES public.shipping_zones(id) ON DELETE CASCADE;
1212
+ END IF;
1213
+ END $rb$;
1214
+
1215
+ DO $rb$ BEGIN
1216
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'shipping_zone_methods_zone_id_fkey' AND conrelid = 'public.shipping_zone_methods'::regclass) THEN
1217
+ ALTER TABLE ONLY public.shipping_zone_methods
1218
+ ADD CONSTRAINT shipping_zone_methods_zone_id_fkey FOREIGN KEY (zone_id) REFERENCES public.shipping_zones(id) ON DELETE CASCADE;
1219
+ END IF;
1220
+ END $rb$;
1221
+
1222
+ DO $rb$ BEGIN
1223
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'thread_messages_thread_id_fkey' AND conrelid = 'public.thread_messages'::regclass) THEN
1224
+ ALTER TABLE ONLY public.thread_messages
1225
+ ADD CONSTRAINT thread_messages_thread_id_fkey FOREIGN KEY (thread_id) REFERENCES public.message_threads(id) ON DELETE CASCADE;
1226
+ END IF;
1227
+ END $rb$;
1228
+
1229
+ DO $rb$ BEGIN
1230
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_addresses_user_id_fkey' AND conrelid = 'public.user_addresses'::regclass) THEN
1231
+ ALTER TABLE ONLY public.user_addresses
1232
+ ADD CONSTRAINT user_addresses_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id) ON DELETE CASCADE;
1233
+ END IF;
1234
+ END $rb$;
1235
+
1236
+ DO $rb$ BEGIN
1237
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_security_settings_user_id_fkey' AND conrelid = 'public.user_security_settings'::regclass) THEN
1238
+ ALTER TABLE ONLY public.user_security_settings
1239
+ ADD CONSTRAINT user_security_settings_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
1240
+ END IF;
1241
+ END $rb$;
1242
+
1243
+ DO $rb$ BEGIN
1244
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_trusted_devices_user_id_fkey' AND conrelid = 'public.user_trusted_devices'::regclass) THEN
1245
+ ALTER TABLE ONLY public.user_trusted_devices
1246
+ ADD CONSTRAINT user_trusted_devices_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
1247
+ END IF;
1248
+ END $rb$;
1249
+
1250
+ DO $rb$ BEGIN
1251
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'variant_attribute_mapping_attribute_term_id_fkey' AND conrelid = 'public.variant_attribute_mapping'::regclass) THEN
1252
+ ALTER TABLE ONLY public.variant_attribute_mapping
1253
+ ADD CONSTRAINT variant_attribute_mapping_attribute_term_id_fkey FOREIGN KEY (attribute_term_id) REFERENCES public.product_attribute_terms(id) ON DELETE CASCADE;
1254
+ END IF;
1255
+ END $rb$;
1256
+
1257
+ DO $rb$ BEGIN
1258
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'variant_attribute_mapping_variant_id_fkey' AND conrelid = 'public.variant_attribute_mapping'::regclass) THEN
1259
+ ALTER TABLE ONLY public.variant_attribute_mapping
1260
+ ADD CONSTRAINT variant_attribute_mapping_variant_id_fkey FOREIGN KEY (variant_id) REFERENCES public.product_variants(id) ON DELETE CASCADE;
1261
+ END IF;
1262
+ END $rb$;