@fayz-ai/plugin-menu 0.13.14 → 0.13.16

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.
@@ -0,0 +1,699 @@
1
+ // src/migrations/index.ts
2
+ var MIGRATION_000_BASELINE = `-- ============================================================================
3
+ -- plugins/plugin-menu/src/migrations/000_baseline.sql \u2014 what installing this provisions, as one file.
4
+ --
5
+ -- GENERATED by scripts/emit-unit-baselines.mjs (#338). Do not edit by hand:
6
+ -- change the schema, regenerate, and let scripts/check-chain-equivalence.mjs
7
+ -- prove the result still matches.
8
+ --
9
+ -- This replaced 4 migration files. They are kept, unapplied, in
10
+ -- migrations.archive/ \u2014 a year of decisions is worth reading even when it is no
11
+ -- longer worth replaying.
12
+ --
13
+ -- Object order is fixed rather than dependency-sorted: schemas, types,
14
+ -- sequences, tables, defaults, functions, constraints, views, indexes, foreign
15
+ -- keys, triggers, row security, policies, grants. Dependencies BETWEEN units
16
+ -- are carried by the order packages/db/chain.json declares.
17
+ -- ============================================================================
18
+
19
+ -- A LANGUAGE sql function binds its body at CREATE time, and 570 functions
20
+ -- sorted by name are not sorted by who calls whom. This is what lets them load
21
+ -- in any order; every body is still compiled on first call, so a genuinely
22
+ -- broken reference surfaces then rather than never. Session-scoped.
23
+ SET check_function_bodies = false;
24
+
25
+
26
+
27
+ -- \u2500\u2500 default privileges: reset \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
28
+ -- Cleared BEFORE anything is created, so every object below gets the ACL the
29
+ -- dump describes rather than the image's defaults on top of it. Restored at
30
+ -- the end of this file.
31
+
32
+ DO $dp$ BEGIN
33
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public REVOKE ALL ON SEQUENCES FROM anon, authenticated, service_role, fayz_connector$stmt$;
34
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
35
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public REVOKE ALL ON SEQUENCES FROM anon, authenticated, service_role, fayz_connector$stmt$;
36
+ END $dp$;
37
+
38
+ DO $dp$ BEGIN
39
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public REVOKE ALL ON SEQUENCES FROM anon, authenticated, service_role, fayz_connector$stmt$;
40
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
41
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public REVOKE ALL ON SEQUENCES FROM anon, authenticated, service_role, fayz_connector$stmt$;
42
+ END $dp$;
43
+
44
+ DO $dp$ BEGIN
45
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public REVOKE ALL ON FUNCTIONS FROM anon, authenticated, service_role, fayz_connector$stmt$;
46
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
47
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public REVOKE ALL ON FUNCTIONS FROM anon, authenticated, service_role, fayz_connector$stmt$;
48
+ END $dp$;
49
+
50
+ DO $dp$ BEGIN
51
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public REVOKE ALL ON FUNCTIONS FROM anon, authenticated, service_role, fayz_connector$stmt$;
52
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
53
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public REVOKE ALL ON FUNCTIONS FROM anon, authenticated, service_role, fayz_connector$stmt$;
54
+ END $dp$;
55
+
56
+ DO $dp$ BEGIN
57
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public REVOKE ALL ON TABLES FROM anon, authenticated, service_role, fayz_connector$stmt$;
58
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
59
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public REVOKE ALL ON TABLES FROM anon, authenticated, service_role, fayz_connector$stmt$;
60
+ END $dp$;
61
+
62
+ DO $dp$ BEGIN
63
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public REVOKE ALL ON TABLES FROM anon, authenticated, service_role, fayz_connector$stmt$;
64
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
65
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public REVOKE ALL ON TABLES FROM anon, authenticated, service_role, fayz_connector$stmt$;
66
+ END $dp$;
67
+
68
+
69
+ -- \u2500\u2500 table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
70
+
71
+ CREATE TABLE public.plg_menu_allergens (
72
+ id uuid DEFAULT gen_random_uuid() NOT NULL,
73
+ tenant_id uuid NOT NULL,
74
+ name text NOT NULL,
75
+ icon text,
76
+ is_active boolean DEFAULT true NOT NULL,
77
+ created_at timestamp with time zone DEFAULT now() NOT NULL
78
+ );
79
+
80
+ CREATE TABLE public.plg_menu_dietary_tags (
81
+ id uuid DEFAULT gen_random_uuid() NOT NULL,
82
+ tenant_id uuid NOT NULL,
83
+ name text NOT NULL,
84
+ color text,
85
+ is_active boolean DEFAULT true NOT NULL,
86
+ created_at timestamp with time zone DEFAULT now() NOT NULL
87
+ );
88
+
89
+ CREATE TABLE public.plg_menu_item_modifier_groups (
90
+ id uuid DEFAULT gen_random_uuid() NOT NULL,
91
+ tenant_id uuid NOT NULL,
92
+ product_id uuid NOT NULL,
93
+ group_id uuid NOT NULL,
94
+ sort_order integer DEFAULT 0 NOT NULL
95
+ );
96
+
97
+ CREATE TABLE public.plg_menu_items (
98
+ product_id uuid NOT NULL,
99
+ tenant_id uuid NOT NULL,
100
+ status text DEFAULT 'available'::text NOT NULL,
101
+ available_for_pos boolean DEFAULT true NOT NULL,
102
+ available_for_delivery boolean DEFAULT true NOT NULL,
103
+ delivery_price numeric(14,2),
104
+ prep_time_minutes integer,
105
+ allergens text[] DEFAULT ARRAY[]::text[] NOT NULL,
106
+ dietary_tags text[] DEFAULT ARRAY[]::text[] NOT NULL,
107
+ is_featured boolean DEFAULT false NOT NULL,
108
+ sort_order integer DEFAULT 0 NOT NULL,
109
+ created_at timestamp with time zone DEFAULT now() NOT NULL,
110
+ updated_at timestamp with time zone DEFAULT now() NOT NULL
111
+ );
112
+
113
+ CREATE TABLE public.plg_menu_menus (
114
+ id uuid DEFAULT gen_random_uuid() NOT NULL,
115
+ tenant_id uuid NOT NULL,
116
+ name text NOT NULL,
117
+ description text,
118
+ is_active boolean DEFAULT true NOT NULL,
119
+ sort_order integer DEFAULT 0 NOT NULL,
120
+ channels text[] DEFAULT ARRAY['pos'::text, 'delivery'::text, 'digital'::text] NOT NULL,
121
+ availability jsonb DEFAULT '{}'::jsonb NOT NULL,
122
+ created_at timestamp with time zone DEFAULT now() NOT NULL,
123
+ updated_at timestamp with time zone DEFAULT now() NOT NULL
124
+ );
125
+
126
+ CREATE TABLE public.plg_menu_modifier_groups (
127
+ id uuid DEFAULT gen_random_uuid() NOT NULL,
128
+ tenant_id uuid NOT NULL,
129
+ name text NOT NULL,
130
+ min_selections integer DEFAULT 0 NOT NULL,
131
+ max_selections integer DEFAULT 1 NOT NULL,
132
+ is_required boolean DEFAULT false NOT NULL,
133
+ sort_order integer DEFAULT 0 NOT NULL,
134
+ created_at timestamp with time zone DEFAULT now() NOT NULL
135
+ );
136
+
137
+ CREATE TABLE public.plg_menu_modifiers (
138
+ id uuid DEFAULT gen_random_uuid() NOT NULL,
139
+ tenant_id uuid NOT NULL,
140
+ group_id uuid NOT NULL,
141
+ name text NOT NULL,
142
+ price_adjustment numeric(14,2) DEFAULT 0 NOT NULL,
143
+ is_active boolean DEFAULT true NOT NULL,
144
+ sort_order integer DEFAULT 0 NOT NULL,
145
+ created_at timestamp with time zone DEFAULT now() NOT NULL
146
+ );
147
+
148
+ CREATE TABLE public.plg_menu_placements (
149
+ id uuid DEFAULT gen_random_uuid() NOT NULL,
150
+ tenant_id uuid NOT NULL,
151
+ section_id uuid NOT NULL,
152
+ item_id uuid NOT NULL,
153
+ sort_order integer DEFAULT 0 NOT NULL,
154
+ price_override numeric(14,2),
155
+ is_active boolean DEFAULT true NOT NULL,
156
+ created_at timestamp with time zone DEFAULT now() NOT NULL,
157
+ updated_at timestamp with time zone DEFAULT now() NOT NULL
158
+ );
159
+
160
+ CREATE TABLE public.plg_menu_sections (
161
+ id uuid DEFAULT gen_random_uuid() NOT NULL,
162
+ tenant_id uuid NOT NULL,
163
+ menu_id uuid NOT NULL,
164
+ name text NOT NULL,
165
+ description text,
166
+ image_url text,
167
+ sort_order integer DEFAULT 0 NOT NULL,
168
+ is_active boolean DEFAULT true NOT NULL,
169
+ availability jsonb DEFAULT '{}'::jsonb NOT NULL,
170
+ legacy_category_id uuid,
171
+ created_at timestamp with time zone DEFAULT now() NOT NULL,
172
+ updated_at timestamp with time zone DEFAULT now() NOT NULL
173
+ );
174
+
175
+
176
+ -- \u2500\u2500 constraint \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
177
+
178
+ ALTER TABLE ONLY public.plg_menu_allergens
179
+ ADD CONSTRAINT plg_menu_allergens_pkey PRIMARY KEY (id);
180
+
181
+ ALTER TABLE ONLY public.plg_menu_dietary_tags
182
+ ADD CONSTRAINT plg_menu_dietary_tags_pkey PRIMARY KEY (id);
183
+
184
+ ALTER TABLE ONLY public.plg_menu_item_modifier_groups
185
+ ADD CONSTRAINT plg_menu_item_modifier_groups_pkey PRIMARY KEY (id);
186
+
187
+ ALTER TABLE ONLY public.plg_menu_items
188
+ ADD CONSTRAINT plg_menu_items_pkey PRIMARY KEY (product_id);
189
+
190
+ ALTER TABLE ONLY public.plg_menu_menus
191
+ ADD CONSTRAINT plg_menu_menus_pkey PRIMARY KEY (id);
192
+
193
+ ALTER TABLE ONLY public.plg_menu_modifier_groups
194
+ ADD CONSTRAINT plg_menu_modifier_groups_pkey PRIMARY KEY (id);
195
+
196
+ ALTER TABLE ONLY public.plg_menu_modifiers
197
+ ADD CONSTRAINT plg_menu_modifiers_pkey PRIMARY KEY (id);
198
+
199
+ ALTER TABLE ONLY public.plg_menu_placements
200
+ ADD CONSTRAINT plg_menu_placements_pkey PRIMARY KEY (id);
201
+
202
+ ALTER TABLE ONLY public.plg_menu_sections
203
+ ADD CONSTRAINT plg_menu_sections_pkey PRIMARY KEY (id);
204
+
205
+
206
+ -- \u2500\u2500 index \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
207
+
208
+ CREATE INDEX idx_plg_menu_allergens_tenant ON public.plg_menu_allergens USING btree (tenant_id);
209
+
210
+ CREATE INDEX idx_plg_menu_dietary_tags_tenant ON public.plg_menu_dietary_tags USING btree (tenant_id);
211
+
212
+ CREATE INDEX idx_plg_menu_items_tenant ON public.plg_menu_items USING btree (tenant_id);
213
+
214
+ CREATE INDEX idx_plg_menu_menus_tenant ON public.plg_menu_menus USING btree (tenant_id, sort_order);
215
+
216
+ CREATE INDEX idx_plg_menu_modifier_groups_tenant ON public.plg_menu_modifier_groups USING btree (tenant_id);
217
+
218
+ CREATE INDEX idx_plg_menu_modifiers_group ON public.plg_menu_modifiers USING btree (group_id, sort_order);
219
+
220
+ CREATE INDEX idx_plg_menu_placements_item ON public.plg_menu_placements USING btree (item_id);
221
+
222
+ CREATE INDEX idx_plg_menu_placements_section ON public.plg_menu_placements USING btree (section_id, sort_order);
223
+
224
+ CREATE INDEX idx_plg_menu_sections_menu ON public.plg_menu_sections USING btree (menu_id, sort_order);
225
+
226
+ CREATE INDEX idx_plg_menu_sections_tenant ON public.plg_menu_sections USING btree (tenant_id);
227
+
228
+ CREATE UNIQUE INDEX uq_plg_menu_item_modifier_groups ON public.plg_menu_item_modifier_groups USING btree (product_id, group_id);
229
+
230
+ CREATE UNIQUE INDEX uq_plg_menu_placements_seat ON public.plg_menu_placements USING btree (section_id, item_id);
231
+
232
+ CREATE UNIQUE INDEX uq_plg_menu_sections_legacy ON public.plg_menu_sections USING btree (menu_id, legacy_category_id) WHERE (legacy_category_id IS NOT NULL);
233
+
234
+
235
+ -- \u2500\u2500 fk constraint \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
236
+
237
+ ALTER TABLE ONLY public.plg_menu_allergens
238
+ ADD CONSTRAINT plg_menu_allergens_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
239
+
240
+ ALTER TABLE ONLY public.plg_menu_dietary_tags
241
+ ADD CONSTRAINT plg_menu_dietary_tags_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
242
+
243
+ ALTER TABLE ONLY public.plg_menu_item_modifier_groups
244
+ ADD CONSTRAINT plg_menu_item_modifier_groups_group_id_fkey FOREIGN KEY (group_id) REFERENCES public.plg_menu_modifier_groups(id) ON DELETE CASCADE;
245
+
246
+ ALTER TABLE ONLY public.plg_menu_item_modifier_groups
247
+ ADD CONSTRAINT plg_menu_item_modifier_groups_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
248
+
249
+ ALTER TABLE ONLY public.plg_menu_item_modifier_groups
250
+ ADD CONSTRAINT plg_menu_item_modifier_groups_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
251
+
252
+ ALTER TABLE ONLY public.plg_menu_items
253
+ ADD CONSTRAINT plg_menu_items_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE;
254
+
255
+ ALTER TABLE ONLY public.plg_menu_items
256
+ ADD CONSTRAINT plg_menu_items_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
257
+
258
+ ALTER TABLE ONLY public.plg_menu_menus
259
+ ADD CONSTRAINT plg_menu_menus_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
260
+
261
+ ALTER TABLE ONLY public.plg_menu_modifier_groups
262
+ ADD CONSTRAINT plg_menu_modifier_groups_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
263
+
264
+ ALTER TABLE ONLY public.plg_menu_modifiers
265
+ ADD CONSTRAINT plg_menu_modifiers_group_id_fkey FOREIGN KEY (group_id) REFERENCES public.plg_menu_modifier_groups(id) ON DELETE CASCADE;
266
+
267
+ ALTER TABLE ONLY public.plg_menu_modifiers
268
+ ADD CONSTRAINT plg_menu_modifiers_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
269
+
270
+ ALTER TABLE ONLY public.plg_menu_placements
271
+ ADD CONSTRAINT plg_menu_placements_item_id_fkey FOREIGN KEY (item_id) REFERENCES public.products(id) ON DELETE CASCADE;
272
+
273
+ ALTER TABLE ONLY public.plg_menu_placements
274
+ ADD CONSTRAINT plg_menu_placements_section_id_fkey FOREIGN KEY (section_id) REFERENCES public.plg_menu_sections(id) ON DELETE CASCADE;
275
+
276
+ ALTER TABLE ONLY public.plg_menu_placements
277
+ ADD CONSTRAINT plg_menu_placements_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
278
+
279
+ ALTER TABLE ONLY public.plg_menu_sections
280
+ ADD CONSTRAINT plg_menu_sections_menu_id_fkey FOREIGN KEY (menu_id) REFERENCES public.plg_menu_menus(id) ON DELETE CASCADE;
281
+
282
+ ALTER TABLE ONLY public.plg_menu_sections
283
+ ADD CONSTRAINT plg_menu_sections_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
284
+
285
+
286
+ -- \u2500\u2500 row security \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
287
+
288
+ ALTER TABLE public.plg_menu_allergens ENABLE ROW LEVEL SECURITY;
289
+
290
+ ALTER TABLE public.plg_menu_dietary_tags ENABLE ROW LEVEL SECURITY;
291
+
292
+ ALTER TABLE public.plg_menu_item_modifier_groups ENABLE ROW LEVEL SECURITY;
293
+
294
+ ALTER TABLE public.plg_menu_items ENABLE ROW LEVEL SECURITY;
295
+
296
+ ALTER TABLE public.plg_menu_menus ENABLE ROW LEVEL SECURITY;
297
+
298
+ ALTER TABLE public.plg_menu_modifier_groups ENABLE ROW LEVEL SECURITY;
299
+
300
+ ALTER TABLE public.plg_menu_modifiers ENABLE ROW LEVEL SECURITY;
301
+
302
+ ALTER TABLE public.plg_menu_placements ENABLE ROW LEVEL SECURITY;
303
+
304
+ ALTER TABLE public.plg_menu_sections ENABLE ROW LEVEL SECURITY;
305
+
306
+
307
+ -- \u2500\u2500 policy \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
308
+
309
+ CREATE POLICY plg_menu_allergens_delete ON public.plg_menu_allergens FOR DELETE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
310
+
311
+ CREATE POLICY plg_menu_allergens_insert ON public.plg_menu_allergens FOR INSERT TO authenticated WITH CHECK ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
312
+
313
+ CREATE POLICY plg_menu_allergens_select ON public.plg_menu_allergens FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
314
+
315
+ CREATE POLICY plg_menu_allergens_update ON public.plg_menu_allergens FOR UPDATE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
316
+
317
+ CREATE POLICY plg_menu_dietary_tags_delete ON public.plg_menu_dietary_tags FOR DELETE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
318
+
319
+ CREATE POLICY plg_menu_dietary_tags_insert ON public.plg_menu_dietary_tags FOR INSERT TO authenticated WITH CHECK ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
320
+
321
+ CREATE POLICY plg_menu_dietary_tags_select ON public.plg_menu_dietary_tags FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
322
+
323
+ CREATE POLICY plg_menu_dietary_tags_update ON public.plg_menu_dietary_tags FOR UPDATE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
324
+
325
+ CREATE POLICY plg_menu_item_modifier_groups_delete ON public.plg_menu_item_modifier_groups FOR DELETE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
326
+
327
+ CREATE POLICY plg_menu_item_modifier_groups_insert ON public.plg_menu_item_modifier_groups FOR INSERT TO authenticated WITH CHECK ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
328
+
329
+ CREATE POLICY plg_menu_item_modifier_groups_select ON public.plg_menu_item_modifier_groups FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
330
+
331
+ CREATE POLICY plg_menu_item_modifier_groups_update ON public.plg_menu_item_modifier_groups FOR UPDATE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
332
+
333
+ CREATE POLICY plg_menu_items_delete ON public.plg_menu_items FOR DELETE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
334
+
335
+ CREATE POLICY plg_menu_items_insert ON public.plg_menu_items FOR INSERT TO authenticated WITH CHECK ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
336
+
337
+ CREATE POLICY plg_menu_items_select ON public.plg_menu_items FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
338
+
339
+ CREATE POLICY plg_menu_items_update ON public.plg_menu_items FOR UPDATE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
340
+
341
+ CREATE POLICY plg_menu_menus_delete ON public.plg_menu_menus FOR DELETE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
342
+
343
+ CREATE POLICY plg_menu_menus_insert ON public.plg_menu_menus FOR INSERT TO authenticated WITH CHECK ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
344
+
345
+ CREATE POLICY plg_menu_menus_select ON public.plg_menu_menus FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
346
+
347
+ CREATE POLICY plg_menu_menus_update ON public.plg_menu_menus FOR UPDATE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
348
+
349
+ CREATE POLICY plg_menu_modifier_groups_delete ON public.plg_menu_modifier_groups FOR DELETE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
350
+
351
+ CREATE POLICY plg_menu_modifier_groups_insert ON public.plg_menu_modifier_groups FOR INSERT TO authenticated WITH CHECK ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
352
+
353
+ CREATE POLICY plg_menu_modifier_groups_select ON public.plg_menu_modifier_groups FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
354
+
355
+ CREATE POLICY plg_menu_modifier_groups_update ON public.plg_menu_modifier_groups FOR UPDATE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
356
+
357
+ CREATE POLICY plg_menu_modifiers_delete ON public.plg_menu_modifiers FOR DELETE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
358
+
359
+ CREATE POLICY plg_menu_modifiers_insert ON public.plg_menu_modifiers FOR INSERT TO authenticated WITH CHECK ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
360
+
361
+ CREATE POLICY plg_menu_modifiers_select ON public.plg_menu_modifiers FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
362
+
363
+ CREATE POLICY plg_menu_modifiers_update ON public.plg_menu_modifiers FOR UPDATE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
364
+
365
+ CREATE POLICY plg_menu_placements_delete ON public.plg_menu_placements FOR DELETE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
366
+
367
+ CREATE POLICY plg_menu_placements_insert ON public.plg_menu_placements FOR INSERT TO authenticated WITH CHECK ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
368
+
369
+ CREATE POLICY plg_menu_placements_select ON public.plg_menu_placements FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
370
+
371
+ CREATE POLICY plg_menu_placements_update ON public.plg_menu_placements FOR UPDATE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
372
+
373
+ CREATE POLICY plg_menu_sections_delete ON public.plg_menu_sections FOR DELETE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
374
+
375
+ CREATE POLICY plg_menu_sections_insert ON public.plg_menu_sections FOR INSERT TO authenticated WITH CHECK ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
376
+
377
+ CREATE POLICY plg_menu_sections_select ON public.plg_menu_sections FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
378
+
379
+ CREATE POLICY plg_menu_sections_update ON public.plg_menu_sections FOR UPDATE TO authenticated USING ((tenant_id IN ( SELECT public.user_tenant_ids() AS user_tenant_ids)));
380
+
381
+
382
+ -- \u2500\u2500 acl \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
383
+
384
+ GRANT MAINTAIN ON TABLE public.plg_menu_allergens TO anon;
385
+ GRANT ALL ON TABLE public.plg_menu_allergens TO authenticated;
386
+ GRANT ALL ON TABLE public.plg_menu_allergens TO service_role;
387
+
388
+ GRANT MAINTAIN ON TABLE public.plg_menu_dietary_tags TO anon;
389
+ GRANT ALL ON TABLE public.plg_menu_dietary_tags TO authenticated;
390
+ GRANT ALL ON TABLE public.plg_menu_dietary_tags TO service_role;
391
+
392
+ GRANT MAINTAIN ON TABLE public.plg_menu_item_modifier_groups TO anon;
393
+ GRANT ALL ON TABLE public.plg_menu_item_modifier_groups TO authenticated;
394
+ GRANT ALL ON TABLE public.plg_menu_item_modifier_groups TO service_role;
395
+
396
+ GRANT MAINTAIN ON TABLE public.plg_menu_items TO anon;
397
+ GRANT ALL ON TABLE public.plg_menu_items TO authenticated;
398
+ GRANT ALL ON TABLE public.plg_menu_items TO service_role;
399
+
400
+ GRANT MAINTAIN ON TABLE public.plg_menu_menus TO anon;
401
+ GRANT ALL ON TABLE public.plg_menu_menus TO authenticated;
402
+ GRANT ALL ON TABLE public.plg_menu_menus TO service_role;
403
+
404
+ GRANT MAINTAIN ON TABLE public.plg_menu_modifier_groups TO anon;
405
+ GRANT ALL ON TABLE public.plg_menu_modifier_groups TO authenticated;
406
+ GRANT ALL ON TABLE public.plg_menu_modifier_groups TO service_role;
407
+
408
+ GRANT MAINTAIN ON TABLE public.plg_menu_modifiers TO anon;
409
+ GRANT ALL ON TABLE public.plg_menu_modifiers TO authenticated;
410
+ GRANT ALL ON TABLE public.plg_menu_modifiers TO service_role;
411
+
412
+ GRANT MAINTAIN ON TABLE public.plg_menu_placements TO anon;
413
+ GRANT ALL ON TABLE public.plg_menu_placements TO authenticated;
414
+ GRANT ALL ON TABLE public.plg_menu_placements TO service_role;
415
+
416
+ GRANT MAINTAIN ON TABLE public.plg_menu_sections TO anon;
417
+ GRANT ALL ON TABLE public.plg_menu_sections TO authenticated;
418
+ GRANT ALL ON TABLE public.plg_menu_sections TO service_role;
419
+
420
+
421
+ -- \u2500\u2500 default privileges: restore \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
422
+ -- Put back, so the NEXT thing installed inherits what the chain had.
423
+
424
+ DO $dp$ BEGIN
425
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres$stmt$;
426
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
427
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres$stmt$;
428
+ END $dp$;
429
+
430
+ DO $dp$ BEGIN
431
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO anon$stmt$;
432
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
433
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO anon$stmt$;
434
+ END $dp$;
435
+
436
+ DO $dp$ BEGIN
437
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated$stmt$;
438
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
439
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated$stmt$;
440
+ END $dp$;
441
+
442
+ DO $dp$ BEGIN
443
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role$stmt$;
444
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
445
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role$stmt$;
446
+ END $dp$;
447
+
448
+ DO $dp$ BEGIN
449
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres$stmt$;
450
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
451
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres$stmt$;
452
+ END $dp$;
453
+
454
+ DO $dp$ BEGIN
455
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO anon$stmt$;
456
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
457
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO anon$stmt$;
458
+ END $dp$;
459
+
460
+ DO $dp$ BEGIN
461
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated$stmt$;
462
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
463
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated$stmt$;
464
+ END $dp$;
465
+
466
+ DO $dp$ BEGIN
467
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role$stmt$;
468
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
469
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role$stmt$;
470
+ END $dp$;
471
+
472
+ DO $dp$ BEGIN
473
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres$stmt$;
474
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
475
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres$stmt$;
476
+ END $dp$;
477
+
478
+ DO $dp$ BEGIN
479
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated$stmt$;
480
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
481
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated$stmt$;
482
+ END $dp$;
483
+
484
+ DO $dp$ BEGIN
485
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role$stmt$;
486
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
487
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role$stmt$;
488
+ END $dp$;
489
+
490
+ DO $dp$ BEGIN
491
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres$stmt$;
492
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
493
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres$stmt$;
494
+ END $dp$;
495
+
496
+ DO $dp$ BEGIN
497
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO anon$stmt$;
498
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
499
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO anon$stmt$;
500
+ END $dp$;
501
+
502
+ DO $dp$ BEGIN
503
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated$stmt$;
504
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
505
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated$stmt$;
506
+ END $dp$;
507
+
508
+ DO $dp$ BEGIN
509
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role$stmt$;
510
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
511
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role$stmt$;
512
+ END $dp$;
513
+
514
+ DO $dp$ BEGIN
515
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO postgres$stmt$;
516
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
517
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO postgres$stmt$;
518
+ END $dp$;
519
+
520
+ DO $dp$ BEGIN
521
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT MAINTAIN ON TABLES TO anon$stmt$;
522
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
523
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT MAINTAIN ON TABLES TO anon$stmt$;
524
+ END $dp$;
525
+
526
+ DO $dp$ BEGIN
527
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO authenticated$stmt$;
528
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
529
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO authenticated$stmt$;
530
+ END $dp$;
531
+
532
+ DO $dp$ BEGIN
533
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO service_role$stmt$;
534
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
535
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO service_role$stmt$;
536
+ END $dp$;
537
+
538
+ DO $dp$ BEGIN
539
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO postgres$stmt$;
540
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
541
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO postgres$stmt$;
542
+ END $dp$;
543
+
544
+ DO $dp$ BEGIN
545
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO anon$stmt$;
546
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
547
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO anon$stmt$;
548
+ END $dp$;
549
+
550
+ DO $dp$ BEGIN
551
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO authenticated$stmt$;
552
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
553
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO authenticated$stmt$;
554
+ END $dp$;
555
+
556
+ DO $dp$ BEGIN
557
+ EXECUTE $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO service_role$stmt$;
558
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
559
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO service_role$stmt$;
560
+ END $dp$;
561
+
562
+ DO $dp$ BEGIN
563
+ EXECUTE $stmt$--
564
+ -- PostgreSQL database dump complete
565
+ --$stmt$;
566
+ EXCEPTION WHEN insufficient_privilege OR undefined_object THEN
567
+ RAISE NOTICE 'baseline: not ours to set \u2014 %', $stmt$--
568
+ -- PostgreSQL database dump complete
569
+ --$stmt$;
570
+ END $dp$;
571
+ `;
572
+ var MIGRATION_002_O_PRODUTO_TEM_COMPLEMENTOS = `-- ---------------------------------------------------------------------------
573
+ -- 001 \u2014 a product has its own choice groups (V1 \xABComplementos\xBB).
574
+ --
575
+ -- The modifier tables already hold name, min, max, required and each option's
576
+ -- price. Two things were missing for the product tab:
577
+ -- * a group can be switched off without being deleted (V1 \xABAtivo\xBB);
578
+ -- * one write that replaces a product's groups and options together. V1
579
+ -- wrote them one row at a time and a failure halfway left half a set.
580
+ --
581
+ -- Idempotent.
582
+ -- ---------------------------------------------------------------------------
583
+
584
+ ALTER TABLE public.plg_menu_modifier_groups
585
+ ADD COLUMN IF NOT EXISTS is_active boolean NOT NULL DEFAULT true;
586
+
587
+ COMMENT ON COLUMN public.plg_menu_modifier_groups.is_active IS
588
+ 'Off = the group stays configured but is not offered. V1: product_option_groups.active.';
589
+
590
+ -- SECURITY INVOKER: the same tenant policies the tables already enforce.
591
+ CREATE OR REPLACE FUNCTION public.menu_save_product_option_groups(p_product uuid, p_groups jsonb)
592
+ RETURNS void
593
+ LANGUAGE plpgsql
594
+ SECURITY INVOKER
595
+ SET search_path = ''
596
+ AS $$
597
+ DECLARE
598
+ v_tenant uuid;
599
+ v_group jsonb;
600
+ v_item jsonb;
601
+ v_group_id uuid;
602
+ v_kept_groups uuid[] := '{}';
603
+ v_kept_items uuid[];
604
+ v_item_id uuid;
605
+ v_removed uuid[];
606
+ BEGIN
607
+ SELECT p.tenant_id INTO v_tenant FROM public.products p WHERE p.id = p_product;
608
+ IF v_tenant IS NULL THEN
609
+ RAISE EXCEPTION 'product not found' USING ERRCODE = '42501';
610
+ END IF;
611
+
612
+ FOR v_group IN SELECT * FROM jsonb_array_elements(coalesce(p_groups, '[]'::jsonb)) LOOP
613
+ v_group_id := nullif(v_group->>'id', '')::uuid;
614
+ IF v_group_id IS NOT NULL AND NOT EXISTS (
615
+ SELECT 1 FROM public.plg_menu_item_modifier_groups l
616
+ WHERE l.product_id = p_product AND l.group_id = v_group_id
617
+ ) THEN
618
+ -- An id that is not this product's group is treated as new, never as a
619
+ -- licence to edit someone else's group.
620
+ v_group_id := NULL;
621
+ END IF;
622
+
623
+ IF v_group_id IS NULL THEN
624
+ INSERT INTO public.plg_menu_modifier_groups
625
+ (tenant_id, name, min_selections, max_selections, is_required, is_active, sort_order)
626
+ VALUES
627
+ (v_tenant, v_group->>'name', (v_group->>'minSelections')::int, (v_group->>'maxSelections')::int,
628
+ coalesce((v_group->>'isRequired')::boolean, false), coalesce((v_group->>'isActive')::boolean, true),
629
+ coalesce((v_group->>'sortOrder')::int, 0))
630
+ RETURNING id INTO v_group_id;
631
+ ELSE
632
+ UPDATE public.plg_menu_modifier_groups SET
633
+ name = v_group->>'name',
634
+ min_selections = (v_group->>'minSelections')::int,
635
+ max_selections = (v_group->>'maxSelections')::int,
636
+ is_required = coalesce((v_group->>'isRequired')::boolean, false),
637
+ is_active = coalesce((v_group->>'isActive')::boolean, true),
638
+ sort_order = coalesce((v_group->>'sortOrder')::int, 0)
639
+ WHERE id = v_group_id;
640
+ END IF;
641
+
642
+ INSERT INTO public.plg_menu_item_modifier_groups (tenant_id, product_id, group_id, sort_order)
643
+ VALUES (v_tenant, p_product, v_group_id, coalesce((v_group->>'sortOrder')::int, 0))
644
+ ON CONFLICT (product_id, group_id) DO UPDATE SET sort_order = EXCLUDED.sort_order;
645
+
646
+ v_kept_groups := v_kept_groups || v_group_id;
647
+ v_kept_items := '{}';
648
+
649
+ FOR v_item IN SELECT * FROM jsonb_array_elements(coalesce(v_group->'items', '[]'::jsonb)) LOOP
650
+ v_item_id := nullif(v_item->>'id', '')::uuid;
651
+ IF v_item_id IS NOT NULL AND NOT EXISTS (
652
+ SELECT 1 FROM public.plg_menu_modifiers m WHERE m.id = v_item_id AND m.group_id = v_group_id
653
+ ) THEN
654
+ v_item_id := NULL;
655
+ END IF;
656
+ IF v_item_id IS NULL THEN
657
+ INSERT INTO public.plg_menu_modifiers (tenant_id, group_id, name, price_adjustment, is_active, sort_order)
658
+ VALUES (v_tenant, v_group_id, v_item->>'name', coalesce((v_item->>'priceAdjustment')::numeric, 0),
659
+ coalesce((v_item->>'isActive')::boolean, true), coalesce((v_item->>'sortOrder')::int, 0))
660
+ RETURNING id INTO v_item_id;
661
+ ELSE
662
+ UPDATE public.plg_menu_modifiers SET
663
+ name = v_item->>'name',
664
+ price_adjustment = coalesce((v_item->>'priceAdjustment')::numeric, 0),
665
+ is_active = coalesce((v_item->>'isActive')::boolean, true),
666
+ sort_order = coalesce((v_item->>'sortOrder')::int, 0)
667
+ WHERE id = v_item_id;
668
+ END IF;
669
+ v_kept_items := v_kept_items || v_item_id;
670
+ END LOOP;
671
+
672
+ DELETE FROM public.plg_menu_modifiers m
673
+ WHERE m.group_id = v_group_id AND NOT (m.id = ANY (v_kept_items));
674
+ END LOOP;
675
+
676
+ -- Groups removed from this product: unlink, and drop the group only when no
677
+ -- other product still uses it.
678
+ SELECT coalesce(array_agg(l.group_id), '{}') INTO v_removed
679
+ FROM public.plg_menu_item_modifier_groups l
680
+ WHERE l.product_id = p_product AND NOT (l.group_id = ANY (v_kept_groups));
681
+ DELETE FROM public.plg_menu_item_modifier_groups l
682
+ WHERE l.product_id = p_product AND l.group_id = ANY (v_removed);
683
+ DELETE FROM public.plg_menu_modifier_groups g
684
+ WHERE g.id = ANY (v_removed)
685
+ AND NOT EXISTS (SELECT 1 FROM public.plg_menu_item_modifier_groups l WHERE l.group_id = g.id);
686
+ END;
687
+ $$;
688
+
689
+ REVOKE ALL ON FUNCTION public.menu_save_product_option_groups(uuid, jsonb) FROM PUBLIC, anon;
690
+ GRANT EXECUTE ON FUNCTION public.menu_save_product_option_groups(uuid, jsonb) TO authenticated;
691
+ `;
692
+ var MIGRATIONS = [
693
+ { id: "000_baseline", sql: MIGRATION_000_BASELINE },
694
+ { id: "002_o_produto_tem_complementos", sql: MIGRATION_002_O_PRODUTO_TEM_COMPLEMENTOS }
695
+ ];
696
+
697
+ export { MIGRATIONS, MIGRATION_000_BASELINE, MIGRATION_002_O_PRODUTO_TEM_COMPLEMENTOS };
698
+ //# sourceMappingURL=main.js.map
699
+ //# sourceMappingURL=main.js.map