A Agência PSI nasce da convergência entre tecnologia, clínica e pensamento psicanalítico. Trata-se de uma iniciativa voltada ao desenvolvimento de soluções digitais para profissionais da saúde mental, especialmente psicólogos e psicanalistas, com o objetivo de simplificar a gestão clínica sem reduzir a complexidade do cuidado humano.
Mais do que um simples software, a Agência PSI busca construir um ecossistema que integra agenda clínica, prontuário, gestão de pacientes e recursos administrativos em uma plataforma intuitiva e segura. A proposta central é permitir que o profissional concentre sua energia na escuta e no trabalho clínico, enquanto as tarefas operacionais se tornam mais organizadas e eficientes.
Inspirada na ideia de que a clínica contemporânea também se encontra atravessada pela tecnologia, a Agência PSI procura equilibrar dois campos que, muitas vezes, parecem distantes: a subjetividade humana e a lógica dos sistemas digitais. Nesse sentido, a plataforma foi pensada para respeitar a ética, o sigilo e a singularidade do atendimento psicológico.
Assim, a Agência PSI se apresenta como uma ferramenta de apoio ao trabalho clínico, promovendo autonomia, organização e profissionalização para terapeutas que desejam atuar de forma mais estruturada no cenário atual.
', 0, true, '2026-03-08 01:01:03.726348+00', '2026-03-08 01:43:41.088+00'),
- ('bce71119-22a9-49a7-ae4e-d6fbe42eee27', '08db54a3-4601-4708-bb07-3c2efe84f132', 'E agora, vem a pergunta 2?', '
Sim.
', 1, true, '2026-03-08 01:01:03.758901+00', '2026-03-08 01:43:41.137+00');
-
-
---
--- Data for Name: subscriptions; Type: TABLE DATA; Schema: public; Owner: supabase_admin
---
-
-INSERT INTO "public"."subscriptions" ("id", "user_id", "plan_id", "status", "current_period_start", "current_period_end", "cancel_at_period_end", "provider", "provider_customer_id", "provider_subscription_id", "created_at", "updated_at", "tenant_id", "plan_key", "interval", "source", "started_at", "canceled_at", "activated_at", "past_due_since", "suspended_at", "suspended_reason", "cancelled_at", "cancel_reason", "expired_at") VALUES
- ('14a232bb-95da-400b-8547-df33e3acb2cb', NULL, 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', 'active', '2026-03-01 16:10:28.586893+00', '2027-03-01 16:10:28.586893+00', false, 'manual', NULL, NULL, '2026-03-01 16:10:28.586893+00', '2026-03-01 22:46:06.127205+00', '01b89c85-8e1b-43e2-bf10-77f4428ea582', 'clinic_pro', 'year', 'manual', '2026-03-01 16:10:28.586893+00', NULL, '2026-03-01 16:10:28.586893+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('c700073d-35cc-4bd9-9bea-113dd87a1b76', NULL, 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', 'active', '2026-03-01 14:17:25.099539+00', '2027-03-01 14:17:25.099539+00', false, 'manual', NULL, NULL, '2026-03-01 14:17:25.099539+00', '2026-03-01 14:17:25.099539+00', 'f491f4d4-7801-4f80-bd01-1ba18f647034', 'clinic_pro', 'year', 'manual', '2026-03-01 14:17:25.099539+00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
- ('29e61e41-090a-4367-b0f7-33fea2a65736', NULL, 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', 'active', '2026-03-01 23:00:29.467613+00', '2027-03-01 23:00:29.467613+00', false, 'manual', NULL, NULL, '2026-03-01 23:00:29.467613+00', '2026-03-02 13:23:55.426163+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'clinic_pro', 'year', 'manual', '2026-03-01 23:00:29.467613+00', NULL, '2026-03-01 23:00:29.467613+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('a78efb68-d773-4a52-9140-ed4c74152bd7', NULL, '01a5867f-0705-4714-ac97-a23470949157', 'active', NULL, NULL, false, 'manual', NULL, NULL, '2026-03-03 19:34:19.756429+00', '2026-03-03 19:34:19.756429+00', '29686ba1-6c57-49e0-9a6d-d0ddfff3b41a', 'clinic_free', NULL, 'manual', '2026-03-03 19:34:19.756429+00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
- ('42abc1c8-922b-428c-82d3-7bf3d7cd92ad', NULL, '01a5867f-0705-4714-ac97-a23470949157', 'active', NULL, NULL, false, 'manual', NULL, NULL, '2026-03-03 19:34:19.756429+00', '2026-03-03 19:34:19.756429+00', 'ee7d5c69-52bc-4875-826b-5f6c9561bc6b', 'clinic_free', NULL, 'manual', '2026-03-03 19:34:19.756429+00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
- ('12f90a1c-9699-4990-b327-10a5c5774428', NULL, '01a5867f-0705-4714-ac97-a23470949157', 'active', NULL, NULL, false, 'manual', NULL, NULL, '2026-03-03 19:34:19.756429+00', '2026-03-03 19:34:19.756429+00', 'dfd3f623-7ac7-4b07-af4d-5ad7c3ba0a87', 'clinic_free', NULL, 'manual', '2026-03-03 19:34:19.756429+00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
- ('04994df5-5b28-476e-b5fa-8855816931f5', NULL, '01a5867f-0705-4714-ac97-a23470949157', 'active', NULL, NULL, false, 'manual', NULL, NULL, '2026-03-03 19:34:19.756429+00', '2026-03-03 19:34:19.756429+00', '60fc942e-fd6d-428a-b125-82190d92e4ac', 'clinic_free', NULL, 'manual', '2026-03-03 19:34:19.756429+00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
- ('6b73333a-2cd2-4584-ac2f-75e51e9d6b0b', NULL, '01a5867f-0705-4714-ac97-a23470949157', 'active', NULL, NULL, false, 'manual', NULL, NULL, '2026-03-03 19:34:19.756429+00', '2026-03-03 19:34:19.756429+00', 'bc4902c5-09bc-40ad-8f05-10bbeee1c073', 'clinic_free', NULL, 'manual', '2026-03-03 19:34:19.756429+00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
- ('9879b74d-ce28-4c51-8470-513650e8aa46', NULL, '01a5867f-0705-4714-ac97-a23470949157', 'active', '2026-03-01 23:00:05.767711+00', '2027-03-01 23:00:05.767711+00', false, 'manual', NULL, NULL, '2026-03-01 23:00:05.767711+00', '2026-03-03 19:36:32.24533+00', '51a475d2-7f11-43d7-b47d-3e78dcd3bd16', 'clinic_free', 'year', 'manual', '2026-03-01 23:00:05.767711+00', NULL, '2026-03-01 23:00:05.767711+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('3f8f521f-c394-4798-b58d-029937dab649', NULL, '01a5867f-0705-4714-ac97-a23470949157', 'active', '2026-03-03 22:43:41.705072+00', '2026-04-02 22:43:41.705072+00', false, 'manual', NULL, NULL, '2026-03-03 22:43:41.705072+00', '2026-03-03 22:43:41.705072+00', 'bbbbbbbb-0003-0003-0003-000000000003', 'clinic_free', 'month', 'seed', '2026-03-03 22:43:41.705072+00', NULL, '2026-03-03 22:43:41.705072+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('2cdf8eb9-8561-47af-b05e-f395e02d0aa5', NULL, '01a5867f-0705-4714-ac97-a23470949157', 'active', '2026-03-03 22:43:41.705072+00', '2026-04-02 22:43:41.705072+00', false, 'manual', NULL, NULL, '2026-03-03 22:43:41.705072+00', '2026-03-03 22:43:41.705072+00', 'bbbbbbbb-0004-0004-0004-000000000004', 'clinic_free', 'month', 'seed', '2026-03-03 22:43:41.705072+00', NULL, '2026-03-03 22:43:41.705072+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('112cb9f5-3120-49e5-886d-4346ccb27edd', 'aaaaaaaa-0001-0001-0001-000000000001', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', 'active', '2026-03-03 22:43:41.705072+00', '2026-04-02 22:43:41.705072+00', false, 'manual', NULL, NULL, '2026-03-03 22:43:41.705072+00', '2026-03-04 17:24:56.964418+00', NULL, 'therapist_free', 'month', 'seed', '2026-03-03 22:43:41.705072+00', NULL, '2026-03-03 22:43:41.705072+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('d4a09e95-eeb7-40ee-b737-3d762a6ba8da', 'aaaaaaaa-0009-0009-0009-000000000009', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', 'active', '2026-03-04 19:40:17.694488+00', '2026-04-03 19:40:17.694488+00', false, 'manual', NULL, NULL, '2026-03-04 19:40:17.694488+00', '2026-03-04 19:40:17.694488+00', NULL, 'therapist_free', 'month', 'seed', '2026-03-04 19:40:17.694488+00', NULL, '2026-03-04 19:40:17.694488+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('99da40c5-81d9-4560-8a7f-811203314547', 'aaaaaaaa-0010-0010-0010-000000000010', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', 'active', '2026-03-04 19:40:17.694488+00', '2026-04-03 19:40:17.694488+00', false, 'manual', NULL, NULL, '2026-03-04 19:40:17.694488+00', '2026-03-04 19:40:17.694488+00', NULL, 'therapist_free', 'month', 'seed', '2026-03-04 19:40:17.694488+00', NULL, '2026-03-04 19:40:17.694488+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('fe15888b-60b3-4ae2-bc33-3febf6b7dff9', 'aaaaaaaa-0008-0008-0008-000000000008', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', 'active', '2026-03-04 17:23:46.708711+00', '2026-04-03 17:23:46.708711+00', false, 'manual', NULL, NULL, '2026-03-04 17:23:46.708711+00', '2026-03-04 20:06:18.002704+00', NULL, 'therapist_free', 'month', 'fix_seed', '2026-03-04 17:23:46.708711+00', NULL, '2026-03-04 17:23:46.708711+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('ca490958-d557-4407-ad04-fdfb134675f6', 'aaaaaaaa-0007-0007-0007-000000000007', 'ca28e46c-0687-45d5-9406-0a0f56a5b625', 'active', '2026-03-05 01:15:36.377017+00', '2027-03-05 01:15:36.377017+00', false, 'manual', NULL, NULL, '2026-03-04 17:23:46.708711+00', '2026-03-05 01:15:36.377017+00', NULL, 'supervisor_pro', 'year', 'manual', '2026-03-04 17:23:46.708711+00', NULL, '2026-03-04 17:23:46.708711+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('5688fed8-1dc5-4bc1-9d19-91562c10a310', 'aaaaaaaa-0002-0002-0002-000000000002', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', 'active', '2026-03-03 22:43:41.705072+00', '2026-04-02 22:43:41.705072+00', false, 'manual', NULL, NULL, '2026-03-03 22:43:41.705072+00', '2026-03-05 10:18:46.485009+00', NULL, 'therapist_pro', 'month', 'seed', '2026-03-03 22:43:41.705072+00', NULL, '2026-03-03 22:43:41.705072+00', NULL, NULL, NULL, NULL, NULL, NULL),
- ('d2bd838f-5ac6-46f9-9282-4ddd0378e0a0', NULL, 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', 'active', '2026-03-03 22:43:41.705072+00', '2026-04-02 22:43:41.705072+00', false, 'manual', NULL, NULL, '2026-03-03 22:43:41.705072+00', '2026-03-06 02:53:19.171984+00', 'bbbbbbbb-0005-0005-0005-000000000005', 'clinic_pro', 'month', 'seed', '2026-03-03 22:43:41.705072+00', NULL, '2026-03-03 22:43:41.705072+00', NULL, NULL, NULL, NULL, NULL, NULL);
-
-
---
--- Data for Name: subscription_events; Type: TABLE DATA; Schema: public; Owner: supabase_admin
---
-
-INSERT INTO "public"."subscription_events" ("id", "subscription_id", "owner_id", "event_type", "old_plan_id", "new_plan_id", "created_at", "created_by", "source", "reason", "metadata", "owner_type", "owner_ref") VALUES
- ('0ac1b150-4918-4f39-9606-d22a0355a7d6', '14a232bb-95da-400b-8547-df33e3acb2cb', '01b89c85-8e1b-43e2-bf10-77f4428ea582', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-01 22:46:00.062729+00', '1715ec83-9a30-4dce-b73a-2deb66dcfb13', 'admin_panel', 'Plan change via admin panel', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145"}', 'clinic', '01b89c85-8e1b-43e2-bf10-77f4428ea582'),
- ('7b1abd18-2502-4a0c-ab99-8e896949ba70', '14a232bb-95da-400b-8547-df33e3acb2cb', '01b89c85-8e1b-43e2-bf10-77f4428ea582', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-01 22:46:06.127205+00', '1715ec83-9a30-4dce-b73a-2deb66dcfb13', 'admin_panel', 'Plan change via admin panel', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157"}', 'clinic', '01b89c85-8e1b-43e2-bf10-77f4428ea582'),
- ('ee58e94b-956d-499d-ba8e-fcd96ce67f71', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 10:16:25.756235+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'admin_panel', 'Plan change via admin panel', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('4476c2e4-3d80-4f89-9dbd-348a3ef0c24f', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 10:16:30.237286+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'admin_panel', 'Plan change via admin panel', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('f442c7dc-9f84-48d6-ae94-91d20b584600', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 10:16:36.794144+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'admin_panel', 'Plan change via admin panel', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('d9f6da69-82e4-420a-b635-7ad387d78eb1', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 10:16:42.129262+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'admin_panel', 'Plan change via admin panel', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('24b0d04e-5aec-4a0f-97e3-5f7233ac4b34', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 10:16:55.626723+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'admin_panel', 'Plan change via admin panel', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('500b4aa4-720a-4c09-a0f7-15eba88cefb2', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 10:17:03.115842+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'admin_panel', 'Plan change via admin panel', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('22ca6007-d165-4766-965c-ac7108c1613a', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:15:14.983937+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('f059a638-4fa9-429b-a3ca-b14e4737ed9c', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:15:20.239736+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('700479d6-c51f-4440-a269-2606240627b5', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:16:02.350846+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('aa3b2ae1-21c1-4da1-90a1-739d26cc7321', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:16:08.189127+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('7aa3c6e8-0ad2-492a-9ff6-2caf0d9476a2', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:17:11.939539+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('5b09a306-1dc3-410e-b2dc-04b7fd2721de', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:17:18.090643+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('0f380398-3958-4852-9c24-1d5688609428', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:24:51.887608+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('5ffe2a58-64f0-4178-956c-c89bf2c28525', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:24:59.680817+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('50e7dec7-875b-4a63-861c-a37f8d5e68fa', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:25:06.579127+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('5ad68a8a-3bea-4d0f-80f3-077b1f11cd9b', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:25:35.147684+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('e35f9408-7cfb-4ab4-8ef1-7df333fc9ca8', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:25:41.854726+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('47b626fe-e46e-4b8a-abd8-cdfe0202547b', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:25:17.872637+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('8d968f3d-fa72-4c1f-9fad-6cca3f0c74d3', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:29:29.235947+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('3ca36bc3-ef72-4a3f-b398-24ad2140ae1d', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:29:39.054035+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('fcec216c-256b-4913-b963-12b8c49df4e3', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:29:44.115983+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('b1400d45-cd0a-4e3b-abcc-4de042c5004a', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:29:49.528958+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('6f200e77-04d3-4c01-8f62-8e41a8353805', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:29:54.178414+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('d871aceb-6f44-4a45-b8d5-77ed63054bb4', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:29:59.720946+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('55d09484-3181-45e1-8895-a8fbbc6e2b91', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:32:07.989229+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('a1f9b8e7-897f-4df9-9513-c2fc6a789b23', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:38:11.905472+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('f8f34136-eb64-48c0-adbc-0c4f11b81728', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:42:55.486033+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('f8d73fff-971a-4708-830d-97f7277d9b1d', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:43:02.514543+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('adf177c9-efe9-4ae1-a9fd-9c9931f8ee2e', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:53:02.703275+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('8c5b9772-951c-4af5-a35b-2f6e5c21ff8c', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:53:10.454794+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('a2d06936-d15f-4955-a534-4d2aa62c4a7f', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:56:37.131664+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('223f3a89-cc98-4660-8ff6-1a278eedba84', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:56:42.104606+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('11635205-cc2a-4af0-80c9-c270b9c01422', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 11:58:10.972092+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('36b3c5d6-3161-41ce-948c-8b7b9a89bece', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 11:58:18.01086+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('cbe9a080-276f-48f2-a0c6-777081c07d22', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 12:00:58.336294+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('c68c2422-f793-4a50-91b6-f0e44ebdf255', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 12:01:06.833943+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('b24b0f0e-7874-437d-a3cd-4b73a8609a00', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 12:01:12.161814+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('2128e7f1-550d-4df0-9f2a-3640de02f19b', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 12:01:20.473071+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('96f19a2b-6276-42b3-ad51-faffc7849650', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 12:02:01.959145+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('361140f4-5bc2-4b54-82e1-079831d9d2f1', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 12:02:07.315773+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('da19d476-abc8-4f90-8d83-70298dc0da20', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 12:17:38.864724+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('cc83e64d-6076-4a85-a2cb-ca1c5e95a7df', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 12:17:46.462048+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('6e076b81-1689-4a95-8de9-8bcc2fe2625a', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 12:19:13.253056+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('ac1ff98d-589c-43a5-890b-c2699ca3fbed', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 12:19:24.11638+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('8ff6d815-075d-4632-baac-66aa4fabcc58', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-02 13:23:49.772165+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('331df305-0c3c-48cf-bf7b-19dda81a9a5d', '29e61e41-090a-4367-b0f7-33fea2a65736', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-02 13:23:55.426163+00', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '816b24fe-a0c3-4409-b79b-c6c0a6935d03'),
- ('913d001f-8cc3-4f32-a71f-decfc8f03119', '9879b74d-ce28-4c51-8470-513650e8aa46', '51a475d2-7f11-43d7-b47d-3e78dcd3bd16', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-03 18:52:25.662322+00', '93ac96ab-d9d7-422b-81de-ae2fd4449fe3', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '51a475d2-7f11-43d7-b47d-3e78dcd3bd16'),
- ('8d53dddc-099a-4f36-a6ba-a8a1359a494a', '9879b74d-ce28-4c51-8470-513650e8aa46', '51a475d2-7f11-43d7-b47d-3e78dcd3bd16', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-03 18:52:33.027523+00', '93ac96ab-d9d7-422b-81de-ae2fd4449fe3', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', '51a475d2-7f11-43d7-b47d-3e78dcd3bd16'),
- ('51e66650-cc8f-42df-aa2c-def6e03873d5', '9879b74d-ce28-4c51-8470-513650e8aa46', '51a475d2-7f11-43d7-b47d-3e78dcd3bd16', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-03 19:36:32.24533+00', '93ac96ab-d9d7-422b-81de-ae2fd4449fe3', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', '51a475d2-7f11-43d7-b47d-3e78dcd3bd16'),
- ('6fb7cd22-5bf0-4e6d-8b30-c03179051933', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-04 12:35:57.962865+00', 'aaaaaaaa-0005-0005-0005-000000000005', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('5e923d5a-1b87-4993-a1f7-b3150ed86557', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-04 12:36:02.521585+00', 'aaaaaaaa-0005-0005-0005-000000000005', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('d0a0c6ea-6839-409c-b50c-14ac3760111a', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-04 12:36:34.297781+00', 'aaaaaaaa-0005-0005-0005-000000000005', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('7c023264-c2b2-4413-a7f0-4b8a3a5f3728', '112cb9f5-3120-49e5-886d-4346ccb27edd', 'aaaaaaaa-0001-0001-0001-000000000001', 'plan_changed', '984c1f29-a975-4208-93ac-2118ed1039b7', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '2026-03-04 17:24:56.964418+00', 'aaaaaaaa-0006-0006-0006-000000000006', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_key": "therapist_free", "previous_plan": "984c1f29-a975-4208-93ac-2118ed1039b7", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0001-0001-0001-000000000001'),
- ('5b8c01ed-e846-4751-8d8a-7838b18a1789', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-04 19:55:59.843618+00', 'aaaaaaaa-0008-0008-0008-000000000008', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('3fbb8cfb-3aeb-4332-8e7e-4184f1a75705', 'fe15888b-60b3-4ae2-bc33-3febf6b7dff9', 'aaaaaaaa-0008-0008-0008-000000000008', 'plan_changed', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', '2026-03-04 19:56:17.664639+00', 'aaaaaaaa-0008-0008-0008-000000000008', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_key": "therapist_pro", "previous_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0008-0008-0008-000000000008'),
- ('c4dde348-b6ba-4588-9071-5650b074f4b4', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-04 19:56:31.853191+00', 'aaaaaaaa-0008-0008-0008-000000000008', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('92670ac5-e24f-4e89-83c1-52da4ddf008d', 'fe15888b-60b3-4ae2-bc33-3febf6b7dff9', 'aaaaaaaa-0008-0008-0008-000000000008', 'plan_changed', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '2026-03-04 19:56:49.08429+00', 'aaaaaaaa-0008-0008-0008-000000000008', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_key": "therapist_free", "previous_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0008-0008-0008-000000000008'),
- ('6d94c18d-b062-4db1-9d73-f747ae1bb29a', 'fe15888b-60b3-4ae2-bc33-3febf6b7dff9', 'aaaaaaaa-0008-0008-0008-000000000008', 'plan_changed', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', '2026-03-04 20:05:46.201601+00', 'aaaaaaaa-0008-0008-0008-000000000008', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_key": "therapist_pro", "previous_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0008-0008-0008-000000000008'),
- ('d0bd6dfb-ace7-423d-a37d-1992f96c0e88', 'fe15888b-60b3-4ae2-bc33-3febf6b7dff9', 'aaaaaaaa-0008-0008-0008-000000000008', 'plan_changed', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '2026-03-04 20:05:54.037686+00', 'aaaaaaaa-0008-0008-0008-000000000008', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_key": "therapist_free", "previous_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0008-0008-0008-000000000008'),
- ('405d716c-0b0b-42d1-b427-90b741fd4d21', 'fe15888b-60b3-4ae2-bc33-3febf6b7dff9', 'aaaaaaaa-0008-0008-0008-000000000008', 'plan_changed', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', '2026-03-04 20:06:11.300988+00', 'aaaaaaaa-0008-0008-0008-000000000008', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_key": "therapist_pro", "previous_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0008-0008-0008-000000000008'),
- ('5b9adeab-64de-4da5-84d5-19d7c6fc2144', 'fe15888b-60b3-4ae2-bc33-3febf6b7dff9', 'aaaaaaaa-0008-0008-0008-000000000008', 'plan_changed', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '2026-03-04 20:06:18.002704+00', 'aaaaaaaa-0008-0008-0008-000000000008', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_key": "therapist_free", "previous_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0008-0008-0008-000000000008'),
- ('c7d31fd7-3777-4dea-ae54-453b74ef6a2e', '5688fed8-1dc5-4bc1-9d19-91562c10a310', 'aaaaaaaa-0002-0002-0002-000000000002', 'plan_changed', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', '2026-03-04 20:07:20.982706+00', 'aaaaaaaa-0002-0002-0002-000000000002', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_key": "therapist_pro", "previous_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0002-0002-0002-000000000002'),
- ('51d2a479-25b6-4b72-9600-8d824ee1dbf3', '5688fed8-1dc5-4bc1-9d19-91562c10a310', 'aaaaaaaa-0002-0002-0002-000000000002', 'plan_changed', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '2026-03-05 00:18:00.527748+00', 'aaaaaaaa-0002-0002-0002-000000000002', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_key": "therapist_free", "previous_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0002-0002-0002-000000000002'),
- ('c4b00864-bc89-4338-98a9-a429ec723143', '5688fed8-1dc5-4bc1-9d19-91562c10a310', 'aaaaaaaa-0002-0002-0002-000000000002', 'plan_changed', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', '2026-03-05 00:18:03.728382+00', 'aaaaaaaa-0002-0002-0002-000000000002', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_key": "therapist_pro", "previous_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0002-0002-0002-000000000002'),
- ('3c10ace6-e687-45f3-856f-8382b698d4d5', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-05 00:18:20.9309+00', 'aaaaaaaa-0007-0007-0007-000000000007', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('e477faad-fd05-43d5-848f-6818f9210190', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-05 00:18:26.781326+00', 'aaaaaaaa-0007-0007-0007-000000000007', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('9d4ac1c4-171d-4668-afd5-5c08a17d80bc', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-05 00:18:37.931971+00', 'aaaaaaaa-0007-0007-0007-000000000007', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('b349466b-7606-49c6-8355-3c6623bccc09', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-05 00:18:46.62777+00', 'aaaaaaaa-0007-0007-0007-000000000007', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('e6fb9c99-9a80-4769-9b4b-b175d7826c8b', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-05 00:19:51.700295+00', 'aaaaaaaa-0007-0007-0007-000000000007', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('0bbaa541-a039-488c-913d-d5158652b980', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-05 00:55:23.989399+00', 'aaaaaaaa-0007-0007-0007-000000000007', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('cc6c0214-9069-49de-8ab5-1974c8ea9e95', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '01a5867f-0705-4714-ac97-a23470949157', '2026-03-05 00:55:27.507279+00', 'aaaaaaaa-0007-0007-0007-000000000007', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_key": "clinic_free", "previous_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005'),
- ('4f8177fb-c9a5-4d63-8455-988aa2d9f452', '5688fed8-1dc5-4bc1-9d19-91562c10a310', 'aaaaaaaa-0002-0002-0002-000000000002', 'plan_changed', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '2026-03-05 10:18:42.036561+00', 'aaaaaaaa-0002-0002-0002-000000000002', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_key": "therapist_free", "previous_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0002-0002-0002-000000000002'),
- ('5ccbf2b5-c323-4300-b74c-51817c5fd4db', '5688fed8-1dc5-4bc1-9d19-91562c10a310', 'aaaaaaaa-0002-0002-0002-000000000002', 'plan_changed', 'c56fe2a8-2c17-4048-adc7-ff7fbd89461a', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', '2026-03-05 10:18:46.485009+00', 'aaaaaaaa-0002-0002-0002-000000000002', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "82067ba7-16f0-4803-b36f-4c4e8919d4b4", "new_plan_key": "therapist_pro", "previous_plan": "c56fe2a8-2c17-4048-adc7-ff7fbd89461a", "new_plan_target": "therapist"}', 'therapist', 'aaaaaaaa-0002-0002-0002-000000000002'),
- ('362484d9-cce1-472c-9d7f-fd943051ae77', 'd2bd838f-5ac6-46f9-9282-4ddd0378e0a0', 'bbbbbbbb-0005-0005-0005-000000000005', 'plan_changed', '01a5867f-0705-4714-ac97-a23470949157', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', '2026-03-06 02:53:19.171984+00', 'aaaaaaaa-0005-0005-0005-000000000005', 'dev_menu', 'Plan change via DEV menu', '{"new_plan": "a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145", "new_plan_key": "clinic_pro", "previous_plan": "01a5867f-0705-4714-ac97-a23470949157", "new_plan_target": "clinic"}', 'clinic', 'bbbbbbbb-0005-0005-0005-000000000005');
-
-
---
--- Data for Name: subscription_intents_legacy; Type: TABLE DATA; Schema: public; Owner: supabase_admin
---
-
-INSERT INTO "public"."subscription_intents_legacy" ("id", "user_id", "email", "plan_key", "interval", "amount_cents", "currency", "status", "source", "notes", "created_at", "paid_at", "tenant_id", "created_by_user_id") VALUES
- ('c03472bd-558a-4070-9b85-dd8fa9d865f5', NULL, 'teste@agenciapsi.com.br', 'clinic_pro', 'year', 149000, 'BRL', 'canceled', 'landing', NULL, '2026-03-01 12:30:19.324037+00', '2026-03-01 14:17:25.052+00', 'f491f4d4-7801-4f80-bd01-1ba18f647034', '8817508e-548c-427b-9d94-9b0bb9ef4669'),
- ('b9e19fa8-e5e5-4d46-ac4c-7565d0466b6d', NULL, 'teste2@agenciapsi.com.br', 'therapist_pro', 'year', 49000, 'BRL', 'paid', 'landing', NULL, '2026-03-01 14:32:55.799941+00', '2026-03-01 14:34:01.372+00', '60fc942e-fd6d-428a-b125-82190d92e4ac', 'b7e6a203-25f2-4e28-855a-9868c4cc6e74');
-
-
---
--- Data for Name: subscription_intents_personal; Type: TABLE DATA; Schema: public; Owner: supabase_admin
---
-
-INSERT INTO "public"."subscription_intents_personal" ("id", "user_id", "created_by_user_id", "email", "plan_id", "plan_key", "interval", "amount_cents", "currency", "status", "source", "notes", "created_at", "paid_at", "subscription_id") VALUES
- ('b9e19fa8-e5e5-4d46-ac4c-7565d0466b6d', 'b7e6a203-25f2-4e28-855a-9868c4cc6e74', 'b7e6a203-25f2-4e28-855a-9868c4cc6e74', 'teste2@agenciapsi.com.br', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', 'therapist_pro', 'year', 49000, 'BRL', 'paid', 'landing', NULL, '2026-03-01 14:32:55.799941+00', '2026-03-01 14:34:01.372+00', NULL),
- ('3ac8e889-adcc-4d6f-a7fe-57ad72fdde9a', 'ff5a39cb-b651-4e42-a0db-ac77295c3370', 'ff5a39cb-b651-4e42-a0db-ac77295c3370', 'tera3@agenciapsi.com.br', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', 'therapist_pro', 'year', 49000, 'BRL', 'paid', 'landing', NULL, '2026-03-01 15:03:56.75232+00', '2026-03-01 15:09:08.381+00', NULL),
- ('00ef890b-c3a0-4882-a536-54f998395c94', '66216eb3-15fc-45a3-b474-c7447901798a', '66216eb3-15fc-45a3-b474-c7447901798a', 'tera4@agenciapsi.com.br', '82067ba7-16f0-4803-b36f-4c4e8919d4b4', 'therapist_pro', 'year', 49000, 'BRL', 'paid', 'landing', NULL, '2026-03-01 16:06:09.937903+00', '2026-03-01 16:07:26.95+00', NULL);
-
-
---
--- Data for Name: subscription_intents_tenant; Type: TABLE DATA; Schema: public; Owner: supabase_admin
---
-
-INSERT INTO "public"."subscription_intents_tenant" ("id", "user_id", "created_by_user_id", "email", "plan_id", "plan_key", "interval", "amount_cents", "currency", "status", "source", "notes", "created_at", "paid_at", "tenant_id", "subscription_id") VALUES
- ('c03472bd-558a-4070-9b85-dd8fa9d865f5', '8817508e-548c-427b-9d94-9b0bb9ef4669', '8817508e-548c-427b-9d94-9b0bb9ef4669', 'teste@agenciapsi.com.br', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', 'clinic_pro', 'year', 149000, 'BRL', 'canceled', 'landing', NULL, '2026-03-01 12:30:19.324037+00', '2026-03-01 14:17:25.052+00', 'f491f4d4-7801-4f80-bd01-1ba18f647034', NULL),
- ('3812bf8b-49e3-45d9-b1cc-e78bf4e8b0f6', '1715ec83-9a30-4dce-b73a-2deb66dcfb13', '1715ec83-9a30-4dce-b73a-2deb66dcfb13', 'clinic4@agenciapsi.com.br', 'a74bc2d4-88c6-4cc6-b004-ef2bcb1b5145', 'clinic_pro', 'year', 149000, 'BRL', 'paid', 'landing', NULL, '2026-03-01 16:09:56.843502+00', '2026-03-01 16:10:28.563+00', '01b89c85-8e1b-43e2-bf10-77f4428ea582', '14a232bb-95da-400b-8547-df33e3acb2cb');
-
-
---
--- Data for Name: tenant_feature_exceptions_log; Type: TABLE DATA; Schema: public; Owner: supabase_admin
---
-
-
-
---
--- Data for Name: tenant_features; Type: TABLE DATA; Schema: public; Owner: supabase_admin
---
-
-
-
---
--- Data for Name: tenant_invites; Type: TABLE DATA; Schema: public; Owner: supabase_admin
---
-
-
-
---
--- Data for Name: tenant_modules; Type: TABLE DATA; Schema: public; Owner: supabase_admin
---
-
-
-
---
--- Data for Name: user_settings; Type: TABLE DATA; Schema: public; Owner: supabase_admin
---
-
-INSERT INTO "public"."user_settings" ("user_id", "theme_mode", "preset", "primary_color", "surface_color", "menu_mode", "created_at", "updated_at") VALUES
- ('aaaaaaaa-0005-0005-0005-000000000005', 'light', 'Aura', 'emerald', 'slate', 'static', '2026-03-04 03:17:57.617227+00', '2026-03-04 03:17:57.606+00');
-
-
---
--- Data for Name: buckets; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin
---
-
-INSERT INTO "storage"."buckets" ("id", "name", "owner", "created_at", "updated_at", "public", "avif_autodetection", "file_size_limit", "allowed_mime_types", "owner_id", "type") VALUES
- ('avatars', 'avatars', NULL, '2026-02-13 10:57:15.112446+00', '2026-02-13 10:57:15.112446+00', true, false, NULL, NULL, NULL, 'STANDARD'),
- ('saas-docs', 'saas-docs', NULL, '2026-03-07 12:18:17.11377+00', '2026-03-07 12:18:17.11377+00', true, false, NULL, NULL, NULL, 'STANDARD');
-
-
---
--- Data for Name: buckets_analytics; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin
---
-
-
-
---
--- Data for Name: buckets_vectors; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin
---
-
-
-
---
--- Data for Name: iceberg_namespaces; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin
---
-
-
-
---
--- Data for Name: iceberg_tables; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin
---
-
-
-
---
--- Data for Name: objects; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin
---
-
-INSERT INTO "storage"."objects" ("id", "bucket_id", "name", "owner", "created_at", "updated_at", "last_accessed_at", "metadata", "version", "owner_id", "user_metadata") VALUES
- ('50e11318-aa1b-49b1-838c-0d72d602381b', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/feb4adf6-1c9a-4b26-9a36-a115eb913491/avatar.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-13 10:59:56.62912+00', '2026-02-13 10:59:56.62912+00', '2026-02-13 10:59:56.62912+00', '{"eTag": "\"e8298226e90e0720ff95c90c5b61e08c\"", "size": 53065, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-13T10:59:56.614Z", "contentLength": 53065, "httpStatusCode": 200}', '54d59a6b-6c83-4cf1-a035-60673d3db77a', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('844ea52c-97f9-48b2-b6ff-819cbbf20632', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/855a710d-8e38-4573-8628-d0da761880d3/avatar.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-13 11:00:14.880981+00', '2026-02-13 11:00:14.880981+00', '2026-02-13 11:00:14.880981+00', '{"eTag": "\"e8298226e90e0720ff95c90c5b61e08c\"", "size": 53065, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-13T11:00:14.873Z", "contentLength": 53065, "httpStatusCode": 200}', 'f16ae449-1a78-48bb-b8f3-fe1808a1ac3e', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('06b0429c-6637-4412-9cff-0d5507a4209b', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/185f674e-c11c-4b54-817f-78b57bf60ebd/avatar.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-13 11:04:11.155662+00', '2026-02-13 11:04:11.155662+00', '2026-02-13 11:04:11.155662+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-13T11:04:11.137Z", "contentLength": 48710, "httpStatusCode": 200}', '04cfaa5c-83d1-491b-898e-9a8337304d3d', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('e940a717-5e89-40f7-b955-64acf085117f', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/a33dfec0-c954-467f-99a6-5f859b8d5168/avatar.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-13 11:28:36.307652+00', '2026-02-13 11:28:36.307652+00', '2026-02-13 11:28:36.307652+00', '{"eTag": "\"60d363c60025fd47681d9b9d50939a8d\"", "size": 158427, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-13T11:28:36.296Z", "contentLength": 158427, "httpStatusCode": 200}', '77921ca7-ac84-4217-be5d-f1bfcbed9f12', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('565e79e7-998a-4e14-a930-5dc80d0ea229', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/073566cb-8848-4cc0-9799-63821721301a/avatar.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-14 10:45:41.332186+00', '2026-02-14 10:45:41.332186+00', '2026-02-14 10:45:41.332186+00', '{"eTag": "\"1b4616f55d72d416d545f16b064e11cb\"", "size": 11068, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-14T10:45:41.322Z", "contentLength": 11068, "httpStatusCode": 200}', '245717d3-d822-461c-8c63-ed61b2b6e7c5', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('29bbc519-9640-43d0-8793-f5c720cc1cf7', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/41a9dea9-6b78-4935-b130-f12a401e524b/avatar.jpg', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-14 22:49:41.773524+00', '2026-02-14 22:49:41.773524+00', '2026-02-14 22:49:41.773524+00', '{"eTag": "\"a52df9c148a23f1940ad5342f23d4c02\"", "size": 46616, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2026-02-14T22:49:41.766Z", "contentLength": 46616, "httpStatusCode": 200}', 'c80f9964-7edd-462d-8978-ff275b03ddb8', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('7f643c66-dca6-4a7a-877f-6f95aed37333', 'avatars', 'intakes/d8e36584-bad9-4282-8ecc-85d11ef32ddf/1771113052395.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-14 23:50:52.468498+00', '2026-02-14 23:50:52.468498+00', '2026-02-14 23:50:52.468498+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-14T23:50:52.460Z", "contentLength": 48710, "httpStatusCode": 200}', '7b0ec2d7-3311-482d-808f-ac2ed5cd8382', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('9611f77f-6ddf-4686-9553-a2958dc4c0b4', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/41a9dea9-6b78-4935-b130-f12a401e524b/avatar.webp', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-14 22:41:18.666508+00', '2026-02-14 22:51:13.970348+00', '2026-02-14 22:41:18.666508+00', '{"eTag": "\"af758fda0f2989c0fe7e39c321769aae\"", "size": 62662, "mimetype": "image/webp", "cacheControl": "max-age=3600", "lastModified": "2026-02-14T22:51:13.964Z", "contentLength": 62662, "httpStatusCode": 200}', '32fb3e00-753f-4ee7-86a5-25d5080c61ce', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('099c0773-5d11-4d2a-a211-888665730eae', 'avatars', 'intakes/d8e36584-bad9-4282-8ecc-85d11ef32ddf/1771112303349.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-14 23:38:23.455894+00', '2026-02-14 23:38:23.455894+00', '2026-02-14 23:38:23.455894+00', '{"eTag": "\"74507674e136ced661770458c66ae98f\"", "size": 163818, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-14T23:38:23.441Z", "contentLength": 163818, "httpStatusCode": 200}', 'b4c571de-82a4-4bf0-8dc2-3b01f3f787ad', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('22c6f5ed-2e0e-45e8-aed9-141dd0e8f8f7', 'avatars', 'intakes/d8e36584-bad9-4282-8ecc-85d11ef32ddf/1771114348468.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 00:12:28.566767+00', '2026-02-15 00:12:28.566767+00', '2026-02-15 00:12:28.566767+00', '{"eTag": "\"74507674e136ced661770458c66ae98f\"", "size": 163818, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T00:12:28.545Z", "contentLength": 163818, "httpStatusCode": 200}', '2adbac99-15a5-4b25-a62e-59e8752fd05f', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('5e223e52-2e7e-42a5-b2bc-9842e324102b', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/41a9dea9-6b78-4935-b130-f12a401e524b/avatar.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-14 21:55:49.427204+00', '2026-02-15 03:28:17.452824+00', '2026-02-14 21:55:49.427204+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T03:28:17.435Z", "contentLength": 48710, "httpStatusCode": 200}', 'b827ddef-3858-43dc-8c67-4856682a9e62', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('adaca36b-0e67-491b-bd5e-65b629d8fd94', 'avatars', 'intakes/d8e36584-bad9-4282-8ecc-85d11ef32ddf/1771115670697.jpg', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 00:34:30.75628+00', '2026-02-15 00:34:30.75628+00', '2026-02-15 00:34:30.75628+00', '{"eTag": "\"ef32cf7cfbb4f5f02cf6232c16eab2d5\"", "size": 81994, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T00:34:30.743Z", "contentLength": 81994, "httpStatusCode": 200}', 'f7b66f46-3eb4-49b8-b5cf-5a88de726bc1', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('3325a9e2-388e-4d50-b43f-5a15b3d431d4', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/c6d73ef9-d0f5-4f3b-8113-e06b1e0d2ed1/avatar.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 03:44:03.89885+00', '2026-02-15 03:44:03.89885+00', '2026-02-15 03:44:03.89885+00', '{"eTag": "\"7b64ce3cc393706c34f9717d7e37d19f\"", "size": 48619, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T03:44:03.892Z", "contentLength": 48619, "httpStatusCode": 200}', '18d424a8-ceaf-47ff-a77e-b174dd58e573', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('bf8becb8-d2ac-405e-8625-7b3caf34dac5', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771128971606.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 04:16:11.704431+00', '2026-02-15 04:16:11.704431+00', '2026-02-15 04:16:11.704431+00', '{"eTag": "\"74507674e136ced661770458c66ae98f\"", "size": 163818, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T04:16:11.692Z", "contentLength": 163818, "httpStatusCode": 200}', '26e1e831-fed6-4aaa-8abf-175d7d6693f1', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('6d88e419-dbba-4b22-8188-293bcbfcfb29', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771129446221.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 04:24:06.331623+00', '2026-02-15 04:24:06.331623+00', '2026-02-15 04:24:06.331623+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T04:24:06.318Z", "contentLength": 48710, "httpStatusCode": 200}', '24f41446-456f-49d1-b4bd-df6ffd31943f', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('9adcb0e7-0383-441a-a884-992d771f871c', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771129756674.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 04:29:16.785291+00', '2026-02-15 04:29:16.785291+00', '2026-02-15 04:29:16.785291+00', '{"eTag": "\"d261f9999980baf36dc11dba9bddcc34\"", "size": 1093361, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T04:29:16.768Z", "contentLength": 1093361, "httpStatusCode": 200}', '72d36469-fab3-4f4b-ab45-ee501cb4a7e5', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('36055339-9426-4b60-a8c6-8c9f0efa5fdb', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771130629382.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 04:43:49.458561+00', '2026-02-15 04:43:49.458561+00', '2026-02-15 04:43:49.458561+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T04:43:49.449Z", "contentLength": 48710, "httpStatusCode": 200}', '72c41d69-16fc-4ca8-9ab0-37be981d3298', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('d9566165-66f7-4700-a89a-ab495ed7d55e', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771130649087.jpg', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 04:44:09.152935+00', '2026-02-15 04:44:09.152935+00', '2026-02-15 04:44:09.152935+00', '{"eTag": "\"7956953d5fe6ad5eab52078fb0ea6e02\"", "size": 179152, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T04:44:09.140Z", "contentLength": 179152, "httpStatusCode": 200}', 'f5f626a1-37f2-4615-b838-db8dbbdde529', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('29bb63f7-6436-49fe-aba8-c90d3565fc9a', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771151412345.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 10:30:12.47715+00', '2026-02-15 10:30:12.47715+00', '2026-02-15 10:30:12.47715+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T10:30:12.462Z", "contentLength": 48710, "httpStatusCode": 200}', '5b5d5c81-6405-4bc2-9c8e-e1a0786d62bf', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('e64c973d-8728-4af1-af79-81e807daf9fd', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771151517004.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 10:31:57.105174+00', '2026-02-15 10:31:57.105174+00', '2026-02-15 10:31:57.105174+00', '{"eTag": "\"74507674e136ced661770458c66ae98f\"", "size": 163818, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T10:31:57.089Z", "contentLength": 163818, "httpStatusCode": 200}', 'e3e2e3f7-bcfc-4826-b93c-ec1eb04fb060', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('dbca50d8-f019-4583-9ecc-5452d8200d68', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771151579058.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 10:32:59.171248+00', '2026-02-15 10:32:59.171248+00', '2026-02-15 10:32:59.171248+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T10:32:59.162Z", "contentLength": 48710, "httpStatusCode": 200}', '90e4e84e-0d73-4351-b383-af6d293d5421', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('5f20a0c6-850a-4f94-94e6-cc63f4abcb40', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771151702285.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 10:35:02.361515+00', '2026-02-15 10:35:02.361515+00', '2026-02-15 10:35:02.361515+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T10:35:02.354Z", "contentLength": 48710, "httpStatusCode": 200}', 'c528b58a-28e1-4c2b-9cc7-90cc4a6c159c', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('01518d2f-b58e-4385-8936-ca9b22acbf2e', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771152194733.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 10:43:14.814797+00', '2026-02-15 10:43:14.814797+00', '2026-02-15 10:43:14.814797+00', '{"eTag": "\"74507674e136ced661770458c66ae98f\"", "size": 163818, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T10:43:14.803Z", "contentLength": 163818, "httpStatusCode": 200}', 'cc9db17e-f3a9-4ff9-a7c7-ec54da6f732d', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('d87241ad-c417-4c5d-9aac-00e987975bc4', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771152585748.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 10:49:45.814249+00', '2026-02-15 10:49:45.814249+00', '2026-02-15 10:49:45.814249+00', '{"eTag": "\"e8298226e90e0720ff95c90c5b61e08c\"", "size": 53065, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T10:49:45.806Z", "contentLength": 53065, "httpStatusCode": 200}', 'b2225e51-4b4b-477f-af8c-92cf179d38f2', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('05a13d1c-0bdf-47ae-a645-0f5175edaa87', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771153252909.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 11:00:53.010494+00', '2026-02-15 11:00:53.010494+00', '2026-02-15 11:00:53.010494+00', '{"eTag": "\"60d363c60025fd47681d9b9d50939a8d\"", "size": 158427, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T11:00:53.000Z", "contentLength": 158427, "httpStatusCode": 200}', 'dda4b152-6a84-48ea-8b28-b829d78e55b0', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('75097354-fd27-4ef5-a54b-eb4e79da908a', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1771153439377.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-15 11:03:59.450908+00', '2026-02-15 11:03:59.450908+00', '2026-02-15 11:03:59.450908+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-15T11:03:59.441Z", "contentLength": 48710, "httpStatusCode": 200}', '212ffa33-f392-4a8b-a35d-64a7ab4bf9bc', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('b2071532-a0de-46be-856b-cc6e48c71a83', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/de1076a9-f4eb-4de6-9394-2225eb82bc2a/avatar.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-16 21:26:42.194776+00', '2026-02-16 21:26:42.194776+00', '2026-02-16 21:26:42.194776+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-16T21:26:42.182Z", "contentLength": 48710, "httpStatusCode": 200}', 'db34d7c5-bd0d-4694-a00b-487fc4e911a0', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('62e5bb58-eae4-41d3-90b0-55287b2edfcf', 'avatars', '816b24fe-a0c3-4409-b79b-c6c0a6935d03/avatar-1771287464893.jpg', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-17 00:17:45.046809+00', '2026-02-17 00:17:45.046809+00', '2026-02-17 00:17:45.046809+00', '{"eTag": "\"786fd3a000090ec8eada2f124aa702c8\"", "size": 902895, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2026-02-17T00:17:45.029Z", "contentLength": 902895, "httpStatusCode": 200}', 'e98e9299-5240-4db1-90ed-6a62f7c799b5', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('31251500-6f03-4ac7-bce5-f4474157ed9b', 'avatars', 'owners/824f125c-55bb-40f5-a8c4-7a33618b91c7/patients/d736bf55-3905-4db3-b2d4-38ad8c06c957/avatar.png', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '2026-02-21 20:14:20.585086+00', '2026-02-21 20:14:20.585086+00', '2026-02-21 20:14:20.585086+00', '{"eTag": "\"74507674e136ced661770458c66ae98f\"", "size": 163818, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-21T20:14:20.573Z", "contentLength": 163818, "httpStatusCode": 200}', 'c344dade-8b93-4243-9c38-ae571b5eae64', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '{}'),
- ('2fdbffe6-0bf0-472e-89d4-03da0e100ebd', 'avatars', 'owners/824f125c-55bb-40f5-a8c4-7a33618b91c7/patients/d4d4c55e-a076-4af4-bb66-b136bfc20719/avatar.png', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '2026-02-24 15:13:45.0233+00', '2026-02-24 15:13:45.0233+00', '2026-02-24 15:13:45.0233+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-24T15:13:45.011Z", "contentLength": 48710, "httpStatusCode": 200}', 'acb8140d-a26c-4bd5-9320-205ae0429582', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '{}'),
- ('bf5ae728-1478-4951-8016-e839ddfe06f6', 'avatars', 'owners/824f125c-55bb-40f5-a8c4-7a33618b91c7/patients/ec16fb50-9c13-4bc0-8ff4-28124c195062/avatar.png', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '2026-02-24 16:40:23.194179+00', '2026-02-24 16:40:23.194179+00', '2026-02-24 16:40:23.194179+00', '{"eTag": "\"7acd7fe015d57168c9d1f740e6ef9dca\"", "size": 120039, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-24T16:40:23.181Z", "contentLength": 120039, "httpStatusCode": 200}', '2a828e73-38f9-4160-adb9-f9a97ef338b7', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '{}'),
- ('30257c7b-6505-4a26-a406-d09a34850219', 'avatars', 'owners/824f125c-55bb-40f5-a8c4-7a33618b91c7/patients/f7f51807-ab84-4fc4-a345-1d5b2de094c4/avatar.webp', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '2026-02-24 16:44:05.35217+00', '2026-02-24 16:44:05.35217+00', '2026-02-24 16:44:05.35217+00', '{"eTag": "\"7d090e1ccd302488cb8ac03ea09e5354\"", "size": 94090, "mimetype": "image/webp", "cacheControl": "max-age=3600", "lastModified": "2026-02-24T16:44:05.337Z", "contentLength": 94090, "httpStatusCode": 200}', 'f31ba834-e1aa-4e19-a6ae-c9152c223e01', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '{}'),
- ('842c95a4-dbb6-489b-83d3-074fdbebe251', 'avatars', 'owners/824f125c-55bb-40f5-a8c4-7a33618b91c7/patients/965e2f5e-9d4f-4044-ae09-1caaf21d5c5e/avatar.png', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '2026-02-24 17:32:26.591942+00', '2026-02-24 17:32:26.591942+00', '2026-02-24 17:32:26.591942+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-24T17:32:26.587Z", "contentLength": 48710, "httpStatusCode": 200}', '649e45b0-e23a-4e92-8015-8250835dd0f6', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '{}'),
- ('43ee8347-87c7-478f-baeb-594261328de5', 'avatars', 'owners/824f125c-55bb-40f5-a8c4-7a33618b91c7/patients/9285890e-e35d-47ac-b553-9b469c85762b/avatar.png', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '2026-02-24 17:43:23.948616+00', '2026-02-24 17:43:23.948616+00', '2026-02-24 17:43:23.948616+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-24T17:43:23.934Z", "contentLength": 48710, "httpStatusCode": 200}', 'c0c9963a-463a-4f8d-ad3c-b18d32c2baf3', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '{}'),
- ('0d5a672f-8a6f-4938-b191-2b588a4a6fa8', 'avatars', 'owners/816b24fe-a0c3-4409-b79b-c6c0a6935d03/patients/fe32e8e4-fd5e-43e9-a1a3-8337f9354f1d/avatar.png', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-24 17:48:16.389014+00', '2026-02-24 17:48:16.389014+00', '2026-02-24 17:48:16.389014+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-24T17:48:16.380Z", "contentLength": 48710, "httpStatusCode": 200}', '7650379e-4566-4e01-9599-03cc57cd3e01', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('2855dba0-3482-4c04-ace2-001e52c99d4f', 'avatars', 'owners/824f125c-55bb-40f5-a8c4-7a33618b91c7/patients/89bb79c8-5b30-4218-a912-4ae5a8304d1c/avatar.png', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '2026-02-26 04:12:57.005928+00', '2026-02-26 04:12:57.005928+00', '2026-02-26 04:12:57.005928+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-26T04:12:56.969Z", "contentLength": 48710, "httpStatusCode": 200}', '6946c28b-6cc7-47fe-8f71-e5dbce38cdbd', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '{}'),
- ('895d2975-5b0a-4af1-8df7-b055939af665', 'avatars', 'owners/824f125c-55bb-40f5-a8c4-7a33618b91c7/patients/1ae4b29d-d5fd-4490-b775-ad260ef0b74d/avatar.png', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '2026-02-26 04:13:20.962471+00', '2026-02-26 04:13:20.962471+00', '2026-02-26 04:13:20.962471+00', '{"eTag": "\"74507674e136ced661770458c66ae98f\"", "size": 163818, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-02-26T04:13:20.944Z", "contentLength": 163818, "httpStatusCode": 200}', '46c51cbc-2075-4d76-bf1d-4d6a3bc118ae', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '{}'),
- ('98bef170-3669-429f-9e9f-2f7062fd396d', 'avatars', 'intakes/dd2862f6-9436-4905-ae79-a606f9a740b6/1772079264021.webp', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '2026-02-26 04:14:24.079966+00', '2026-02-26 04:14:24.079966+00', '2026-02-26 04:14:24.079966+00', '{"eTag": "\"af758fda0f2989c0fe7e39c321769aae\"", "size": 62662, "mimetype": "image/webp", "cacheControl": "max-age=3600", "lastModified": "2026-02-26T04:14:24.069Z", "contentLength": 62662, "httpStatusCode": 200}', '449142b8-9056-4851-b22e-72c8ae2b9ed0', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '{}'),
- ('db8022ee-9a06-4add-929f-d6a876b7988d', 'avatars', 'intakes/dd2862f6-9436-4905-ae79-a606f9a740b6/1772107266247.webp', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '2026-02-26 12:01:06.345089+00', '2026-02-26 12:01:06.345089+00', '2026-02-26 12:01:06.345089+00', '{"eTag": "\"af758fda0f2989c0fe7e39c321769aae\"", "size": 62662, "mimetype": "image/webp", "cacheControl": "max-age=3600", "lastModified": "2026-02-26T12:01:06.336Z", "contentLength": 62662, "httpStatusCode": 200}', '0d559524-67a3-4973-965e-62d766d7dc60', '824f125c-55bb-40f5-a8c4-7a33618b91c7', '{}'),
- ('a169dac1-45e5-4fb1-aded-94e773cb334a', 'avatars', 'intakes/b49f3c84-6b07-4d1f-bc7e-82353518871f/1772107513331.jpg', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '2026-02-26 12:05:13.392687+00', '2026-02-26 12:05:13.392687+00', '2026-02-26 12:05:13.392687+00', '{"eTag": "\"9f79c57a730113d50d24036ee9716a27\"", "size": 22299, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2026-02-26T12:05:13.382Z", "contentLength": 22299, "httpStatusCode": 200}', 'c8ea0eab-017e-42ec-ae8d-f16fcd5a741f', '816b24fe-a0c3-4409-b79b-c6c0a6935d03', '{}'),
- ('5b498420-915e-4b23-8772-fa0d58c52b12', 'avatars', 'aaaaaaaa-0005-0005-0005-000000000005/avatar-1772594277231.png', 'aaaaaaaa-0005-0005-0005-000000000005', '2026-03-04 03:17:57.367822+00', '2026-03-04 03:17:57.367822+00', '2026-03-04 03:17:57.367822+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-03-04T03:17:57.356Z", "contentLength": 48710, "httpStatusCode": 200}', 'ee1d7b94-43f9-480b-8824-85da41a99994', 'aaaaaaaa-0005-0005-0005-000000000005', '{}'),
- ('b739f56c-e5a1-41c5-a094-2147c4a874c1', 'avatars', 'owners/aaaaaaaa-0002-0002-0002-000000000002/patients/0ef7d831-3bc7-4e1c-948b-35b40bee1ed3/avatar.png', 'aaaaaaaa-0002-0002-0002-000000000002', '2026-03-05 13:44:23.70851+00', '2026-03-05 13:44:23.70851+00', '2026-03-05 13:44:23.70851+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-03-05T13:44:23.686Z", "contentLength": 48710, "httpStatusCode": 200}', '85d47e0e-7dd2-4b7c-b634-3e081b3e0a21', 'aaaaaaaa-0002-0002-0002-000000000002', '{}'),
- ('cd4130ea-4af6-4e48-97ee-635c058ac966', 'avatars', 'intakes/b1ab9b79-7cee-4c2f-8f35-ac6bbb0f7348/1772723113160.png', 'aaaaaaaa-0002-0002-0002-000000000002', '2026-03-05 15:05:13.258881+00', '2026-03-05 15:05:13.258881+00', '2026-03-05 15:05:13.258881+00', '{"eTag": "\"60d363c60025fd47681d9b9d50939a8d\"", "size": 158427, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-03-05T15:05:13.245Z", "contentLength": 158427, "httpStatusCode": 200}', '490e6713-7c03-4ef4-8ae5-1476b383c62f', 'aaaaaaaa-0002-0002-0002-000000000002', '{}'),
- ('01ffed61-9d1f-4880-b9e7-b7d8ae029ae9', 'avatars', 'owners/aaaaaaaa-0005-0005-0005-000000000005/patients/70b17b2e-b637-4d6e-ae87-62c81cc34e9f/avatar.webp', 'aaaaaaaa-0005-0005-0005-000000000005', '2026-03-06 10:04:19.126607+00', '2026-03-06 10:04:19.126607+00', '2026-03-06 10:04:19.126607+00', '{"eTag": "\"14165413138636ce45667eb0c485528a\"", "size": 48808, "mimetype": "image/webp", "cacheControl": "max-age=3600", "lastModified": "2026-03-06T10:04:19.115Z", "contentLength": 48808, "httpStatusCode": 200}', '002747b3-a587-40ca-a5f9-072e8224b488', 'aaaaaaaa-0005-0005-0005-000000000005', '{}'),
- ('6cf2f3e0-6652-432f-80a6-60a9ab5bb8ca', 'saas-docs', 'doc-images/6ba2a9e3-b4b8-447d-b1fa-2c746f15e55e.png', 'aaaaaaaa-0006-0006-0006-000000000006', '2026-03-08 01:00:01.166001+00', '2026-03-08 01:00:01.166001+00', '2026-03-08 01:00:01.166001+00', '{"eTag": "\"8ff97e8238a368c6f59596d7a8b9e052\"", "size": 48710, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2026-03-08T01:00:01.145Z", "contentLength": 48710, "httpStatusCode": 200}', 'c8861454-7c78-4634-96e4-1e0be16e3439', 'aaaaaaaa-0006-0006-0006-000000000006', '{}');
-
-
---
--- Data for Name: s3_multipart_uploads; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin
---
-
-
-
---
--- Data for Name: s3_multipart_uploads_parts; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin
---
-
-
-
---
--- Data for Name: vector_indexes; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin
---
-
-
-
---
--- Data for Name: hooks; Type: TABLE DATA; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-
-
---
--- Name: refresh_tokens_id_seq; Type: SEQUENCE SET; Schema: auth; Owner: supabase_auth_admin
---
-
-SELECT pg_catalog.setval('"auth"."refresh_tokens_id_seq"', 1204, true);
-
-
---
--- Name: agenda_online_slots_id_seq; Type: SEQUENCE SET; Schema: public; Owner: supabase_admin
---
-
-SELECT pg_catalog.setval('"public"."agenda_online_slots_id_seq"', 113, true);
-
-
---
--- Name: hooks_id_seq; Type: SEQUENCE SET; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-SELECT pg_catalog.setval('"supabase_functions"."hooks_id_seq"', 1, false);
-
-
---
--- PostgreSQL database dump complete
---
-
--- \unrestrict W3AlCqJoixQ6XbedqdnuDvY0yTRx6OcqqCIS8MVAvJRGtliRjQ8MiBhgEM6GeE6
-
-RESET ALL;
diff --git a/DBS/2026-03-11/root/full_dump.sql b/DBS/2026-03-11/root/full_dump.sql
deleted file mode 100644
index e1df45b..0000000
--- a/DBS/2026-03-11/root/full_dump.sql
+++ /dev/null
@@ -1,10622 +0,0 @@
-
-
-
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET idle_in_transaction_session_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = on;
-SELECT pg_catalog.set_config('search_path', '', false);
-SET check_function_bodies = false;
-SET xmloption = content;
-SET client_min_messages = warning;
-SET row_security = off;
-
-
-CREATE EXTENSION IF NOT EXISTS "pg_net" WITH SCHEMA "extensions";
-
-
-
-
-
-
-COMMENT ON SCHEMA "public" IS 'standard public schema';
-
-
-
-CREATE EXTENSION IF NOT EXISTS "btree_gist" WITH SCHEMA "public";
-
-
-
-
-
-
-CREATE EXTENSION IF NOT EXISTS "citext" WITH SCHEMA "public";
-
-
-
-
-
-
-CREATE EXTENSION IF NOT EXISTS "pg_graphql" WITH SCHEMA "graphql";
-
-
-
-
-
-
-CREATE EXTENSION IF NOT EXISTS "pg_stat_statements" WITH SCHEMA "extensions";
-
-
-
-
-
-
-CREATE EXTENSION IF NOT EXISTS "pg_trgm" WITH SCHEMA "public";
-
-
-
-
-
-
-CREATE EXTENSION IF NOT EXISTS "pgcrypto" WITH SCHEMA "extensions";
-
-
-
-
-
-
-CREATE EXTENSION IF NOT EXISTS "supabase_vault" WITH SCHEMA "vault";
-
-
-
-
-
-
-CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA "extensions";
-
-
-
-
-
-
-CREATE TYPE "public"."commitment_log_source" AS ENUM (
- 'manual',
- 'auto'
-);
-
-
-ALTER TYPE "public"."commitment_log_source" OWNER TO "supabase_admin";
-
-
-CREATE TYPE "public"."determined_field_type" AS ENUM (
- 'text',
- 'textarea',
- 'number',
- 'date',
- 'select',
- 'boolean'
-);
-
-
-ALTER TYPE "public"."determined_field_type" OWNER TO "supabase_admin";
-
-
-CREATE TYPE "public"."recurrence_exception_type" AS ENUM (
- 'cancel_session',
- 'reschedule_session',
- 'patient_missed',
- 'therapist_canceled',
- 'holiday_block'
-);
-
-
-ALTER TYPE "public"."recurrence_exception_type" OWNER TO "supabase_admin";
-
-
-CREATE TYPE "public"."recurrence_type" AS ENUM (
- 'weekly',
- 'biweekly',
- 'monthly',
- 'yearly',
- 'custom_weekdays'
-);
-
-
-ALTER TYPE "public"."recurrence_type" OWNER TO "supabase_admin";
-
-
-CREATE TYPE "public"."status_agenda_serie" AS ENUM (
- 'ativo',
- 'pausado',
- 'cancelado'
-);
-
-
-ALTER TYPE "public"."status_agenda_serie" OWNER TO "supabase_admin";
-
-
-CREATE TYPE "public"."status_evento_agenda" AS ENUM (
- 'agendado',
- 'realizado',
- 'faltou',
- 'cancelado',
- 'remarcar'
-);
-
-
-ALTER TYPE "public"."status_evento_agenda" OWNER TO "supabase_admin";
-
-
-CREATE TYPE "public"."status_excecao_agenda" AS ENUM (
- 'pendente',
- 'ativo',
- 'arquivado'
-);
-
-
-ALTER TYPE "public"."status_excecao_agenda" OWNER TO "supabase_admin";
-
-
-CREATE TYPE "public"."tipo_evento_agenda" AS ENUM (
- 'sessao',
- 'bloqueio'
-);
-
-
-ALTER TYPE "public"."tipo_evento_agenda" OWNER TO "supabase_admin";
-
-
-CREATE TYPE "public"."tipo_excecao_agenda" AS ENUM (
- 'bloqueio',
- 'horario_extra'
-);
-
-
-ALTER TYPE "public"."tipo_excecao_agenda" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."__rls_ping"() RETURNS "text"
- LANGUAGE "sql" STABLE
- AS $$
- select 'ok'::text;
-$$;
-
-
-ALTER FUNCTION "public"."__rls_ping"() OWNER TO "supabase_admin";
-
-SET default_tablespace = '';
-
-SET default_table_access_method = "heap";
-
-
-CREATE TABLE IF NOT EXISTS "public"."subscriptions" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "user_id" "uuid",
- "plan_id" "uuid" NOT NULL,
- "status" "text" DEFAULT 'active'::"text" NOT NULL,
- "current_period_start" timestamp with time zone,
- "current_period_end" timestamp with time zone,
- "cancel_at_period_end" boolean DEFAULT false NOT NULL,
- "provider" "text" DEFAULT 'manual'::"text" NOT NULL,
- "provider_customer_id" "text",
- "provider_subscription_id" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "tenant_id" "uuid",
- "plan_key" "text",
- "interval" "text",
- "source" "text" DEFAULT 'manual'::"text" NOT NULL,
- "started_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "canceled_at" timestamp with time zone,
- "activated_at" timestamp with time zone,
- "past_due_since" timestamp with time zone,
- "suspended_at" timestamp with time zone,
- "suspended_reason" "text",
- "cancelled_at" timestamp with time zone,
- "cancel_reason" "text",
- "expired_at" timestamp with time zone,
- CONSTRAINT "subscriptions_interval_check" CHECK (("interval" = ANY (ARRAY['month'::"text", 'year'::"text"]))),
- CONSTRAINT "subscriptions_owner_xor" CHECK (((("tenant_id" IS NOT NULL) AND ("user_id" IS NULL)) OR (("tenant_id" IS NULL) AND ("user_id" IS NOT NULL)))),
- CONSTRAINT "subscriptions_status_check" CHECK (("status" = ANY (ARRAY['pending'::"text", 'active'::"text", 'past_due'::"text", 'suspended'::"text", 'cancelled'::"text", 'expired'::"text"])))
-);
-
-
-ALTER TABLE "public"."subscriptions" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."activate_subscription_from_intent"("p_intent_id" "uuid") RETURNS "public"."subscriptions"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_intent record;
- v_sub public.subscriptions;
- v_days int;
- v_user_id uuid;
- v_plan_id uuid;
- v_target text;
-begin
- -- lê pela VIEW unificada
- select * into v_intent
- from public.subscription_intents
- where id = p_intent_id;
-
- if not found then
- raise exception 'Intent não encontrado: %', p_intent_id;
- end if;
-
- if v_intent.status <> 'paid' then
- raise exception 'Intent precisa estar paid para ativar assinatura';
- end if;
-
- -- resolve target e plan_id via plans.key
- select p.id, p.target
- into v_plan_id, v_target
- from public.plans p
- where p.key = v_intent.plan_key
- limit 1;
-
- if v_plan_id is null then
- raise exception 'Plano não encontrado em plans.key = %', v_intent.plan_key;
- end if;
-
- v_target := lower(coalesce(v_target, ''));
-
- -- ✅ supervisor adicionado
- if v_target not in ('clinic', 'therapist', 'supervisor') then
- raise exception 'Target inválido em plans.target: %', v_target;
- end if;
-
- -- regra por target
- if v_target = 'clinic' then
- if v_intent.tenant_id is null then
- raise exception 'Intent sem tenant_id';
- end if;
- else
- -- therapist ou supervisor: vinculado ao user
- v_user_id := v_intent.user_id;
- if v_user_id is null then
- v_user_id := v_intent.created_by_user_id;
- end if;
- end if;
-
- if v_target in ('therapist', 'supervisor') and v_user_id is null then
- raise exception 'Não foi possível determinar user_id para assinatura %.', v_target;
- end if;
-
- -- cancela assinatura ativa anterior
- if v_target = 'clinic' then
- update public.subscriptions
- set status = 'cancelled',
- cancelled_at = now()
- where tenant_id = v_intent.tenant_id
- and plan_id = v_plan_id
- and status = 'active';
- else
- -- therapist ou supervisor
- update public.subscriptions
- set status = 'cancelled',
- cancelled_at = now()
- where user_id = v_user_id
- and plan_id = v_plan_id
- and status = 'active'
- and tenant_id is null;
- end if;
-
- -- duração do plano (30 dias para mensal)
- v_days := case
- when lower(coalesce(v_intent.interval, 'month')) = 'year' then 365
- else 30
- end;
-
- -- cria nova assinatura
- insert into public.subscriptions (
- user_id,
- plan_id,
- status,
- started_at,
- expires_at,
- cancelled_at,
- activated_at,
- tenant_id,
- plan_key,
- interval,
- source,
- created_at,
- updated_at
- )
- values (
- case when v_target = 'clinic' then null else v_user_id end,
- v_plan_id,
- 'active',
- now(),
- now() + make_interval(days => v_days),
- null,
- now(),
- case when v_target = 'clinic' then v_intent.tenant_id else null end,
- v_intent.plan_key,
- v_intent.interval,
- 'manual',
- now(),
- now()
- )
- returning * into v_sub;
-
- -- grava vínculo intent → subscription
- if v_target = 'clinic' then
- update public.subscription_intents_tenant
- set subscription_id = v_sub.id
- where id = p_intent_id;
- else
- update public.subscription_intents_personal
- set subscription_id = v_sub.id
- where id = p_intent_id;
- end if;
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."activate_subscription_from_intent"("p_intent_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."admin_fix_plan_target"("p_plan_key" "text", "p_new_target" "text") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_plan_id uuid;
-begin
- -- (opcional) restringe targets válidos
- if p_new_target not in ('clinic','therapist') then
- raise exception 'Target inválido: %', p_new_target using errcode='P0001';
- end if;
-
- -- trava o plano
- select id into v_plan_id
- from public.plans
- where key = p_plan_key
- for update;
-
- if v_plan_id is null then
- raise exception 'Plano não encontrado: %', p_plan_key using errcode='P0001';
- end if;
-
- -- segurança: não mexer se existe subscription
- if exists (select 1 from public.subscriptions s where s.plan_id = v_plan_id) then
- raise exception 'Plano % possui subscriptions. Migração bloqueada.', p_plan_key using errcode='P0001';
- end if;
-
- -- liga bypass SOMENTE nesta transação
- perform set_config('app.plan_migration_bypass', '1', true);
-
- update public.plans
- set target = p_new_target
- where id = v_plan_id;
-
-end
-$$;
-
-
-ALTER FUNCTION "public"."admin_fix_plan_target"("p_plan_key" "text", "p_new_target" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."agenda_cfg_sync"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-begin
- if new.agenda_view_mode = 'custom' then
- new.usar_horario_admin_custom := true;
- new.admin_inicio_visualizacao := new.agenda_custom_start;
- new.admin_fim_visualizacao := new.agenda_custom_end;
- else
- new.usar_horario_admin_custom := false;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."agenda_cfg_sync"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."agendador_dias_disponiveis"("p_slug" "text", "p_ano" integer, "p_mes" integer) RETURNS TABLE("data" "date", "tem_slots" boolean)
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
-DECLARE
- v_owner_id uuid;
- v_antecedencia int;
- v_agora timestamptz;
- v_data date;
- v_data_inicio date;
- v_data_fim date;
- v_db_dow int;
- v_tem_slot boolean;
-BEGIN
- SELECT c.owner_id, c.antecedencia_minima_horas
- INTO v_owner_id, v_antecedencia
- FROM public.agendador_configuracoes c
- WHERE c.link_slug = p_slug AND c.ativo = true
- LIMIT 1;
-
- IF v_owner_id IS NULL THEN RETURN; END IF;
-
- v_agora := now();
- v_data_inicio := make_date(p_ano, p_mes, 1);
- v_data_fim := (v_data_inicio + interval '1 month' - interval '1 day')::date;
-
- v_data := v_data_inicio;
- WHILE v_data <= v_data_fim LOOP
- v_db_dow := extract(dow from v_data::timestamp)::int;
-
- SELECT EXISTS (
- SELECT 1 FROM public.agenda_online_slots s
- WHERE s.owner_id = v_owner_id
- AND s.weekday = v_db_dow
- AND s.enabled = true
- AND (v_data::text || ' ' || s.time::text)::timestamp
- AT TIME ZONE 'America/Sao_Paulo'
- >= v_agora + (v_antecedencia || ' hours')::interval
- ) INTO v_tem_slot;
-
- IF v_tem_slot THEN
- data := v_data;
- tem_slots := true;
- RETURN NEXT;
- END IF;
-
- v_data := v_data + 1;
- END LOOP;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."agendador_dias_disponiveis"("p_slug" "text", "p_ano" integer, "p_mes" integer) OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."agendador_gerar_slug"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-DECLARE
- v_slug text;
- v_exists boolean;
-BEGIN
- -- só gera se ativou e não tem slug ainda
- IF NEW.ativo = true AND (NEW.link_slug IS NULL OR NEW.link_slug = '') THEN
- LOOP
- v_slug := lower(substring(replace(gen_random_uuid()::text, '-', ''), 1, 8));
- SELECT EXISTS (
- SELECT 1 FROM public.agendador_configuracoes
- WHERE link_slug = v_slug AND owner_id <> NEW.owner_id
- ) INTO v_exists;
- EXIT WHEN NOT v_exists;
- END LOOP;
- NEW.link_slug := v_slug;
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."agendador_gerar_slug"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."agendador_slots_disponiveis"("p_slug" "text", "p_data" "date") RETURNS TABLE("hora" time without time zone, "disponivel" boolean)
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
-DECLARE
- v_owner_id uuid;
- v_duracao int;
- v_antecedencia int;
- v_agora timestamptz;
- v_db_dow int;
- v_slot time;
- v_slot_fim time;
- v_slot_ts timestamptz;
- v_ocupado boolean;
- -- loop de recorrências
- v_rule RECORD;
- v_rule_start_dow int;
- v_first_occ date;
- v_day_diff int;
- v_ex_type text;
-BEGIN
- SELECT c.owner_id, c.duracao_sessao_min, c.antecedencia_minima_horas
- INTO v_owner_id, v_duracao, v_antecedencia
- FROM public.agendador_configuracoes c
- WHERE c.link_slug = p_slug AND c.ativo = true
- LIMIT 1;
-
- IF v_owner_id IS NULL THEN RETURN; END IF;
-
- v_agora := now();
- v_db_dow := extract(dow from p_data::timestamp)::int;
-
- FOR v_slot IN
- SELECT s.time
- FROM public.agenda_online_slots s
- WHERE s.owner_id = v_owner_id
- AND s.weekday = v_db_dow
- AND s.enabled = true
- ORDER BY s.time
- LOOP
- v_slot_fim := v_slot + (v_duracao || ' minutes')::interval;
- v_ocupado := false;
-
- -- ── Antecedência mínima ──────────────────────────────────────────────────
- v_slot_ts := (p_data::text || ' ' || v_slot::text)::timestamp
- AT TIME ZONE 'America/Sao_Paulo';
- IF v_slot_ts < v_agora + (v_antecedencia || ' hours')::interval THEN
- v_ocupado := true;
- END IF;
-
- -- ── Eventos avulsos internos (agenda_eventos) ────────────────────────────
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1 FROM public.agenda_eventos e
- WHERE e.owner_id = v_owner_id
- AND e.status::text NOT IN ('cancelado', 'faltou')
- AND (e.inicio_em AT TIME ZONE 'America/Sao_Paulo')::date = p_data
- AND (e.inicio_em AT TIME ZONE 'America/Sao_Paulo')::time < v_slot_fim
- AND (e.fim_em AT TIME ZONE 'America/Sao_Paulo')::time > v_slot
- ) INTO v_ocupado;
- END IF;
-
- -- ── Recorrências ativas (recurrence_rules) ───────────────────────────────
- -- Loop explícito para evitar erros de tipo no cálculo do ciclo semanal
- IF NOT v_ocupado THEN
- FOR v_rule IN
- SELECT
- r.id,
- r.start_date::date AS start_date,
- r.end_date::date AS end_date,
- r.start_time::time AS start_time,
- r.end_time::time AS end_time,
- COALESCE(r.interval, 1)::int AS interval
- FROM public.recurrence_rules r
- WHERE r.owner_id = v_owner_id
- AND r.status = 'ativo'
- AND p_data >= r.start_date::date
- AND (r.end_date IS NULL OR p_data <= r.end_date::date)
- AND v_db_dow = ANY(r.weekdays)
- AND r.start_time::time < v_slot_fim
- AND r.end_time::time > v_slot
- LOOP
- -- Calcula a primeira ocorrência do dia-da-semana a partir do start_date
- v_rule_start_dow := extract(dow from v_rule.start_date)::int;
- v_first_occ := v_rule.start_date
- + (((v_db_dow - v_rule_start_dow + 7) % 7))::int;
- v_day_diff := (p_data - v_first_occ)::int;
-
- -- Ocorrência válida: diff >= 0 e divisível pelo ciclo semanal
- IF v_day_diff >= 0 AND v_day_diff % (7 * v_rule.interval) = 0 THEN
-
- -- Verifica se há exceção para esta data
- v_ex_type := NULL;
- SELECT ex.type INTO v_ex_type
- FROM public.recurrence_exceptions ex
- WHERE ex.recurrence_id = v_rule.id
- AND ex.original_date = p_data
- LIMIT 1;
-
- -- Sem exceção, ou exceção que não cancela → bloqueia o slot
- IF v_ex_type IS NULL OR v_ex_type NOT IN (
- 'cancel_session', 'patient_missed',
- 'therapist_canceled', 'holiday_block',
- 'reschedule_session'
- ) THEN
- v_ocupado := true;
- EXIT; -- já basta uma regra que conflite
- END IF;
-
- END IF;
- END LOOP;
- END IF;
-
- -- ── Recorrências remarcadas para este dia (reschedule → new_date = p_data) ─
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1
- FROM public.recurrence_exceptions ex
- JOIN public.recurrence_rules r ON r.id = ex.recurrence_id
- WHERE r.owner_id = v_owner_id
- AND r.status = 'ativo'
- AND ex.type = 'reschedule_session'
- AND ex.new_date = p_data
- AND COALESCE(ex.new_start_time, r.start_time)::time < v_slot_fim
- AND COALESCE(ex.new_end_time, r.end_time)::time > v_slot
- ) INTO v_ocupado;
- END IF;
-
- -- ── Solicitações públicas pendentes ──────────────────────────────────────
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1 FROM public.agendador_solicitacoes sol
- WHERE sol.owner_id = v_owner_id
- AND sol.status = 'pendente'
- AND sol.data_solicitada = p_data
- AND sol.hora_solicitada = v_slot
- AND (sol.reservado_ate IS NULL OR sol.reservado_ate > v_agora)
- ) INTO v_ocupado;
- END IF;
-
- hora := v_slot;
- disponivel := NOT v_ocupado;
- RETURN NEXT;
- END LOOP;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."agendador_slots_disponiveis"("p_slug" "text", "p_data" "date") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."cancel_recurrence_from"("p_recurrence_id" "uuid", "p_from_date" "date") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
-BEGIN
- UPDATE public.recurrence_rules
- SET
- end_date = p_from_date - INTERVAL '1 day',
- open_ended = false,
- status = CASE
- WHEN p_from_date <= start_date THEN 'cancelado'
- ELSE status
- END,
- updated_at = now()
- WHERE id = p_recurrence_id;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."cancel_recurrence_from"("p_recurrence_id" "uuid", "p_from_date" "date") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."cancel_subscription"("p_subscription_id" "uuid") RETURNS "public"."subscriptions"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_owner_type text;
- v_owner_ref uuid;
-begin
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- if v_sub.status = 'canceled' then
- return v_sub;
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set status = 'canceled',
- cancel_at_period_end = false,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'canceled',
- v_sub.plan_id,
- v_sub.plan_id,
- auth.uid(),
- 'Cancelamento manual via admin',
- 'admin_panel',
- jsonb_build_object('previous_status', 'active')
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation(owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-
-end;
-$$;
-
-
-ALTER FUNCTION "public"."cancel_subscription"("p_subscription_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."cancelar_eventos_serie"("p_serie_id" "uuid", "p_a_partir_de" timestamp with time zone DEFAULT "now"()) RETURNS integer
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-DECLARE
- v_count integer;
-BEGIN
- UPDATE public.agenda_eventos
- SET status = 'cancelado',
- updated_at = now()
- WHERE serie_id = p_serie_id
- AND inicio_em >= p_a_partir_de
- AND status NOT IN ('realizado', 'cancelado');
-
- GET DIAGNOSTICS v_count = ROW_COUNT;
- RETURN v_count;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."cancelar_eventos_serie"("p_serie_id" "uuid", "p_a_partir_de" timestamp with time zone) OWNER TO "supabase_admin";
-
-
-COMMENT ON FUNCTION "public"."cancelar_eventos_serie"("p_serie_id" "uuid", "p_a_partir_de" timestamp with time zone) IS 'Cancela todos os eventos futuros de uma série a partir de p_a_partir_de (inclusive).
- Não cancela eventos já realizados.';
-
-
-
-CREATE OR REPLACE FUNCTION "public"."change_subscription_plan"("p_subscription_id" "uuid", "p_new_plan_id" "uuid") RETURNS "public"."subscriptions"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_old_plan uuid;
- v_new_key text;
-
- v_owner_type text;
- v_owner_ref uuid;
-
- v_new_target text;
- v_sub_target text;
-begin
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- v_old_plan := v_sub.plan_id;
-
- if v_old_plan = p_new_plan_id then
- return v_sub;
- end if;
-
- select key, target
- into v_new_key, v_new_target
- from public.plans
- where id = p_new_plan_id;
-
- if v_new_key is null then
- raise exception 'Plano não encontrado';
- end if;
-
- v_new_target := lower(coalesce(v_new_target, ''));
-
- v_sub_target := case
- when v_sub.tenant_id is not null then 'clinic'
- else 'therapist'
- end;
-
- if v_new_target <> v_sub_target then
- raise exception 'Plano inválido para este tipo de assinatura. Assinatura é % e o plano é %.',
- v_sub_target, v_new_target
- using errcode = 'P0001';
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set plan_id = p_new_plan_id,
- plan_key = v_new_key,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'plan_changed',
- v_old_plan,
- p_new_plan_id,
- auth.uid(),
- 'Plan change via DEV menu',
- 'dev_menu',
- jsonb_build_object(
- 'previous_plan', v_old_plan,
- 'new_plan', p_new_plan_id,
- 'new_plan_key', v_new_key,
- 'new_plan_target', v_new_target
- )
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation (owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."change_subscription_plan"("p_subscription_id" "uuid", "p_new_plan_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."create_clinic_tenant"("p_name" "text") RETURNS "uuid"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_uid uuid;
- v_tenant uuid;
- v_name text;
-begin
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'Not authenticated';
- end if;
-
- v_name := nullif(trim(coalesce(p_name, '')), '');
- if v_name is null then
- v_name := 'Clínica';
- end if;
-
- insert into public.tenants (name, kind, created_at)
- values (v_name, 'clinic', now())
- returning id into v_tenant;
-
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_tenant, v_uid, 'tenant_admin', 'active', now());
-
- return v_tenant;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."create_clinic_tenant"("p_name" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."create_patient_intake_request"("p_token" "text", "p_name" "text", "p_email" "text" DEFAULT NULL::"text", "p_phone" "text" DEFAULT NULL::"text", "p_notes" "text" DEFAULT NULL::"text", "p_consent" boolean DEFAULT false) RETURNS "uuid"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
-declare
- v_owner uuid;
- v_active boolean;
- v_expires timestamptz;
- v_max_uses int;
- v_uses int;
- v_id uuid;
-begin
- select owner_id, active, expires_at, max_uses, uses
- into v_owner, v_active, v_expires, v_max_uses, v_uses
- from public.patient_invites
- where token = p_token
- limit 1;
-
- if v_owner is null then
- raise exception 'Token inválido';
- end if;
-
- if v_active is not true then
- raise exception 'Link desativado';
- end if;
-
- if v_expires is not null and now() > v_expires then
- raise exception 'Link expirado';
- end if;
-
- if v_max_uses is not null and v_uses >= v_max_uses then
- raise exception 'Limite de uso atingido';
- end if;
-
- if p_name is null or length(trim(p_name)) = 0 then
- raise exception 'Nome é obrigatório';
- end if;
-
- insert into public.patient_intake_requests
- (owner_id, token, name, email, phone, notes, consent, status)
- values
- (v_owner, p_token, trim(p_name),
- nullif(lower(trim(p_email)), ''),
- nullif(trim(p_phone), ''),
- nullif(trim(p_notes), ''),
- coalesce(p_consent, false),
- 'new')
- returning id into v_id;
-
- update public.patient_invites
- set uses = uses + 1
- where token = p_token;
-
- return v_id;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."create_patient_intake_request"("p_token" "text", "p_name" "text", "p_email" "text", "p_phone" "text", "p_notes" "text", "p_consent" boolean) OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."create_patient_intake_request_v2"("p_token" "text", "p_payload" "jsonb") RETURNS "uuid"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $_$
-declare
- v_owner_id uuid;
- v_intake_id uuid;
- v_birth_raw text;
- v_birth date;
-begin
- select owner_id
- into v_owner_id
- from public.patient_invites
- where token = p_token;
-
- if v_owner_id is null then
- raise exception 'Token inválido ou expirado';
- end if;
-
- v_birth_raw := nullif(trim(coalesce(
- p_payload->>'data_nascimento',
- ''
- )), '');
-
- v_birth := case
- when v_birth_raw is null then null
- when v_birth_raw ~ '^\d{4}-\d{2}-\d{2}$' then v_birth_raw::date
- when v_birth_raw ~ '^\d{2}-\d{2}-\d{4}$' then to_date(v_birth_raw, 'DD-MM-YYYY')
- else null
- end;
-
- insert into public.patient_intake_requests (
- owner_id,
- token,
- status,
- consent,
-
- nome_completo,
- email_principal,
- telefone,
-
- avatar_url, -- 🔥 AQUI
-
- data_nascimento,
- cpf,
- rg,
- genero,
- estado_civil,
- profissao,
- escolaridade,
- nacionalidade,
- naturalidade,
-
- cep,
- pais,
- cidade,
- estado,
- endereco,
- numero,
- complemento,
- bairro,
-
- observacoes,
- notas_internas,
-
- encaminhado_por,
- onde_nos_conheceu
- )
- values (
- v_owner_id,
- p_token,
- 'new',
- coalesce((p_payload->>'consent')::boolean, false),
-
- nullif(trim(p_payload->>'nome_completo'), ''),
- nullif(trim(p_payload->>'email_principal'), ''),
- nullif(regexp_replace(coalesce(p_payload->>'telefone',''), '\D', '', 'g'), ''),
-
- nullif(trim(p_payload->>'avatar_url'), ''), -- 🔥 AQUI
-
- v_birth,
- nullif(regexp_replace(coalesce(p_payload->>'cpf',''), '\D', '', 'g'), ''),
- nullif(trim(p_payload->>'rg'), ''),
- nullif(trim(p_payload->>'genero'), ''),
- nullif(trim(p_payload->>'estado_civil'), ''),
- nullif(trim(p_payload->>'profissao'), ''),
- nullif(trim(p_payload->>'escolaridade'), ''),
- nullif(trim(p_payload->>'nacionalidade'), ''),
- nullif(trim(p_payload->>'naturalidade'), ''),
-
- nullif(regexp_replace(coalesce(p_payload->>'cep',''), '\D', '', 'g'), ''),
- nullif(trim(p_payload->>'pais'), ''),
- nullif(trim(p_payload->>'cidade'), ''),
- nullif(trim(p_payload->>'estado'), ''),
- nullif(trim(p_payload->>'endereco'), ''),
- nullif(trim(p_payload->>'numero'), ''),
- nullif(trim(p_payload->>'complemento'), ''),
- nullif(trim(p_payload->>'bairro'), ''),
-
- nullif(trim(p_payload->>'observacoes'), ''),
- nullif(trim(p_payload->>'notas_internas'), ''),
-
- nullif(trim(p_payload->>'encaminhado_por'), ''),
- nullif(trim(p_payload->>'onde_nos_conheceu'), '')
- )
- returning id into v_intake_id;
-
- return v_intake_id;
-end;
-$_$;
-
-
-ALTER FUNCTION "public"."create_patient_intake_request_v2"("p_token" "text", "p_payload" "jsonb") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."current_member_id"("p_tenant_id" "uuid") RETURNS "uuid"
- LANGUAGE "sql" STABLE
- AS $$
- select tm.id
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- limit 1
-$$;
-
-
-ALTER FUNCTION "public"."current_member_id"("p_tenant_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."current_member_role"("p_tenant_id" "uuid") RETURNS "text"
- LANGUAGE "sql" STABLE
- AS $$
- select tm.role
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- limit 1
-$$;
-
-
-ALTER FUNCTION "public"."current_member_role"("p_tenant_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."delete_commitment_full"("p_tenant_id" "uuid", "p_commitment_id" "uuid") RETURNS "jsonb"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
-declare
- v_is_native boolean;
- v_fields int := 0;
- v_logs int := 0;
- v_parent int := 0;
-begin
- if auth.uid() is null then
- raise exception 'Not authenticated';
- end if;
-
- if not exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.status = 'active'
- ) then
- raise exception 'Not allowed';
- end if;
-
- select dc.is_native
- into v_is_native
- from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
-
- if v_is_native is null then
- raise exception 'Commitment not found';
- end if;
-
- if v_is_native = true then
- raise exception 'Cannot delete native commitment';
- end if;
-
- delete from public.determined_commitment_fields
- where tenant_id = p_tenant_id
- and commitment_id = p_commitment_id;
- get diagnostics v_fields = row_count;
-
- delete from public.commitment_time_logs
- where tenant_id = p_tenant_id
- and commitment_id = p_commitment_id;
- get diagnostics v_logs = row_count;
-
- delete from public.determined_commitments
- where tenant_id = p_tenant_id
- and id = p_commitment_id;
- get diagnostics v_parent = row_count;
-
- if v_parent <> 1 then
- raise exception 'Parent not deleted (RLS/owner issue).';
- end if;
-
- return jsonb_build_object(
- 'ok', true,
- 'deleted', jsonb_build_object(
- 'fields', v_fields,
- 'logs', v_logs,
- 'commitment', v_parent
- )
- );
-end;
-$$;
-
-
-ALTER FUNCTION "public"."delete_commitment_full"("p_tenant_id" "uuid", "p_commitment_id" "uuid") OWNER TO "postgres";
-
-
-CREATE OR REPLACE FUNCTION "public"."delete_determined_commitment"("p_tenant_id" "uuid", "p_commitment_id" "uuid") RETURNS "jsonb"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
-declare
- v_is_native boolean;
- v_fields_deleted int := 0;
- v_logs_deleted int := 0;
- v_commitment_deleted int := 0;
-begin
- if auth.uid() is null then
- raise exception 'Not authenticated';
- end if;
-
- if not exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.status = 'active'
- ) then
- raise exception 'Not allowed';
- end if;
-
- select dc.is_native
- into v_is_native
- from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
-
- if v_is_native is null then
- raise exception 'Commitment not found for tenant';
- end if;
-
- if v_is_native = true then
- raise exception 'Cannot delete native commitment';
- end if;
-
- delete from public.determined_commitment_fields f
- where f.tenant_id = p_tenant_id
- and f.commitment_id = p_commitment_id;
- get diagnostics v_fields_deleted = row_count;
-
- delete from public.commitment_time_logs l
- where l.tenant_id = p_tenant_id
- and l.commitment_id = p_commitment_id;
- get diagnostics v_logs_deleted = row_count;
-
- delete from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
- get diagnostics v_commitment_deleted = row_count;
-
- if v_commitment_deleted <> 1 then
- raise exception 'Delete did not remove the commitment (tenant mismatch?)';
- end if;
-
- return jsonb_build_object(
- 'ok', true,
- 'tenant_id', p_tenant_id,
- 'commitment_id', p_commitment_id,
- 'deleted', jsonb_build_object(
- 'fields', v_fields_deleted,
- 'logs', v_logs_deleted,
- 'commitment', v_commitment_deleted
- )
- );
-end;
-$$;
-
-
-ALTER FUNCTION "public"."delete_determined_commitment"("p_tenant_id" "uuid", "p_commitment_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."dev_list_auth_users"("p_limit" integer DEFAULT 50) RETURNS TABLE("id" "uuid", "email" "text", "created_at" timestamp with time zone)
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public', 'auth'
- AS $$
-begin
- -- só saas_admin pode ver
- if not exists (
- select 1
- from public.profiles p
- where p.id = auth.uid()
- and p.role = 'saas_admin'
- ) then
- return;
- end if;
-
- return query
- select
- u.id,
- u.email,
- u.created_at
- from auth.users u
- order by u.created_at desc
- limit greatest(1, least(coalesce(p_limit, 50), 500));
-end;
-$$;
-
-
-ALTER FUNCTION "public"."dev_list_auth_users"("p_limit" integer) OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."dev_list_custom_users"() RETURNS TABLE("user_id" "uuid", "email" "text", "created_at" timestamp with time zone, "global_role" "text", "tenant_role" "text", "tenant_id" "uuid", "password_dev" "text", "kind" "text")
- LANGUAGE "sql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
- with base as (
- select
- u.id as user_id,
- lower(u.email) as email,
- u.created_at
- from auth.users u
- where lower(u.email) not in (
- 'clinic@agenciapsi.com.br',
- 'therapist@agenciapsi.com.br',
- 'patient@agenciapsi.com.br',
- 'saas@agenciapsi.com.br'
- )
- ),
- prof as (
- select p.id, p.role as global_role
- from public.profiles p
- ),
- last_membership as (
- select distinct on (tm.user_id)
- tm.user_id,
- tm.tenant_id,
- tm.role as tenant_role,
- tm.created_at
- from public.tenant_members tm
- where tm.status = 'active'
- order by tm.user_id, tm.created_at desc
- )
- select
- b.user_id,
- b.email,
- b.created_at,
- pr.global_role,
- lm.tenant_role,
- lm.tenant_id,
- dc.password_dev,
- dc.kind
- from base b
- left join prof pr on pr.id = b.user_id
- left join last_membership lm on lm.user_id = b.user_id
- left join public.dev_user_credentials dc on lower(dc.email) = b.email
- order by b.created_at desc;
-$$;
-
-
-ALTER FUNCTION "public"."dev_list_custom_users"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."dev_list_intent_leads"() RETURNS TABLE("email" "text", "last_intent_at" timestamp with time zone, "plan_key" "text", "billing_interval" "text", "status" "text", "tenant_id" "uuid")
- LANGUAGE "sql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
- select
- lower(si.email) as email,
- max(si.created_at) as last_intent_at,
- (array_agg(si.plan_key order by si.created_at desc))[1] as plan_key,
- (array_agg(si.interval order by si.created_at desc))[1] as billing_interval,
- (array_agg(si.status order by si.created_at desc))[1] as status,
- (array_agg(si.tenant_id order by si.created_at desc))[1] as tenant_id
- from public.subscription_intents si
- where si.email is not null
- and not exists (
- select 1
- from auth.users au
- where lower(au.email) = lower(si.email)
- )
- group by lower(si.email)
- order by max(si.created_at) desc;
-$$;
-
-
-ALTER FUNCTION "public"."dev_list_intent_leads"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."dev_public_debug_snapshot"() RETURNS TABLE("users_total" integer, "tenants_total" integer, "intents_new_total" integer, "latest_intents" "jsonb")
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $_$
-declare
- v_latest jsonb;
-begin
- select jsonb_agg(
- jsonb_build_object(
- 'created_at', si.created_at,
- 'email_masked',
- regexp_replace(lower(si.email), '(^.).*(@.*$)', '\1***\2'),
- 'plan_key', si.plan_key,
- 'status', si.status
- )
- order by si.created_at desc
- )
- into v_latest
- from (
- select si.*
- from public.subscription_intents si
- where si.email is not null
- order by si.created_at desc
- limit 5
- ) si;
-
- return query
- select
- (select count(*)::int from auth.users) as users_total,
- (select count(*)::int from public.tenants) as tenants_total,
- (select count(*)::int from public.subscription_intents where status = 'new') as intents_new_total,
- coalesce(v_latest, '[]'::jsonb) as latest_intents;
-end;
-$_$;
-
-
-ALTER FUNCTION "public"."dev_public_debug_snapshot"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."ensure_personal_tenant"() RETURNS "uuid"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-DECLARE
- v_uid uuid;
- v_existing uuid;
-BEGIN
- v_uid := auth.uid();
- IF v_uid IS NULL THEN
- RAISE EXCEPTION 'Not authenticated';
- END IF;
-
- SELECT tm.tenant_id INTO v_existing
- FROM public.tenant_members tm
- JOIN public.tenants t ON t.id = tm.tenant_id
- WHERE tm.user_id = v_uid
- AND tm.status = 'active'
- AND t.kind IN ('therapist', 'saas')
- ORDER BY tm.created_at DESC
- LIMIT 1;
-
- IF v_existing IS NOT NULL THEN
- RETURN v_existing;
- END IF;
-
- RETURN public.provision_account_tenant(v_uid, 'therapist');
-END;
-$$;
-
-
-ALTER FUNCTION "public"."ensure_personal_tenant"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."ensure_personal_tenant_for_user"("p_user_id" "uuid") RETURNS "uuid"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_uid uuid;
- v_existing uuid;
- v_tenant uuid;
- v_email text;
- v_name text;
-begin
- v_uid := p_user_id;
- if v_uid is null then
- raise exception 'Missing user id';
- end if;
-
- -- só considera tenant pessoal (kind='saas')
- select tm.tenant_id
- into v_existing
- from public.tenant_members tm
- join public.tenants t on t.id = tm.tenant_id
- where tm.user_id = v_uid
- and tm.status = 'active'
- and t.kind = 'saas'
- order by tm.created_at desc
- limit 1;
-
- if v_existing is not null then
- return v_existing;
- end if;
-
- select email into v_email
- from auth.users
- where id = v_uid;
-
- v_name := coalesce(split_part(v_email, '@', 1), 'Conta');
-
- insert into public.tenants (name, kind, created_at)
- values (v_name || ' (Pessoal)', 'saas', now())
- returning id into v_tenant;
-
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_tenant, v_uid, 'tenant_admin', 'active', now());
-
- return v_tenant;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."ensure_personal_tenant_for_user"("p_user_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."faq_votar"("faq_id" "uuid") RETURNS "void"
- LANGUAGE "sql" SECURITY DEFINER
- AS $$
- update public.saas_faq
- set votos = votos + 1,
- updated_at = now()
- where id = faq_id
- and ativo = true;
-$$;
-
-
-ALTER FUNCTION "public"."faq_votar"("faq_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."fix_all_subscription_mismatches"() RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- r record;
-begin
- for r in
- select distinct s.user_id as owner_id
- from public.subscriptions s
- where s.status = 'active'
- and s.user_id is not null
- loop
- perform public.rebuild_owner_entitlements(r.owner_id);
- end loop;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."fix_all_subscription_mismatches"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."fn_agenda_regras_semanais_no_overlap"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-declare
- v_count int;
-begin
- if new.ativo is false then
- return new;
- end if;
-
- select count(*) into v_count
- from public.agenda_regras_semanais r
- where r.owner_id = new.owner_id
- and r.dia_semana = new.dia_semana
- and r.ativo is true
- and (tg_op = 'INSERT' or r.id <> new.id)
- and (new.hora_inicio < r.hora_fim and new.hora_fim > r.hora_inicio);
-
- if v_count > 0 then
- raise exception 'Janela sobreposta: já existe uma regra ativa nesse intervalo.';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."fn_agenda_regras_semanais_no_overlap"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."get_my_email"() RETURNS "text"
- LANGUAGE "sql" SECURITY DEFINER
- SET "search_path" TO 'public', 'auth'
- AS $$
- select lower(email)
- from auth.users
- where id = auth.uid();
-$$;
-
-
-ALTER FUNCTION "public"."get_my_email"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."guard_account_type_immutable"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-BEGIN
- IF OLD.account_type <> 'free' AND NEW.account_type IS DISTINCT FROM OLD.account_type THEN
- RAISE EXCEPTION 'account_type é imutável após escolha (atual: "%" para tentativa: "%"). Para mudar de perfil, crie uma nova conta.', OLD.account_type, NEW.account_type
- USING ERRCODE = 'P0001';
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."guard_account_type_immutable"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."guard_locked_commitment"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-begin
- if (old.is_locked = true) then
- if (tg_op = 'DELETE') then
- raise exception 'Compromisso bloqueado não pode ser excluído.';
- end if;
-
- if (tg_op = 'UPDATE') then
- if (new.active = false) then
- raise exception 'Compromisso bloqueado não pode ser desativado.';
- end if;
-
- -- trava renomear (mantém o "Sessão" sempre igual)
- if (new.name is distinct from old.name) then
- raise exception 'Compromisso bloqueado não pode ser renomeado.';
- end if;
-
- -- se quiser travar descrição também, descomente:
- -- if (new.description is distinct from old.description) then
- -- raise exception 'Compromisso bloqueado não pode alterar descrição.';
- -- end if;
- end if;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."guard_locked_commitment"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."guard_no_change_core_plan_key"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-begin
- if old.key in ('clinic_free','clinic_pro','therapist_free','therapist_pro')
- and new.key is distinct from old.key then
- raise exception 'Não é permitido alterar a key do plano padrão (%).', old.key
- using errcode = 'P0001';
- end if;
-
- return new;
-end $$;
-
-
-ALTER FUNCTION "public"."guard_no_change_core_plan_key"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."guard_no_change_plan_target"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-declare
- v_bypass text;
-begin
- -- bypass controlado por sessão/transação:
- -- só passa se app.plan_migration_bypass = '1'
- v_bypass := current_setting('app.plan_migration_bypass', true);
-
- if v_bypass = '1' then
- return new;
- end if;
-
- -- comportamento original (bloqueia qualquer mudança)
- if new.target is distinct from old.target then
- raise exception 'Não é permitido alterar target do plano (%) de % para %.',
- old.key, old.target, new.target
- using errcode = 'P0001';
- end if;
-
- return new;
-end
-$$;
-
-
-ALTER FUNCTION "public"."guard_no_change_plan_target"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."guard_no_delete_core_plans"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-begin
- if old.key in ('clinic_free','clinic_pro','therapist_free','therapist_pro') then
- raise exception 'Plano padrão (%) não pode ser removido.', old.key
- using errcode = 'P0001';
- end if;
-
- return old;
-end $$;
-
-
-ALTER FUNCTION "public"."guard_no_delete_core_plans"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."guard_patient_cannot_own_tenant"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-DECLARE
- v_account_type text;
-BEGIN
- SELECT account_type INTO v_account_type
- FROM public.profiles
- WHERE id = NEW.user_id;
-
- IF v_account_type = 'patient' AND NEW.role IN ('tenant_admin', 'therapist') THEN
- RAISE EXCEPTION 'Usuário com perfil "patient" não pode ser proprietário ou terapeuta de um tenant. Se tornou profissional? Crie uma nova conta.'
- USING ERRCODE = 'P0001';
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."guard_patient_cannot_own_tenant"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."guard_tenant_kind_immutable"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-BEGIN
- IF NEW.kind IS DISTINCT FROM OLD.kind THEN
- RAISE EXCEPTION 'tenants.kind é imutável após criação. Tentativa de alterar "%" para "%".', OLD.kind, NEW.kind
- USING ERRCODE = 'P0001';
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."guard_tenant_kind_immutable"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."handle_new_user"() RETURNS "trigger"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
-BEGIN
- INSERT INTO public.profiles (id, role, account_type)
- VALUES (NEW.id, 'portal_user', 'free')
- ON CONFLICT (id) DO NOTHING;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."handle_new_user"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."handle_new_user_create_personal_tenant"() RETURNS "trigger"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-BEGIN
- -- Desabilitado. Tenant criado no onboarding via provision_account_tenant().
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."handle_new_user_create_personal_tenant"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."has_feature"("p_owner_id" "uuid", "p_feature_key" "text") RETURNS boolean
- LANGUAGE "sql" STABLE
- AS $$
- select exists (
- select 1
- from public.owner_feature_entitlements e
- where e.owner_id = p_owner_id
- and e.feature_key = p_feature_key
- );
-$$;
-
-
-ALTER FUNCTION "public"."has_feature"("p_owner_id" "uuid", "p_feature_key" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."is_clinic_tenant"("_tenant_id" "uuid") RETURNS boolean
- LANGUAGE "sql" STABLE
- AS $$
- SELECT EXISTS (
- SELECT 1 FROM public.tenants t
- WHERE t.id = _tenant_id
- AND t.kind IN ('clinic', 'clinic_coworking', 'clinic_reception', 'clinic_full')
- );
-$$;
-
-
-ALTER FUNCTION "public"."is_clinic_tenant"("_tenant_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."is_saas_admin"() RETURNS boolean
- LANGUAGE "sql" STABLE
- AS $$
- select exists (
- select 1 from public.saas_admins sa
- where sa.user_id = auth.uid()
- );
-$$;
-
-
-ALTER FUNCTION "public"."is_saas_admin"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."is_tenant_admin"("p_tenant_id" "uuid") RETURNS boolean
- LANGUAGE "sql" STABLE SECURITY DEFINER
- SET "search_path" TO 'public'
- SET "row_security" TO 'off'
- AS $$
- select exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.role = 'tenant_admin'
- and tm.status = 'active'
- );
-$$;
-
-
-ALTER FUNCTION "public"."is_tenant_admin"("p_tenant_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."is_tenant_member"("_tenant_id" "uuid") RETURNS boolean
- LANGUAGE "sql" STABLE
- AS $$
- select exists (
- select 1
- from public.tenant_members m
- where m.tenant_id = _tenant_id
- and m.user_id = auth.uid()
- and m.status = 'active'
- );
-$$;
-
-
-ALTER FUNCTION "public"."is_tenant_member"("_tenant_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."is_therapist_tenant"("_tenant_id" "uuid") RETURNS boolean
- LANGUAGE "sql" STABLE
- AS $$
- SELECT EXISTS (
- SELECT 1 FROM public.tenants t
- WHERE t.id = _tenant_id AND t.kind = 'therapist'
- );
-$$;
-
-
-ALTER FUNCTION "public"."is_therapist_tenant"("_tenant_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."jwt_email"() RETURNS "text"
- LANGUAGE "sql" STABLE
- AS $$
- select nullif(lower(current_setting('request.jwt.claim.email', true)), '');
-$$;
-
-
-ALTER FUNCTION "public"."jwt_email"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."my_tenants"() RETURNS TABLE("tenant_id" "uuid", "role" "text", "status" "text", "kind" "text")
- LANGUAGE "sql" STABLE
- AS $$
- select
- tm.tenant_id,
- tm.role,
- tm.status,
- t.kind
- from public.tenant_members tm
- join public.tenants t on t.id = tm.tenant_id
- where tm.user_id = auth.uid();
-$$;
-
-
-ALTER FUNCTION "public"."my_tenants"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."on_new_user_seed_patient_groups"() RETURNS "trigger"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
- BEGIN
- PERFORM public.seed_default_patient_groups(NEW.id);
- RETURN NEW;
- END;
- $$;
-
-
-ALTER FUNCTION "public"."on_new_user_seed_patient_groups"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."patients_validate_member_consistency"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-DECLARE
- v_tenant_responsible uuid;
- v_tenant_therapist uuid;
-BEGIN
- -- responsible_member sempre deve existir e ser do tenant
- SELECT tenant_id INTO v_tenant_responsible
- FROM public.tenant_members
- WHERE id = NEW.responsible_member_id;
-
- IF v_tenant_responsible IS NULL THEN
- RAISE EXCEPTION 'Responsible member not found';
- END IF;
-
- IF NEW.tenant_id IS NULL THEN
- RAISE EXCEPTION 'tenant_id is required';
- END IF;
-
- IF v_tenant_responsible <> NEW.tenant_id THEN
- RAISE EXCEPTION 'Responsible member must belong to the same tenant';
- END IF;
-
- -- therapist scope: therapist_member_id deve existir e ser do mesmo tenant
- IF NEW.patient_scope = 'therapist' THEN
- IF NEW.therapist_member_id IS NULL THEN
- RAISE EXCEPTION 'therapist_member_id is required when patient_scope=therapist';
- END IF;
-
- SELECT tenant_id INTO v_tenant_therapist
- FROM public.tenant_members
- WHERE id = NEW.therapist_member_id;
-
- IF v_tenant_therapist IS NULL THEN
- RAISE EXCEPTION 'Therapist member not found';
- END IF;
-
- IF v_tenant_therapist <> NEW.tenant_id THEN
- RAISE EXCEPTION 'Therapist member must belong to the same tenant';
- END IF;
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."patients_validate_member_consistency"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."patients_validate_responsible_member_tenant"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-declare
- m_tenant uuid;
-begin
- select tenant_id into m_tenant
- from public.tenant_members
- where id = new.responsible_member_id;
-
- if m_tenant is null then
- raise exception 'Responsible member not found';
- end if;
-
- if new.tenant_id is null then
- raise exception 'tenant_id is required';
- end if;
-
- if m_tenant <> new.tenant_id then
- raise exception 'Responsible member must belong to the same tenant';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."patients_validate_responsible_member_tenant"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."prevent_promoting_to_system"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-begin
- if new.is_system = true and old.is_system is distinct from true then
- raise exception 'Não é permitido transformar um grupo comum em grupo do sistema.';
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."prevent_promoting_to_system"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."prevent_saas_membership"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-BEGIN
- IF EXISTS (
- SELECT 1
- FROM public.profiles
- WHERE id = NEW.user_id
- AND role = 'saas_admin'
- ) THEN
- RAISE EXCEPTION 'SaaS admin cannot belong to tenant';
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."prevent_saas_membership"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."prevent_system_group_changes"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-begin
- -- Se for grupo do sistema, regras rígidas:
- if old.is_system = true then
-
- -- nunca pode deletar
- if tg_op = 'DELETE' then
- raise exception 'Grupos padrão do sistema não podem ser alterados ou excluídos.';
- end if;
-
- if tg_op = 'UPDATE' then
- -- permite SOMENTE mudar tenant_id e/ou updated_at
- -- qualquer mudança de conteúdo permanece proibida
- if
- new.nome is distinct from old.nome or
- new.descricao is distinct from old.descricao or
- new.cor is distinct from old.cor or
- new.is_active is distinct from old.is_active or
- new.is_system is distinct from old.is_system or
- new.owner_id is distinct from old.owner_id or
- new.therapist_id is distinct from old.therapist_id or
- new.created_at is distinct from old.created_at
- then
- raise exception 'Grupos padrão do sistema não podem ser alterados ou excluídos.';
- end if;
-
- -- chegou aqui: só tenant_id/updated_at mudaram -> ok
- return new;
- end if;
-
- end if;
-
- -- não-system: deixa passar
- if tg_op = 'DELETE' then
- return old;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."prevent_system_group_changes"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."provision_account_tenant"("p_user_id" "uuid", "p_kind" "text", "p_name" "text" DEFAULT NULL::"text") RETURNS "uuid"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-DECLARE
- v_tenant_id uuid;
- v_account_type text;
- v_name text;
-BEGIN
- IF p_kind NOT IN ('therapist', 'clinic_coworking', 'clinic_reception', 'clinic_full') THEN
- RAISE EXCEPTION 'kind inválido: "%". Use: therapist, clinic_coworking, clinic_reception, clinic_full.', p_kind
- USING ERRCODE = 'P0001';
- END IF;
-
- v_account_type := CASE WHEN p_kind = 'therapist' THEN 'therapist' ELSE 'clinic' END;
-
- IF EXISTS (
- SELECT 1
- FROM public.tenant_members tm
- JOIN public.tenants t ON t.id = tm.tenant_id
- WHERE tm.user_id = p_user_id
- AND tm.role = 'tenant_admin'
- AND tm.status = 'active'
- AND t.kind = p_kind
- ) THEN
- RAISE EXCEPTION 'Usuário já possui um tenant do tipo "%".', p_kind
- USING ERRCODE = 'P0001';
- END IF;
-
- v_name := COALESCE(
- NULLIF(TRIM(p_name), ''),
- (
- SELECT COALESCE(NULLIF(TRIM(pr.full_name), ''), SPLIT_PART(au.email, '@', 1))
- FROM public.profiles pr
- JOIN auth.users au ON au.id = pr.id
- WHERE pr.id = p_user_id
- ),
- 'Conta'
- );
-
- INSERT INTO public.tenants (name, kind, created_at)
- VALUES (v_name, p_kind, now())
- RETURNING id INTO v_tenant_id;
-
- INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
- VALUES (v_tenant_id, p_user_id, 'tenant_admin', 'active', now());
-
- UPDATE public.profiles
- SET account_type = v_account_type
- WHERE id = p_user_id;
-
- PERFORM public.seed_determined_commitments(v_tenant_id);
-
- RETURN v_tenant_id;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."provision_account_tenant"("p_user_id" "uuid", "p_kind" "text", "p_name" "text") OWNER TO "supabase_admin";
-
-
-COMMENT ON FUNCTION "public"."provision_account_tenant"("p_user_id" "uuid", "p_kind" "text", "p_name" "text") IS 'Cria o tenant do tipo correto e atualiza account_type no profile. Chamar no onboarding após escolha/pagamento de plano therapist ou clinic. p_kind: therapist | clinic_coworking | clinic_reception | clinic_full';
-
-
-
-CREATE OR REPLACE FUNCTION "public"."reactivate_subscription"("p_subscription_id" "uuid") RETURNS "public"."subscriptions"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_owner_type text;
- v_owner_ref uuid;
-begin
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- if v_sub.status = 'active' then
- return v_sub;
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set status = 'active',
- cancel_at_period_end = false,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'reactivated',
- v_sub.plan_id,
- v_sub.plan_id,
- auth.uid(),
- 'Reativação manual via admin',
- 'admin_panel',
- jsonb_build_object('previous_status', 'canceled')
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation(owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-
-end;
-$$;
-
-
-ALTER FUNCTION "public"."reactivate_subscription"("p_subscription_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."rebuild_owner_entitlements"("p_owner_id" "uuid") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_plan_id uuid;
-begin
- -- Plano ativo do owner (owner = subscriptions.user_id)
- select s.plan_id
- into v_plan_id
- from public.subscriptions s
- where s.user_id = p_owner_id
- and s.status = 'active'
- order by s.created_at desc
- limit 1;
-
- -- Sempre zera entitlements do owner (rebuild)
- delete from public.owner_feature_entitlements e
- where e.owner_id = p_owner_id;
-
- -- Se não tem assinatura ativa, acabou
- if v_plan_id is null then
- return;
- end if;
-
- -- Recria entitlements esperados pelo plano
- insert into public.owner_feature_entitlements (owner_id, feature_key, sources, limits_list)
- select
- p_owner_id as owner_id,
- f.key as feature_key,
- array['plan'::text] as sources,
- '{}'::jsonb as limits_list
- from public.plan_features pf
- join public.features f on f.id = pf.feature_id
- where pf.plan_id = v_plan_id;
-
-end;
-$$;
-
-
-ALTER FUNCTION "public"."rebuild_owner_entitlements"("p_owner_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."rotate_patient_invite_token"("p_new_token" "text") RETURNS "uuid"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
-declare
- v_uid uuid;
- v_id uuid;
-begin
- -- pega o usuário logado
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'Usuário não autenticado';
- end if;
-
- -- desativa tokens antigos ativos do usuário
- update public.patient_invites
- set active = false
- where owner_id = v_uid
- and active = true;
-
- -- cria novo token
- insert into public.patient_invites (owner_id, token, active)
- values (v_uid, p_new_token, true)
- returning id into v_id;
-
- return v_id;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."rotate_patient_invite_token"("p_new_token" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."saas_votar_doc"("p_doc_id" "uuid", "p_util" boolean) RETURNS "jsonb"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_uid uuid := auth.uid();
- v_voto_antigo boolean;
-begin
- if v_uid is null then
- raise exception 'Não autenticado';
- end if;
-
- -- Verifica se já votou
- select util into v_voto_antigo
- from public.saas_doc_votos
- where doc_id = p_doc_id and user_id = v_uid;
-
- if found then
- -- Já votou igual → cancela o voto (toggle)
- if v_voto_antigo = p_util then
- delete from public.saas_doc_votos
- where doc_id = p_doc_id and user_id = v_uid;
-
- update public.saas_docs set
- votos_util = greatest(0, votos_util - (case when p_util then 1 else 0 end)),
- votos_nao_util = greatest(0, votos_nao_util - (case when not p_util then 1 else 0 end)),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'removido', 'util', null);
- else
- -- Mudou de voto
- update public.saas_doc_votos set util = p_util, updated_at = now()
- where doc_id = p_doc_id and user_id = v_uid;
-
- update public.saas_docs set
- votos_util = greatest(0, votos_util + (case when p_util then 1 else -1 end)),
- votos_nao_util = greatest(0, votos_nao_util + (case when not p_util then 1 else -1 end)),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'atualizado', 'util', p_util);
- end if;
- else
- -- Primeiro voto
- insert into public.saas_doc_votos (doc_id, user_id, util)
- values (p_doc_id, v_uid, p_util);
-
- update public.saas_docs set
- votos_util = votos_util + (case when p_util then 1 else 0 end),
- votos_nao_util = votos_nao_util + (case when not p_util then 1 else 0 end),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'registrado', 'util', p_util);
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."saas_votar_doc"("p_doc_id" "uuid", "p_util" boolean) OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."seed_determined_commitments"("p_tenant_id" "uuid") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_id uuid;
-begin
- -- Sessão (locked + sempre ativa)
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'session'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'session', true, true, 'Sessão', 'Sessão com paciente');
- end if;
-
- -- Leitura
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'reading'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'reading', false, true, 'Leitura', 'Praticar leitura');
- end if;
-
- -- Supervisão
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'supervision'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'supervision', false, true, 'Supervisão', 'Supervisão');
- end if;
-
- -- Aula ✅ (corrigido)
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'class'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'class', false, false, 'Aula', 'Dar aula');
- end if;
-
- -- Análise pessoal
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'analysis'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'analysis', false, true, 'Análise Pessoal', 'Minha análise pessoal');
- end if;
-
- -- -------------------------------------------------------
- -- Campos padrão (idempotentes por (commitment_id, key))
- -- -------------------------------------------------------
-
- -- Leitura
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'reading'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'book') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'book', 'Livro', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'author') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'author', 'Autor', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Supervisão
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'supervision'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'supervisor') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'supervisor', 'Supervisor', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'topic') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'topic', 'Assunto', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Aula
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'class'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'theme') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'theme', 'Tema', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'group') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'group', 'Turma', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Análise
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'analysis'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'analyst') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'analyst', 'Analista', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'focus') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'focus', 'Foco', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."seed_determined_commitments"("p_tenant_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."set_owner_id"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-begin
- if new.owner_id is null then
- new.owner_id := auth.uid();
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."set_owner_id"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."set_tenant_feature_exception"("p_tenant_id" "uuid", "p_feature_key" "text", "p_enabled" boolean, "p_reason" "text" DEFAULT NULL::"text") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-begin
- -- ✅ Só owner ou admin do tenant podem alterar features
- if not exists (
- select 1 from public.tenant_members
- where tenant_id = p_tenant_id
- and user_id = auth.uid()
- and role in ('owner', 'admin')
- and status = 'active'
- ) then
- raise exception 'Acesso negado: apenas owner/admin pode alterar features do tenant.';
- end if;
-
- insert into public.tenant_features (tenant_id, feature_key, enabled)
- values (p_tenant_id, p_feature_key, p_enabled)
- on conflict (tenant_id, feature_key)
- do update set enabled = excluded.enabled;
-
- insert into public.tenant_feature_exceptions_log (
- tenant_id, feature_key, enabled, reason, created_by
- ) values (
- p_tenant_id, p_feature_key, p_enabled, p_reason, auth.uid()
- );
-end;
-$$;
-
-
-ALTER FUNCTION "public"."set_tenant_feature_exception"("p_tenant_id" "uuid", "p_feature_key" "text", "p_enabled" boolean, "p_reason" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."set_updated_at"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-begin
- new.updated_at = now();
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."set_updated_at"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."set_updated_at_recurrence"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-BEGIN NEW.updated_at = now(); RETURN NEW; END;
-$$;
-
-
-ALTER FUNCTION "public"."set_updated_at_recurrence"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."split_recurrence_at"("p_recurrence_id" "uuid", "p_from_date" "date") RETURNS "uuid"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
-DECLARE
- v_old public.recurrence_rules;
- v_new_id uuid;
-BEGIN
- -- busca a regra original
- SELECT * INTO v_old
- FROM public.recurrence_rules
- WHERE id = p_recurrence_id;
-
- IF NOT FOUND THEN
- RAISE EXCEPTION 'recurrence_rule % não encontrada', p_recurrence_id;
- END IF;
-
- -- encerra a regra antiga na data anterior
- UPDATE public.recurrence_rules
- SET
- end_date = p_from_date - INTERVAL '1 day',
- open_ended = false,
- updated_at = now()
- WHERE id = p_recurrence_id;
-
- -- cria nova regra a partir de p_from_date
- INSERT INTO public.recurrence_rules (
- tenant_id, owner_id, therapist_id, patient_id,
- determined_commitment_id, type, interval, weekdays,
- start_time, end_time, timezone, duration_min,
- start_date, end_date, max_occurrences, open_ended,
- modalidade, titulo_custom, observacoes, extra_fields, status
- )
- SELECT
- tenant_id, owner_id, therapist_id, patient_id,
- determined_commitment_id, type, interval, weekdays,
- start_time, end_time, timezone, duration_min,
- p_from_date, v_old.end_date, v_old.max_occurrences, v_old.open_ended,
- modalidade, titulo_custom, observacoes, extra_fields, status
- FROM public.recurrence_rules
- WHERE id = p_recurrence_id
- RETURNING id INTO v_new_id;
-
- RETURN v_new_id;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."split_recurrence_at"("p_recurrence_id" "uuid", "p_from_date" "date") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."subscription_intents_view_insert"() RETURNS "trigger"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_target text;
- v_plan_id uuid;
-begin
- select p.id, p.target into v_plan_id, v_target
- from public.plans p
- where p.key = new.plan_key;
-
- if v_plan_id is null then
- raise exception 'Plano inválido: plan_key=%', new.plan_key;
- end if;
-
- if lower(v_target) = 'clinic' then
- if new.tenant_id is null then
- raise exception 'Intenção clinic exige tenant_id.';
- end if;
-
- insert into public.subscription_intents_tenant (
- id, tenant_id, created_by_user_id, email,
- plan_id, plan_key, interval, amount_cents, currency,
- status, source, notes, created_at, paid_at
- ) values (
- coalesce(new.id, gen_random_uuid()),
- new.tenant_id, new.created_by_user_id, new.email,
- v_plan_id, new.plan_key, coalesce(new.interval,'month'),
- new.amount_cents, coalesce(new.currency,'BRL'),
- coalesce(new.status,'pending'), coalesce(new.source,'manual'),
- new.notes, coalesce(new.created_at, now()), new.paid_at
- );
-
- new.plan_target := 'clinic';
- return new;
- end if;
-
- -- therapist ou supervisor → tabela personal
- if lower(v_target) in ('therapist', 'supervisor') then
- insert into public.subscription_intents_personal (
- id, user_id, created_by_user_id, email,
- plan_id, plan_key, interval, amount_cents, currency,
- status, source, notes, created_at, paid_at
- ) values (
- coalesce(new.id, gen_random_uuid()),
- new.user_id, new.created_by_user_id, new.email,
- v_plan_id, new.plan_key, coalesce(new.interval,'month'),
- new.amount_cents, coalesce(new.currency,'BRL'),
- coalesce(new.status,'pending'), coalesce(new.source,'manual'),
- new.notes, coalesce(new.created_at, now()), new.paid_at
- );
-
- new.plan_target := lower(v_target); -- 'therapist' ou 'supervisor'
- return new;
- end if;
-
- raise exception 'Target de plano não suportado: %', v_target;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."subscription_intents_view_insert"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."subscriptions_validate_scope"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-DECLARE
- v_target text;
-BEGIN
- SELECT lower(p.target) INTO v_target
- FROM public.plans p
- WHERE p.id = NEW.plan_id;
-
- IF v_target IS NULL THEN
- RAISE EXCEPTION 'Plano inválido (target nulo).';
- END IF;
-
- IF v_target = 'clinic' THEN
- IF NEW.tenant_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura clinic exige tenant_id.';
- END IF;
- IF NEW.user_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura clinic não pode ter user_id (XOR).';
- END IF;
-
- ELSIF v_target IN ('therapist', 'supervisor') THEN
- -- supervisor é pessoal como therapist
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura % não deve ter tenant_id.', v_target;
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura % exige user_id.', v_target;
- END IF;
-
- ELSIF v_target = 'patient' THEN
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura patient não deve ter tenant_id.';
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura patient exige user_id.';
- END IF;
-
- ELSE
- RAISE EXCEPTION 'Target de plano inválido: %', v_target;
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION "public"."subscriptions_validate_scope"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."sync_busy_mirror_agenda_eventos"() RETURNS "trigger"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- AS $$
-declare
- clinic_tenant uuid;
- is_personal boolean;
- should_mirror boolean;
-begin
- -- Anti-recursão: espelho não espelha
- if (tg_op <> 'DELETE') then
- if new.mirror_of_event_id is not null then
- return new;
- end if;
- else
- if old.mirror_of_event_id is not null then
- return old;
- end if;
- end if;
-
- -- Define se é pessoal e se deve espelhar
- if (tg_op = 'DELETE') then
- is_personal := (old.tenant_id = old.owner_id);
- should_mirror := (old.visibility_scope in ('busy_only','private'));
- else
- is_personal := (new.tenant_id = new.owner_id);
- should_mirror := (new.visibility_scope in ('busy_only','private'));
- end if;
-
- -- Se não é pessoal, não faz nada
- if not is_personal then
- if (tg_op = 'DELETE') then
- return old;
- end if;
- return new;
- end if;
-
- -- DELETE: remove espelhos existentes
- if (tg_op = 'DELETE') then
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = old.id
- and e.mirror_source = 'personal_busy_mirror';
-
- return old;
- end if;
-
- -- INSERT/UPDATE:
- -- Se não deve espelhar, remove espelhos e sai
- if not should_mirror then
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = new.id
- and e.mirror_source = 'personal_busy_mirror';
-
- return new;
- end if;
-
- -- Para cada clínica onde o usuário é therapist active, cria/atualiza o "Ocupado"
- for clinic_tenant in
- select tm.tenant_id
- from public.tenant_members tm
- where tm.user_id = new.owner_id
- and tm.role = 'therapist'
- and tm.status = 'active'
- and tm.tenant_id <> new.owner_id
- loop
- insert into public.agenda_eventos (
- tenant_id,
- owner_id,
- terapeuta_id,
- paciente_id,
- tipo,
- status,
- titulo,
- observacoes,
- inicio_em,
- fim_em,
- mirror_of_event_id,
- mirror_source,
- visibility_scope,
- created_at,
- updated_at
- ) values (
- clinic_tenant,
- new.owner_id,
- new.owner_id,
- null,
- 'bloqueio'::public.tipo_evento_agenda,
- 'agendado'::public.status_evento_agenda,
- 'Ocupado',
- null,
- new.inicio_em,
- new.fim_em,
- new.id,
- 'personal_busy_mirror',
- 'public',
- now(),
- now()
- )
- on conflict (tenant_id, mirror_of_event_id) where mirror_of_event_id is not null
- do update set
- owner_id = excluded.owner_id,
- terapeuta_id = excluded.terapeuta_id,
- tipo = excluded.tipo,
- status = excluded.status,
- titulo = excluded.titulo,
- observacoes = excluded.observacoes,
- inicio_em = excluded.inicio_em,
- fim_em = excluded.fim_em,
- updated_at = now();
- end loop;
-
- -- Limpa espelhos de clínicas onde o vínculo therapist active não existe mais
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = new.id
- and e.mirror_source = 'personal_busy_mirror'
- and not exists (
- select 1
- from public.tenant_members tm
- where tm.user_id = new.owner_id
- and tm.role = 'therapist'
- and tm.status = 'active'
- and tm.tenant_id = e.tenant_id
- );
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."sync_busy_mirror_agenda_eventos"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_accept_invite"("p_token" "uuid") RETURNS "jsonb"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public', 'auth'
- AS $$
-declare
- v_uid uuid;
- v_email text;
- v_invite public.tenant_invites%rowtype;
-begin
- -- 1) precisa estar autenticado
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'not_authenticated' using errcode = 'P0001';
- end if;
-
- -- 2) pega email real do usuário logado sem depender do JWT claim
- select u.email
- into v_email
- from auth.users u
- where u.id = v_uid;
-
- if v_email is null or length(trim(v_email)) = 0 then
- raise exception 'missing_user_email' using errcode = 'P0001';
- end if;
-
- -- 3) carrega o invite e trava linha (evita 2 aceites concorrentes)
- select *
- into v_invite
- from public.tenant_invites i
- where i.token = p_token
- for update;
-
- if not found then
- raise exception 'invite_not_found' using errcode = 'P0001';
- end if;
-
- -- 4) validações de estado
- if v_invite.revoked_at is not null then
- raise exception 'invite_revoked' using errcode = 'P0001';
- end if;
-
- if v_invite.accepted_at is not null then
- raise exception 'invite_already_accepted' using errcode = 'P0001';
- end if;
-
- if v_invite.expires_at is not null and v_invite.expires_at <= now() then
- raise exception 'invite_expired' using errcode = 'P0001';
- end if;
-
- -- 5) valida email (case-insensitive)
- if lower(trim(v_invite.email)) <> lower(trim(v_email)) then
- raise exception 'email_mismatch' using errcode = 'P0001';
- end if;
-
- -- 6) consome o invite
- update public.tenant_invites
- set accepted_at = now(),
- accepted_by = v_uid
- where id = v_invite.id;
-
- -- 7) cria ou reativa o membership
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_invite.tenant_id, v_uid, v_invite.role, 'active', now())
- on conflict (tenant_id, user_id)
- do update set
- role = excluded.role,
- status = 'active';
-
- -- 8) retorno útil pro front (você já tenta ler tenant_id no AcceptInvitePage)
- return jsonb_build_object(
- 'ok', true,
- 'tenant_id', v_invite.tenant_id,
- 'role', v_invite.role
- );
-end;
-$$;
-
-
-ALTER FUNCTION "public"."tenant_accept_invite"("p_token" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."tenant_members" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- "user_id" "uuid" NOT NULL,
- "role" "text" NOT NULL,
- "status" "text" DEFAULT 'active'::"text" NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."tenant_members" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_add_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text" DEFAULT 'therapist'::"text") RETURNS "public"."tenant_members"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public', 'auth'
- AS $$
-declare
- v_target_uid uuid;
- v_member public.tenant_members%rowtype;
- v_is_admin boolean;
- v_email text;
-begin
- if p_tenant_id is null then
- raise exception 'tenant_id é obrigatório';
- end if;
-
- v_email := lower(trim(coalesce(p_email, '')));
- if v_email = '' then
- raise exception 'email é obrigatório';
- end if;
-
- -- valida role permitida
- if p_role not in ('tenant_admin','therapist','secretary','patient') then
- raise exception 'role inválida: %', p_role;
- end if;
-
- -- apenas admin do tenant (role real no banco)
- select exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.role = 'tenant_admin'
- and coalesce(tm.status,'active') = 'active'
- ) into v_is_admin;
-
- if not v_is_admin then
- raise exception 'sem permissão: apenas admin da clínica pode adicionar membros';
- end if;
-
- -- acha usuário pelo e-mail no Supabase Auth
- select u.id
- into v_target_uid
- from auth.users u
- where lower(u.email) = v_email
- limit 1;
-
- if v_target_uid is null then
- raise exception 'nenhum usuário encontrado com este e-mail';
- end if;
-
- -- cria ou reativa membro
- insert into public.tenant_members (tenant_id, user_id, role, status)
- values (p_tenant_id, v_target_uid, p_role, 'active')
- on conflict (tenant_id, user_id)
- do update set
- role = excluded.role,
- status = 'active'
- returning * into v_member;
-
- return v_member;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."tenant_add_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_feature_allowed"("p_tenant_id" "uuid", "p_feature_key" "text") RETURNS boolean
- LANGUAGE "sql" STABLE
- AS $$
- select exists (
- select 1
- from public.v_tenant_entitlements v
- where v.tenant_id = p_tenant_id
- and v.feature_key = p_feature_key
- and coalesce(v.allowed, false) = true
- );
-$$;
-
-
-ALTER FUNCTION "public"."tenant_feature_allowed"("p_tenant_id" "uuid", "p_feature_key" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_feature_enabled"("p_tenant_id" "uuid", "p_feature_key" "text") RETURNS boolean
- LANGUAGE "sql" STABLE
- AS $$
- select coalesce(
- (select tf.enabled
- from public.tenant_features tf
- where tf.tenant_id = p_tenant_id and tf.feature_key = p_feature_key),
- false
- );
-$$;
-
-
-ALTER FUNCTION "public"."tenant_feature_enabled"("p_tenant_id" "uuid", "p_feature_key" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_features_guard_with_plan"() RETURNS "trigger"
- LANGUAGE "plpgsql"
- AS $$
-declare
- v_allowed boolean;
-begin
- -- só valida quando está habilitando
- if new.enabled is distinct from true then
- return new;
- end if;
-
- -- permitido pelo plano do tenant?
- select exists (
- select 1
- from public.v_tenant_entitlements_full v
- where v.tenant_id = new.tenant_id
- and v.feature_key = new.feature_key
- and v.allowed = true
- )
- into v_allowed;
-
- if not v_allowed then
- raise exception 'Feature % não permitida pelo plano atual do tenant %.',
- new.feature_key, new.tenant_id
- using errcode = 'P0001';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."tenant_features_guard_with_plan"() OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_has_feature"("_tenant_id" "uuid", "_feature" "text") RETURNS boolean
- LANGUAGE "sql" STABLE
- AS $$
- select
- exists (
- select 1
- from public.v_tenant_entitlements e
- where e.tenant_id = _tenant_id
- and e.feature_key = _feature
- and e.allowed = true
- )
- or exists (
- select 1
- from public.tenant_features tf
- where tf.tenant_id = _tenant_id
- and tf.feature_key = _feature
- and tf.enabled = true
- );
-$$;
-
-
-ALTER FUNCTION "public"."tenant_has_feature"("_tenant_id" "uuid", "_feature" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_invite_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") RETURNS "uuid"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public', 'auth'
- AS $$
-declare
- v_email text;
- v_my_email text;
- v_token uuid;
- v_updated int;
-begin
- -- validações básicas
- if p_tenant_id is null then
- raise exception 'tenant_id inválido' using errcode = 'P0001';
- end if;
-
- v_email := lower(trim(coalesce(p_email, '')));
- if v_email = '' then
- raise exception 'Informe um email' using errcode = 'P0001';
- end if;
-
- -- role permitido (ajuste se quiser)
- if p_role is null or p_role not in ('therapist', 'secretary') then
- raise exception 'Role inválido (use therapist/secretary)' using errcode = 'P0001';
- end if;
-
- -- ✅ bloqueio: auto-convite
- v_my_email := public.get_my_email();
- if v_my_email is not null and v_email = v_my_email then
- raise exception 'Você não pode convidar o seu próprio email.' using errcode = 'P0001';
- end if;
-
- -- ✅ bloqueio: já é membro ativo do tenant
- if exists (
- select 1
- from tenant_members tm
- join auth.users au on au.id = tm.user_id
- where tm.tenant_id = p_tenant_id
- and tm.status = 'active'
- and lower(au.email) = v_email
- ) then
- raise exception 'Este email já está vinculado a esta clínica.' using errcode = 'P0001';
- end if;
-
- -- ✅ permissão: só admin do tenant pode convidar
- if not exists (
- select 1
- from tenant_members me
- where me.tenant_id = p_tenant_id
- and me.user_id = auth.uid()
- and me.status = 'active'
- and me.role in ('tenant_admin','clinic_admin')
- ) then
- raise exception 'Sem permissão para convidar membros.' using errcode = 'P0001';
- end if;
-
- -- Gera token (reenvio simples / regeneração)
- v_token := gen_random_uuid();
-
- -- 1) tenta "regerar" um convite pendente existente (mesmo email)
- update tenant_invites
- set token = v_token,
- role = p_role,
- created_at = now(),
- expires_at = now() + interval '7 days',
- accepted_at = null,
- revoked_at = null
- where tenant_id = p_tenant_id
- and lower(email) = v_email
- and accepted_at is null
- and revoked_at is null;
-
- get diagnostics v_updated = row_count;
-
- -- 2) se não atualizou nada, cria convite novo
- if v_updated = 0 then
- insert into tenant_invites (tenant_id, email, role, token, created_at, expires_at)
- values (p_tenant_id, v_email, p_role, v_token, now(), now() + interval '7 days');
- end if;
-
- return v_token;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."tenant_invite_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_reactivate_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- SET "row_security" TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- update public.tenant_members
- set status = 'active'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."tenant_reactivate_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_remove_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- SET "row_security" TO 'off'
- AS $$
-declare
- v_role text;
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- if p_member_user_id = auth.uid() then
- raise exception 'cannot_remove_self';
- end if;
-
- -- pega role atual do membro (se não existir, erro)
- select role into v_role
- from public.tenant_members
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if v_role is null then
- raise exception 'membership_not_found';
- end if;
-
- -- trava: se for therapist, não pode remover com eventos futuros
- if v_role = 'therapist' then
- if exists (
- select 1
- from public.agenda_eventos e
- where e.owner_id = p_tenant_id
- and e.terapeuta_id = p_member_user_id
- and e.inicio_em >= now()
- and e.status::text not in ('cancelado','cancelled','canceled')
- limit 1
- ) then
- raise exception 'cannot_remove_therapist_with_future_events';
- end if;
- end if;
-
- update public.tenant_members
- set status = 'inactive'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."tenant_remove_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_remove_member_soft"("p_tenant_id" "uuid", "p_member_user_id" "uuid") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- SET "row_security" TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- if p_member_user_id = auth.uid() then
- raise exception 'cannot_remove_self';
- end if;
-
- update public.tenant_members
- set status = 'inactive'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."tenant_remove_member_soft"("p_tenant_id" "uuid", "p_member_user_id" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_revoke_invite"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- SET "row_security" TO 'off'
- AS $$
-declare
- v_email text;
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- v_email := lower(trim(p_email));
-
- update public.tenant_invites
- set revoked_at = now(),
- revoked_by = auth.uid()
- where tenant_id = p_tenant_id
- and lower(email) = v_email
- and role = p_role
- and accepted_at is null
- and revoked_at is null;
-
- if not found then
- raise exception 'invite_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."tenant_revoke_invite"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_set_member_status"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_status" "text") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- SET "row_security" TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- -- valida status (adapte aos seus valores reais)
- if p_new_status not in ('active','inactive','suspended','invited') then
- raise exception 'invalid_status: %', p_new_status;
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- -- evita desativar a si mesmo (opcional)
- if p_member_user_id = auth.uid() and p_new_status <> 'active' then
- raise exception 'cannot_disable_self';
- end if;
-
- update public.tenant_members
- set status = p_new_status
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."tenant_set_member_status"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_status" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."tenant_update_member_role"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_role" "text") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- SET "search_path" TO 'public'
- SET "row_security" TO 'off'
- AS $$
-begin
- -- exige auth
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- -- valida role
- if p_new_role not in ('tenant_admin','therapist','secretary','patient') then
- raise exception 'invalid_role: %', p_new_role;
- end if;
-
- -- somente tenant_admin ativo pode alterar role
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- -- evita o admin remover o próprio admin sem querer (opcional mas recomendado)
- if p_member_user_id = auth.uid() and p_new_role <> 'tenant_admin' then
- raise exception 'cannot_demote_self';
- end if;
-
- update public.tenant_members
- set role = p_new_role
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."tenant_update_member_role"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_role" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."toggle_plan"("owner" "uuid") RETURNS "void"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- current_key text;
- new_key text;
-begin
- select p.key into current_key
- from subscriptions s
- join plans p on p.id = s.plan_id
- where s.owner_id = owner
- and s.status = 'active';
-
- new_key := case
- when current_key = 'pro' then 'free'
- else 'pro'
- end;
-
- update subscriptions s
- set plan_id = p.id
- from plans p
- where p.key = new_key
- and s.owner_id = owner
- and s.status = 'active';
-end;
-$$;
-
-
-ALTER FUNCTION "public"."toggle_plan"("owner" "uuid") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."transition_subscription"("p_subscription_id" "uuid", "p_to_status" "text", "p_reason" "text" DEFAULT NULL::"text", "p_metadata" "jsonb" DEFAULT NULL::"jsonb") RETURNS "public"."subscriptions"
- LANGUAGE "plpgsql" SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_uid uuid;
- v_is_allowed boolean := false;
-begin
- v_uid := auth.uid();
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id;
-
- if not found then
- raise exception 'Assinatura não encontrada';
- end if;
-
- -- =====================================================
- -- 🔐 BLOCO DE AUTORIZAÇÃO
- -- =====================================================
-
- -- 1) SaaS admin pode tudo
- if is_saas_admin() then
- v_is_allowed := true;
- end if;
-
- -- 2) Assinatura pessoal (therapist)
- if not v_is_allowed
- and v_sub.tenant_id is null
- and v_sub.user_id = v_uid then
- v_is_allowed := true;
- end if;
-
- -- 3) Assinatura de clinic (tenant)
- if not v_is_allowed
- and v_sub.tenant_id is not null then
-
- if exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = v_sub.tenant_id
- and tm.user_id = v_uid
- and tm.status = 'active'
- and tm.role = 'tenant_admin'
- ) then
- v_is_allowed := true;
- end if;
-
- end if;
-
- if not v_is_allowed then
- raise exception 'Sem permissão para transicionar esta assinatura';
- end if;
-
- -- =====================================================
- -- 🧠 TRANSIÇÃO
- -- =====================================================
-
- update public.subscriptions
- set status = p_to_status,
- updated_at = now(),
- cancelled_at = case when p_to_status = 'cancelled' then now() else cancelled_at end,
- suspended_at = case when p_to_status = 'suspended' then now() else suspended_at end,
- past_due_since = case when p_to_status = 'past_due' then now() else past_due_since end,
- expired_at = case when p_to_status = 'expired' then now() else expired_at end,
- activated_at = case when p_to_status = 'active' then now() else activated_at end
- where id = p_subscription_id
- returning * into v_sub;
-
- -- =====================================================
- -- 🧾 EVENT LOG
- -- =====================================================
-
- insert into public.subscription_events (
- subscription_id,
- owner_id,
- event_type,
- created_at,
- created_by,
- source,
- reason,
- metadata,
- owner_type,
- owner_ref
- )
- values (
- v_sub.id,
- coalesce(v_sub.tenant_id, v_sub.user_id),
- 'status_changed',
- now(),
- v_uid,
- 'manual_transition',
- p_reason,
- p_metadata,
- case when v_sub.tenant_id is not null then 'tenant' else 'personal' end,
- coalesce(v_sub.tenant_id, v_sub.user_id)
- );
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION "public"."transition_subscription"("p_subscription_id" "uuid", "p_to_status" "text", "p_reason" "text", "p_metadata" "jsonb") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."user_has_feature"("_user_id" "uuid", "_feature" "text") RETURNS boolean
- LANGUAGE "sql" STABLE
- AS $$
- select exists (
- select 1
- from public.v_user_entitlements e
- where e.user_id = _user_id
- and e.feature_key = _feature
- and e.allowed = true
- );
-$$;
-
-
-ALTER FUNCTION "public"."user_has_feature"("_user_id" "uuid", "_feature" "text") OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE FUNCTION "public"."whoami"() RETURNS TABLE("uid" "uuid", "role" "text")
- LANGUAGE "sql" STABLE
- AS $$
- select auth.uid() as uid, auth.role() as role;
-$$;
-
-
-ALTER FUNCTION "public"."whoami"() OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."agenda_bloqueios" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "tenant_id" "uuid",
- "tipo" "text" NOT NULL,
- "titulo" "text" NOT NULL,
- "data_inicio" "date" NOT NULL,
- "data_fim" "date",
- "hora_inicio" time without time zone,
- "hora_fim" time without time zone,
- "recorrente" boolean DEFAULT false NOT NULL,
- "dia_semana" smallint,
- "observacao" "text",
- "origem" "text" DEFAULT 'manual'::"text" NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- CONSTRAINT "agenda_bloqueios_tipo_check" CHECK (("tipo" = ANY (ARRAY['feriado_nacional'::"text", 'feriado_municipal'::"text", 'bloqueio'::"text"])))
-);
-
-
-ALTER TABLE "public"."agenda_bloqueios" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."agenda_configuracoes" (
- "owner_id" "uuid" NOT NULL,
- "duracao_padrao_minutos" integer DEFAULT 50 NOT NULL,
- "intervalo_padrao_minutos" integer DEFAULT 0 NOT NULL,
- "timezone" "text" DEFAULT 'America/Sao_Paulo'::"text" NOT NULL,
- "usar_horario_admin_custom" boolean DEFAULT false NOT NULL,
- "admin_inicio_visualizacao" time without time zone,
- "admin_fim_visualizacao" time without time zone,
- "admin_slot_visual_minutos" integer DEFAULT 30 NOT NULL,
- "online_ativo" boolean DEFAULT false NOT NULL,
- "online_min_antecedencia_horas" integer DEFAULT 24 NOT NULL,
- "online_max_dias_futuro" integer DEFAULT 60 NOT NULL,
- "online_cancelar_ate_horas" integer DEFAULT 12 NOT NULL,
- "online_reagendar_ate_horas" integer DEFAULT 12 NOT NULL,
- "online_limite_agendamentos_futuros" integer DEFAULT 1 NOT NULL,
- "online_modo" "text" DEFAULT 'automatico'::"text" NOT NULL,
- "online_buffer_antes_min" integer DEFAULT 0 NOT NULL,
- "online_buffer_depois_min" integer DEFAULT 0 NOT NULL,
- "online_modalidade" "text" DEFAULT 'ambos'::"text" NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "usar_granularidade_custom" boolean DEFAULT false NOT NULL,
- "granularidade_min" integer,
- "setup_concluido" boolean DEFAULT false NOT NULL,
- "setup_concluido_em" timestamp with time zone,
- "agenda_view_mode" "text" DEFAULT 'full_24h'::"text" NOT NULL,
- "agenda_custom_start" time without time zone,
- "agenda_custom_end" time without time zone,
- "session_duration_min" integer DEFAULT 50 NOT NULL,
- "session_break_min" integer DEFAULT 10 NOT NULL,
- "pausas_semanais" "jsonb" DEFAULT '[]'::"jsonb" NOT NULL,
- "setup_clinica_concluido" boolean DEFAULT false NOT NULL,
- "setup_clinica_concluido_em" timestamp with time zone,
- "tenant_id" "uuid",
- "jornada_igual_todos" boolean DEFAULT true,
- CONSTRAINT "agenda_configuracoes_admin_slot_visual_minutos_check" CHECK (("admin_slot_visual_minutos" = ANY (ARRAY[5, 10, 15, 20, 30, 60]))),
- CONSTRAINT "agenda_configuracoes_check" CHECK ((("usar_horario_admin_custom" = false) OR (("admin_inicio_visualizacao" IS NOT NULL) AND ("admin_fim_visualizacao" IS NOT NULL) AND ("admin_fim_visualizacao" > "admin_inicio_visualizacao")))),
- CONSTRAINT "agenda_configuracoes_duracao_padrao_minutos_check" CHECK ((("duracao_padrao_minutos" >= 10) AND ("duracao_padrao_minutos" <= 240))),
- CONSTRAINT "agenda_configuracoes_granularidade_min_check" CHECK ((("granularidade_min" IS NULL) OR ("granularidade_min" = ANY (ARRAY[5, 10, 15, 20, 30, 45, 50, 60])))),
- CONSTRAINT "agenda_configuracoes_intervalo_padrao_minutos_check" CHECK ((("intervalo_padrao_minutos" >= 0) AND ("intervalo_padrao_minutos" <= 120))),
- CONSTRAINT "agenda_configuracoes_online_buffer_antes_min_check" CHECK ((("online_buffer_antes_min" >= 0) AND ("online_buffer_antes_min" <= 120))),
- CONSTRAINT "agenda_configuracoes_online_buffer_depois_min_check" CHECK ((("online_buffer_depois_min" >= 0) AND ("online_buffer_depois_min" <= 120))),
- CONSTRAINT "agenda_configuracoes_online_cancelar_ate_horas_check" CHECK ((("online_cancelar_ate_horas" >= 0) AND ("online_cancelar_ate_horas" <= 720))),
- CONSTRAINT "agenda_configuracoes_online_limite_agendamentos_futuros_check" CHECK ((("online_limite_agendamentos_futuros" >= 1) AND ("online_limite_agendamentos_futuros" <= 10))),
- CONSTRAINT "agenda_configuracoes_online_max_dias_futuro_check" CHECK ((("online_max_dias_futuro" >= 1) AND ("online_max_dias_futuro" <= 365))),
- CONSTRAINT "agenda_configuracoes_online_min_antecedencia_horas_check" CHECK ((("online_min_antecedencia_horas" >= 0) AND ("online_min_antecedencia_horas" <= 720))),
- CONSTRAINT "agenda_configuracoes_online_modalidade_check" CHECK (("online_modalidade" = ANY (ARRAY['online'::"text", 'presencial'::"text", 'ambos'::"text"]))),
- CONSTRAINT "agenda_configuracoes_online_modo_check" CHECK (("online_modo" = ANY (ARRAY['automatico'::"text", 'aprovacao'::"text"]))),
- CONSTRAINT "agenda_configuracoes_online_reagendar_ate_horas_check" CHECK ((("online_reagendar_ate_horas" >= 0) AND ("online_reagendar_ate_horas" <= 720))),
- CONSTRAINT "session_break_min_chk" CHECK ((("session_break_min" >= 0) AND ("session_break_min" <= 60))),
- CONSTRAINT "session_duration_min_chk" CHECK ((("session_duration_min" >= 10) AND ("session_duration_min" <= 240)))
-);
-
-
-ALTER TABLE "public"."agenda_configuracoes" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."agenda_eventos" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "paciente_id" "uuid",
- "tipo" "public"."tipo_evento_agenda" DEFAULT 'sessao'::"public"."tipo_evento_agenda" NOT NULL,
- "status" "public"."status_evento_agenda" DEFAULT 'agendado'::"public"."status_evento_agenda" NOT NULL,
- "titulo" "text",
- "observacoes" "text",
- "inicio_em" timestamp with time zone NOT NULL,
- "fim_em" timestamp with time zone NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "terapeuta_id" "uuid",
- "tenant_id" "uuid" NOT NULL,
- "visibility_scope" "text" DEFAULT 'public'::"text" NOT NULL,
- "mirror_of_event_id" "uuid",
- "mirror_source" "text",
- "patient_id" "uuid",
- "determined_commitment_id" "uuid",
- "link_online" "text",
- "titulo_custom" "text",
- "extra_fields" "jsonb",
- "recurrence_id" "uuid",
- "recurrence_date" "date",
- "modalidade" "text" DEFAULT 'presencial'::"text",
- CONSTRAINT "agenda_eventos_check" CHECK (("fim_em" > "inicio_em"))
-);
-
-
-ALTER TABLE "public"."agenda_eventos" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."agenda_excecoes" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "data" "date" NOT NULL,
- "hora_inicio" time without time zone,
- "hora_fim" time without time zone,
- "tipo" "public"."tipo_excecao_agenda" NOT NULL,
- "motivo" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "status" "public"."status_excecao_agenda" DEFAULT 'ativo'::"public"."status_excecao_agenda" NOT NULL,
- "fonte" "text" DEFAULT 'manual'::"text" NOT NULL,
- "aplicavel_online" boolean DEFAULT true NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- CONSTRAINT "agenda_excecoes_check" CHECK (((("hora_inicio" IS NULL) AND ("hora_fim" IS NULL)) OR (("hora_inicio" IS NOT NULL) AND ("hora_fim" IS NOT NULL) AND ("hora_fim" > "hora_inicio")))),
- CONSTRAINT "agenda_excecoes_fonte_check" CHECK (("fonte" = ANY (ARRAY['manual'::"text", 'feriado_google'::"text", 'sistema'::"text"])))
-);
-
-
-ALTER TABLE "public"."agenda_excecoes" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."agenda_online_slots" (
- "id" bigint NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "weekday" integer NOT NULL,
- "time" time without time zone NOT NULL,
- "enabled" boolean DEFAULT true NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- CONSTRAINT "agenda_online_slots_weekday_check" CHECK (("weekday" = ANY (ARRAY[0, 1, 2, 3, 4, 5, 6])))
-);
-
-
-ALTER TABLE "public"."agenda_online_slots" OWNER TO "supabase_admin";
-
-
-CREATE SEQUENCE IF NOT EXISTS "public"."agenda_online_slots_id_seq"
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER SEQUENCE "public"."agenda_online_slots_id_seq" OWNER TO "supabase_admin";
-
-
-ALTER SEQUENCE "public"."agenda_online_slots_id_seq" OWNED BY "public"."agenda_online_slots"."id";
-
-
-
-CREATE TABLE IF NOT EXISTS "public"."agenda_regras_semanais" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "dia_semana" smallint NOT NULL,
- "hora_inicio" time without time zone NOT NULL,
- "hora_fim" time without time zone NOT NULL,
- "modalidade" "text" DEFAULT 'ambos'::"text" NOT NULL,
- "ativo" boolean DEFAULT true NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- CONSTRAINT "agenda_regras_semanais_check" CHECK (("hora_fim" > "hora_inicio")),
- CONSTRAINT "agenda_regras_semanais_dia_semana_check" CHECK ((("dia_semana" >= 0) AND ("dia_semana" <= 6))),
- CONSTRAINT "agenda_regras_semanais_modalidade_check" CHECK ((("modalidade" = ANY (ARRAY['online'::"text", 'presencial'::"text", 'ambos'::"text"])) OR ("modalidade" IS NULL)))
-);
-
-
-ALTER TABLE "public"."agenda_regras_semanais" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."agenda_slots_bloqueados_semanais" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "dia_semana" smallint NOT NULL,
- "hora_inicio" time without time zone NOT NULL,
- "motivo" "text",
- "ativo" boolean DEFAULT true NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- CONSTRAINT "agenda_slots_bloqueados_semanais_dia_semana_check" CHECK ((("dia_semana" >= 0) AND ("dia_semana" <= 6)))
-);
-
-
-ALTER TABLE "public"."agenda_slots_bloqueados_semanais" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."agenda_slots_regras" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "dia_semana" smallint NOT NULL,
- "passo_minutos" integer NOT NULL,
- "offset_minutos" integer DEFAULT 0 NOT NULL,
- "buffer_antes_min" integer DEFAULT 0 NOT NULL,
- "buffer_depois_min" integer DEFAULT 0 NOT NULL,
- "min_antecedencia_horas" integer DEFAULT 0 NOT NULL,
- "ativo" boolean DEFAULT true NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- CONSTRAINT "agenda_slots_regras_buffer_antes_min_check" CHECK ((("buffer_antes_min" >= 0) AND ("buffer_antes_min" <= 240))),
- CONSTRAINT "agenda_slots_regras_buffer_depois_min_check" CHECK ((("buffer_depois_min" >= 0) AND ("buffer_depois_min" <= 240))),
- CONSTRAINT "agenda_slots_regras_dia_semana_check" CHECK ((("dia_semana" >= 0) AND ("dia_semana" <= 6))),
- CONSTRAINT "agenda_slots_regras_min_antecedencia_horas_check" CHECK ((("min_antecedencia_horas" >= 0) AND ("min_antecedencia_horas" <= 720))),
- CONSTRAINT "agenda_slots_regras_offset_minutos_check" CHECK ((("offset_minutos" >= 0) AND ("offset_minutos" <= 55))),
- CONSTRAINT "agenda_slots_regras_passo_minutos_check" CHECK ((("passo_minutos" >= 5) AND ("passo_minutos" <= 240)))
-);
-
-
-ALTER TABLE "public"."agenda_slots_regras" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."agendador_configuracoes" (
- "owner_id" "uuid" NOT NULL,
- "tenant_id" "uuid",
- "ativo" boolean DEFAULT false NOT NULL,
- "link_slug" "text",
- "imagem_fundo_url" "text",
- "imagem_header_url" "text",
- "logomarca_url" "text",
- "cor_primaria" "text" DEFAULT '#4b6bff'::"text",
- "nome_exibicao" "text",
- "endereco" "text",
- "botao_como_chegar_ativo" boolean DEFAULT true NOT NULL,
- "maps_url" "text",
- "modo_aprovacao" "text" DEFAULT 'aprovacao'::"text" NOT NULL,
- "modalidade" "text" DEFAULT 'presencial'::"text" NOT NULL,
- "tipos_habilitados" "jsonb" DEFAULT '["primeira", "retorno"]'::"jsonb" NOT NULL,
- "duracao_sessao_min" integer DEFAULT 50 NOT NULL,
- "antecedencia_minima_horas" integer DEFAULT 24 NOT NULL,
- "prazo_resposta_horas" integer DEFAULT 2 NOT NULL,
- "reserva_horas" integer DEFAULT 2 NOT NULL,
- "pagamento_obrigatorio" boolean DEFAULT false NOT NULL,
- "pix_chave" "text",
- "pix_countdown_minutos" integer DEFAULT 20 NOT NULL,
- "triagem_motivo" boolean DEFAULT true NOT NULL,
- "triagem_como_conheceu" boolean DEFAULT false NOT NULL,
- "verificacao_email" boolean DEFAULT false NOT NULL,
- "exigir_aceite_lgpd" boolean DEFAULT true NOT NULL,
- "mensagem_boas_vindas" "text",
- "texto_como_se_preparar" "text",
- "texto_termos_lgpd" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- CONSTRAINT "agendador_configuracoes_antecedencia_check" CHECK ((("antecedencia_minima_horas" >= 0) AND ("antecedencia_minima_horas" <= 720))),
- CONSTRAINT "agendador_configuracoes_duracao_check" CHECK ((("duracao_sessao_min" >= 10) AND ("duracao_sessao_min" <= 240))),
- CONSTRAINT "agendador_configuracoes_modalidade_check" CHECK (("modalidade" = ANY (ARRAY['presencial'::"text", 'online'::"text", 'ambos'::"text"]))),
- CONSTRAINT "agendador_configuracoes_modo_check" CHECK (("modo_aprovacao" = ANY (ARRAY['automatico'::"text", 'aprovacao'::"text"]))),
- CONSTRAINT "agendador_configuracoes_pix_countdown_check" CHECK ((("pix_countdown_minutos" >= 5) AND ("pix_countdown_minutos" <= 120))),
- CONSTRAINT "agendador_configuracoes_prazo_check" CHECK ((("prazo_resposta_horas" >= 1) AND ("prazo_resposta_horas" <= 72))),
- CONSTRAINT "agendador_configuracoes_reserva_check" CHECK ((("reserva_horas" >= 1) AND ("reserva_horas" <= 48)))
-);
-
-
-ALTER TABLE "public"."agendador_configuracoes" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."agendador_solicitacoes" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "tenant_id" "uuid",
- "paciente_nome" "text" NOT NULL,
- "paciente_sobrenome" "text",
- "paciente_email" "text" NOT NULL,
- "paciente_celular" "text",
- "paciente_cpf" "text",
- "tipo" "text" NOT NULL,
- "modalidade" "text" NOT NULL,
- "data_solicitada" "date" NOT NULL,
- "hora_solicitada" time without time zone NOT NULL,
- "reservado_ate" timestamp with time zone,
- "motivo" "text",
- "como_conheceu" "text",
- "pix_status" "text" DEFAULT 'pendente'::"text",
- "pix_pago_em" timestamp with time zone,
- "status" "text" DEFAULT 'pendente'::"text" NOT NULL,
- "recusado_motivo" "text",
- "autorizado_em" timestamp with time zone,
- "autorizado_por" "uuid",
- "user_id" "uuid",
- "patient_id" "uuid",
- "evento_id" "uuid",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- CONSTRAINT "agendador_sol_modalidade_check" CHECK (("modalidade" = ANY (ARRAY['presencial'::"text", 'online'::"text"]))),
- CONSTRAINT "agendador_sol_pix_check" CHECK ((("pix_status" IS NULL) OR ("pix_status" = ANY (ARRAY['pendente'::"text", 'pago'::"text", 'expirado'::"text"])))),
- CONSTRAINT "agendador_sol_status_check" CHECK (("status" = ANY (ARRAY['pendente'::"text", 'autorizado'::"text", 'recusado'::"text", 'expirado'::"text", 'convertido'::"text"]))),
- CONSTRAINT "agendador_sol_tipo_check" CHECK (("tipo" = ANY (ARRAY['primeira'::"text", 'retorno'::"text", 'reagendar'::"text"])))
-);
-
-
-ALTER TABLE "public"."agendador_solicitacoes" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."commitment_time_logs" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- "commitment_id" "uuid" NOT NULL,
- "calendar_event_id" "uuid",
- "source" "public"."commitment_log_source" DEFAULT 'manual'::"public"."commitment_log_source" NOT NULL,
- "started_at" timestamp with time zone NOT NULL,
- "ended_at" timestamp with time zone NOT NULL,
- "minutes" integer NOT NULL,
- "created_by" "uuid",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."commitment_time_logs" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."current_tenant_id" AS
- SELECT "current_setting"('request.jwt.claim.tenant_id'::"text", true) AS "current_setting";
-
-
-ALTER VIEW "public"."current_tenant_id" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."determined_commitment_fields" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- "commitment_id" "uuid" NOT NULL,
- "key" "text" NOT NULL,
- "label" "text" NOT NULL,
- "field_type" "public"."determined_field_type" DEFAULT 'text'::"public"."determined_field_type" NOT NULL,
- "required" boolean DEFAULT false NOT NULL,
- "sort_order" integer DEFAULT 0 NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."determined_commitment_fields" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."determined_commitments" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- "created_by" "uuid",
- "is_native" boolean DEFAULT false NOT NULL,
- "native_key" "text",
- "is_locked" boolean DEFAULT false NOT NULL,
- "active" boolean DEFAULT true NOT NULL,
- "name" "text" NOT NULL,
- "description" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "bg_color" "text",
- "text_color" "text"
-);
-
-
-ALTER TABLE "public"."determined_commitments" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."dev_user_credentials" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "user_id" "uuid",
- "email" "text" NOT NULL,
- "password_dev" "text" NOT NULL,
- "kind" "text" DEFAULT 'custom'::"text" NOT NULL,
- "note" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."dev_user_credentials" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."entitlements_invalidation" (
- "owner_id" "uuid" NOT NULL,
- "changed_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."entitlements_invalidation" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."features" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "key" "text" NOT NULL,
- "description" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "descricao" "text" DEFAULT ''::"text" NOT NULL,
- "name" "text" DEFAULT ''::"text" NOT NULL
-);
-
-
-ALTER TABLE "public"."features" OWNER TO "supabase_admin";
-
-
-COMMENT ON COLUMN "public"."features"."descricao" IS 'Descrição humana da feature (exibição no admin e documentação).';
-
-
-
-CREATE TABLE IF NOT EXISTS "public"."feriados" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "tenant_id" "uuid",
- "owner_id" "uuid",
- "tipo" "text" DEFAULT 'municipal'::"text" NOT NULL,
- "nome" "text" NOT NULL,
- "data" "date" NOT NULL,
- "cidade" "text",
- "estado" "text",
- "observacao" "text",
- "bloqueia_sessoes" boolean DEFAULT false NOT NULL,
- "criado_em" timestamp with time zone DEFAULT "now"() NOT NULL,
- CONSTRAINT "feriados_tipo_check" CHECK (("tipo" = ANY (ARRAY['municipal'::"text", 'personalizado'::"text"])))
-);
-
-
-ALTER TABLE "public"."feriados" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."module_features" (
- "module_id" "uuid" NOT NULL,
- "feature_id" "uuid" NOT NULL,
- "enabled" boolean DEFAULT true NOT NULL,
- "limits" "jsonb",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."module_features" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."modules" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "key" "text" NOT NULL,
- "name" "text" NOT NULL,
- "description" "text",
- "is_active" boolean DEFAULT true NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."modules" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."plan_features" (
- "plan_id" "uuid" NOT NULL,
- "feature_id" "uuid" NOT NULL,
- "enabled" boolean DEFAULT true NOT NULL,
- "limits" "jsonb",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."plan_features" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."tenant_modules" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "module_id" "uuid" NOT NULL,
- "status" "text" DEFAULT 'active'::"text" NOT NULL,
- "settings" "jsonb",
- "provider" "text" DEFAULT 'manual'::"text" NOT NULL,
- "provider_item_id" "text",
- "installed_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."tenant_modules" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."owner_feature_entitlements" AS
- WITH "base" AS (
- SELECT "s"."user_id" AS "owner_id",
- "f"."key" AS "feature_key",
- "pf"."limits",
- 'plan'::"text" AS "source"
- FROM (("public"."subscriptions" "s"
- JOIN "public"."plan_features" "pf" ON ((("pf"."plan_id" = "s"."plan_id") AND ("pf"."enabled" = true))))
- JOIN "public"."features" "f" ON (("f"."id" = "pf"."feature_id")))
- WHERE (("s"."status" = 'active'::"text") AND ("s"."user_id" IS NOT NULL))
- UNION ALL
- SELECT "tm"."owner_id",
- "f"."key" AS "feature_key",
- "mf"."limits",
- 'module'::"text" AS "source"
- FROM ((("public"."tenant_modules" "tm"
- JOIN "public"."modules" "m" ON ((("m"."id" = "tm"."module_id") AND ("m"."is_active" = true))))
- JOIN "public"."module_features" "mf" ON ((("mf"."module_id" = "m"."id") AND ("mf"."enabled" = true))))
- JOIN "public"."features" "f" ON (("f"."id" = "mf"."feature_id")))
- WHERE (("tm"."status" = 'active'::"text") AND ("tm"."owner_id" IS NOT NULL))
- )
- SELECT "owner_id",
- "feature_key",
- "array_agg"(DISTINCT "source") AS "sources",
- "jsonb_agg"("limits") FILTER (WHERE ("limits" IS NOT NULL)) AS "limits_list"
- FROM "base"
- GROUP BY "owner_id", "feature_key";
-
-
-ALTER VIEW "public"."owner_feature_entitlements" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."owner_users" (
- "owner_id" "uuid" NOT NULL,
- "user_id" "uuid" NOT NULL,
- "role" "text" DEFAULT 'admin'::"text" NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."owner_users" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."patient_group_patient" (
- "patient_group_id" "uuid" NOT NULL,
- "patient_id" "uuid" NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"(),
- "tenant_id" "uuid" NOT NULL
-);
-
-
-ALTER TABLE "public"."patient_group_patient" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."patient_groups" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "nome" "text" NOT NULL,
- "descricao" "text",
- "cor" "text",
- "is_active" boolean DEFAULT true NOT NULL,
- "is_system" boolean DEFAULT false NOT NULL,
- "owner_id" "uuid" DEFAULT "auth"."uid"() NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "therapist_id" "uuid",
- "tenant_id" "uuid" NOT NULL
-);
-
-
-ALTER TABLE "public"."patient_groups" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."patient_intake_requests" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "token" "text" NOT NULL,
- "consent" boolean DEFAULT false NOT NULL,
- "status" "text" DEFAULT 'new'::"text" NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "converted_patient_id" "uuid",
- "rejected_reason" "text",
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "cpf" "text",
- "rg" "text",
- "cep" "text",
- "nome_completo" "text",
- "email_principal" "text",
- "telefone" "text",
- "pais" "text",
- "cidade" "text",
- "estado" "text",
- "endereco" "text",
- "numero" "text",
- "bairro" "text",
- "complemento" "text",
- "data_nascimento" "date",
- "naturalidade" "text",
- "genero" "text",
- "estado_civil" "text",
- "onde_nos_conheceu" "text",
- "encaminhado_por" "text",
- "observacoes" "text",
- "notas_internas" "text",
- "email_alternativo" "text",
- "telefone_alternativo" "text",
- "profissao" "text",
- "escolaridade" "text",
- "nacionalidade" "text",
- "avatar_url" "text",
- "tenant_id" "uuid",
- CONSTRAINT "chk_intakes_status" CHECK (("status" = ANY (ARRAY['new'::"text", 'converted'::"text", 'rejected'::"text"])))
-);
-
-
-ALTER TABLE "public"."patient_intake_requests" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."patient_invites" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "token" "text" NOT NULL,
- "active" boolean DEFAULT true NOT NULL,
- "expires_at" timestamp with time zone,
- "max_uses" integer,
- "uses" integer DEFAULT 0 NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "tenant_id" "uuid"
-);
-
-
-ALTER TABLE "public"."patient_invites" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."patient_patient_tag" (
- "owner_id" "uuid" NOT NULL,
- "patient_id" "uuid" NOT NULL,
- "tag_id" "uuid" NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "tenant_id" "uuid" NOT NULL
-);
-
-
-ALTER TABLE "public"."patient_patient_tag" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."patient_tags" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "nome" "text" NOT NULL,
- "cor" "text",
- "is_padrao" boolean DEFAULT false NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone,
- "tenant_id" "uuid" NOT NULL
-);
-
-
-ALTER TABLE "public"."patient_tags" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."patients" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "nome_completo" "text" NOT NULL,
- "email_principal" "text",
- "telefone" "text",
- "created_at" timestamp with time zone DEFAULT "now"(),
- "owner_id" "uuid",
- "avatar_url" "text",
- "status" "text" DEFAULT 'Ativo'::"text",
- "last_attended_at" timestamp with time zone,
- "is_native" boolean DEFAULT false,
- "naturalidade" "text",
- "data_nascimento" "date",
- "rg" "text",
- "cpf" "text",
- "identification_color" "text",
- "genero" "text",
- "estado_civil" "text",
- "email_alternativo" "text",
- "pais" "text" DEFAULT 'Brasil'::"text",
- "cep" "text",
- "cidade" "text",
- "estado" "text",
- "endereco" "text",
- "numero" "text",
- "bairro" "text",
- "complemento" "text",
- "escolaridade" "text",
- "profissao" "text",
- "nome_parente" "text",
- "grau_parentesco" "text",
- "telefone_alternativo" "text",
- "onde_nos_conheceu" "text",
- "encaminhado_por" "text",
- "nome_responsavel" "text",
- "telefone_responsavel" "text",
- "cpf_responsavel" "text",
- "observacao_responsavel" "text",
- "cobranca_no_responsavel" boolean DEFAULT false,
- "observacoes" "text",
- "notas_internas" "text",
- "updated_at" timestamp with time zone DEFAULT "now"(),
- "telefone_parente" "text",
- "tenant_id" "uuid" NOT NULL,
- "responsible_member_id" "uuid" NOT NULL,
- "user_id" "uuid",
- "patient_scope" "text" DEFAULT 'clinic'::"text" NOT NULL,
- "therapist_member_id" "uuid",
- CONSTRAINT "cpf_responsavel_format_check" CHECK ((("cpf_responsavel" IS NULL) OR ("cpf_responsavel" ~ '^\d{11}$'::"text"))),
- CONSTRAINT "patients_cpf_format_check" CHECK ((("cpf" IS NULL) OR ("cpf" ~ '^\d{11}$'::"text"))),
- CONSTRAINT "patients_patient_scope_check" CHECK (("patient_scope" = ANY (ARRAY['clinic'::"text", 'therapist'::"text"]))),
- CONSTRAINT "patients_status_check" CHECK (("status" = ANY (ARRAY['Ativo'::"text", 'Inativo'::"text", 'Alta'::"text", 'Encaminhado'::"text"]))),
- CONSTRAINT "patients_therapist_scope_consistency" CHECK (((("patient_scope" = 'clinic'::"text") AND ("therapist_member_id" IS NULL)) OR (("patient_scope" = 'therapist'::"text") AND ("therapist_member_id" IS NOT NULL))))
-);
-
-
-ALTER TABLE "public"."patients" OWNER TO "supabase_admin";
-
-
-COMMENT ON COLUMN "public"."patients"."avatar_url" IS 'URL pública da imagem de avatar armazenada no Supabase Storage';
-
-
-
-CREATE TABLE IF NOT EXISTS "public"."plan_prices" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "plan_id" "uuid" NOT NULL,
- "currency" "text" DEFAULT 'BRL'::"text" NOT NULL,
- "interval" "text" NOT NULL,
- "amount_cents" integer NOT NULL,
- "is_active" boolean DEFAULT true NOT NULL,
- "active_from" timestamp with time zone DEFAULT "now"() NOT NULL,
- "active_to" timestamp with time zone,
- "source" "text" DEFAULT 'manual'::"text" NOT NULL,
- "provider" "text",
- "provider_price_id" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- CONSTRAINT "plan_prices_amount_cents_check" CHECK (("amount_cents" >= 0)),
- CONSTRAINT "plan_prices_interval_check" CHECK (("interval" = ANY (ARRAY['month'::"text", 'year'::"text"])))
-);
-
-
-ALTER TABLE "public"."plan_prices" OWNER TO "supabase_admin";
-
-
-COMMENT ON TABLE "public"."plan_prices" IS 'Histórico de preços por plano (fonte: manual/gateway).';
-
-
-
-CREATE TABLE IF NOT EXISTS "public"."plan_public" (
- "plan_id" "uuid" NOT NULL,
- "public_name" "text" DEFAULT ''::"text" NOT NULL,
- "public_description" "text" DEFAULT ''::"text" NOT NULL,
- "badge" "text",
- "is_featured" boolean DEFAULT false NOT NULL,
- "is_visible" boolean DEFAULT true NOT NULL,
- "sort_order" integer DEFAULT 0 NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."plan_public" OWNER TO "supabase_admin";
-
-
-COMMENT ON TABLE "public"."plan_public" IS 'Configuração de vitrine (página pública) dos planos.';
-
-
-
-CREATE TABLE IF NOT EXISTS "public"."plan_public_bullets" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "plan_id" "uuid" NOT NULL,
- "text" "text" NOT NULL,
- "sort_order" integer DEFAULT 0 NOT NULL,
- "highlight" boolean DEFAULT false NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."plan_public_bullets" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."plans" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "key" "text" NOT NULL,
- "name" "text" NOT NULL,
- "description" "text",
- "is_active" boolean DEFAULT true NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "price_cents" integer DEFAULT 0 NOT NULL,
- "currency" "text" DEFAULT 'BRL'::"text" NOT NULL,
- "billing_interval" "text" DEFAULT 'month'::"text" NOT NULL,
- "target" "text",
- "max_supervisees" integer,
- CONSTRAINT "plans_target_check" CHECK (("target" = ANY (ARRAY['patient'::"text", 'therapist'::"text", 'clinic'::"text", 'supervisor'::"text"])))
-);
-
-
-ALTER TABLE "public"."plans" OWNER TO "supabase_admin";
-
-
-COMMENT ON COLUMN "public"."plans"."name" IS 'Nome interno do plano (admin). A key é técnica/imutável.';
-
-
-
-COMMENT ON COLUMN "public"."plans"."target" IS 'Público-alvo do plano: patient, therapist ou clinic.';
-
-
-
-COMMENT ON COLUMN "public"."plans"."max_supervisees" IS 'Limite de terapeutas que podem ser supervisionados. Apenas para planos target=supervisor. NULL = sem limite.';
-
-
-
-CREATE TABLE IF NOT EXISTS "public"."profiles" (
- "id" "uuid" NOT NULL,
- "role" "text" DEFAULT 'tenant_member'::"text" NOT NULL,
- "full_name" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "avatar_url" "text",
- "phone" "text",
- "bio" "text",
- "language" "text" DEFAULT 'pt-BR'::"text" NOT NULL,
- "timezone" "text" DEFAULT 'America/Sao_Paulo'::"text" NOT NULL,
- "notify_system_email" boolean DEFAULT true NOT NULL,
- "notify_reminders" boolean DEFAULT true NOT NULL,
- "notify_news" boolean DEFAULT false NOT NULL,
- "account_type" "text" DEFAULT 'free'::"text" NOT NULL,
- "platform_roles" "text"[] DEFAULT '{}'::"text"[] NOT NULL,
- CONSTRAINT "profiles_account_type_check" CHECK (("account_type" = ANY (ARRAY['free'::"text", 'patient'::"text", 'therapist'::"text", 'clinic'::"text"]))),
- CONSTRAINT "profiles_role_check" CHECK (("role" = ANY (ARRAY['saas_admin'::"text", 'tenant_member'::"text", 'portal_user'::"text", 'patient'::"text"])))
-);
-
-
-ALTER TABLE "public"."profiles" OWNER TO "supabase_admin";
-
-
-COMMENT ON COLUMN "public"."profiles"."account_type" IS 'Tipo de conta: free=sem perfil ainda, patient=paciente (imutável), therapist=terapeuta (imutável), clinic=clínica (imutável).';
-
-
-
-COMMENT ON COLUMN "public"."profiles"."platform_roles" IS 'Papéis globais de plataforma, independentes de tenant. Ex: editor de microlearning. Atribuído pelo saas_admin.';
-
-
-
-CREATE TABLE IF NOT EXISTS "public"."recurrence_exceptions" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "recurrence_id" "uuid" NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- "original_date" "date" NOT NULL,
- "type" "public"."recurrence_exception_type" NOT NULL,
- "new_date" "date",
- "new_start_time" time without time zone,
- "new_end_time" time without time zone,
- "modalidade" "text",
- "observacoes" "text",
- "titulo_custom" "text",
- "extra_fields" "jsonb",
- "reason" "text",
- "agenda_evento_id" "uuid",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."recurrence_exceptions" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."recurrence_rules" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "therapist_id" "uuid",
- "patient_id" "uuid",
- "determined_commitment_id" "uuid",
- "type" "public"."recurrence_type" DEFAULT 'weekly'::"public"."recurrence_type" NOT NULL,
- "interval" smallint DEFAULT 1 NOT NULL,
- "weekdays" smallint[] DEFAULT '{}'::smallint[] NOT NULL,
- "start_time" time without time zone NOT NULL,
- "end_time" time without time zone NOT NULL,
- "timezone" "text" DEFAULT 'America/Sao_Paulo'::"text" NOT NULL,
- "duration_min" smallint DEFAULT 50 NOT NULL,
- "start_date" "date" NOT NULL,
- "end_date" "date",
- "max_occurrences" integer,
- "open_ended" boolean DEFAULT true NOT NULL,
- "modalidade" "text" DEFAULT 'presencial'::"text",
- "titulo_custom" "text",
- "observacoes" "text",
- "extra_fields" "jsonb",
- "status" "text" DEFAULT 'ativo'::"text" NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- CONSTRAINT "recurrence_rules_dates_chk" CHECK ((("end_date" IS NULL) OR ("end_date" >= "start_date"))),
- CONSTRAINT "recurrence_rules_interval_chk" CHECK (("interval" >= 1)),
- CONSTRAINT "recurrence_rules_status_check" CHECK (("status" = ANY (ARRAY['ativo'::"text", 'pausado'::"text", 'cancelado'::"text"]))),
- CONSTRAINT "recurrence_rules_times_chk" CHECK (("end_time" > "start_time"))
-);
-
-
-ALTER TABLE "public"."recurrence_rules" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."saas_admins" (
- "user_id" "uuid" NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."saas_admins" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."saas_doc_votos" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "doc_id" "uuid" NOT NULL,
- "user_id" "uuid" NOT NULL,
- "util" boolean NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."saas_doc_votos" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."saas_docs" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "titulo" "text" NOT NULL,
- "conteudo" "text" DEFAULT ''::"text" NOT NULL,
- "medias" "jsonb" DEFAULT '[]'::"jsonb" NOT NULL,
- "tipo_acesso" "text" DEFAULT 'usuario'::"text" NOT NULL,
- "pagina_path" "text" NOT NULL,
- "docs_relacionados" "uuid"[] DEFAULT '{}'::"uuid"[] NOT NULL,
- "ativo" boolean DEFAULT true NOT NULL,
- "ordem" integer DEFAULT 0 NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "categoria" "text",
- "exibir_no_faq" boolean DEFAULT false NOT NULL,
- "votos_util" integer DEFAULT 0 NOT NULL,
- "votos_nao_util" integer DEFAULT 0 NOT NULL,
- CONSTRAINT "saas_docs_tipo_acesso_check" CHECK (("tipo_acesso" = ANY (ARRAY['admin'::"text", 'usuario'::"text"])))
-);
-
-
-ALTER TABLE "public"."saas_docs" OWNER TO "supabase_admin";
-
-
-COMMENT ON COLUMN "public"."saas_docs"."categoria" IS 'Agrupa docs no portal FAQ (ex: Conta, Agenda, Pagamentos)';
-
-
-
-COMMENT ON COLUMN "public"."saas_docs"."exibir_no_faq" IS 'Se true, a doc e seus itens FAQ aparecem no portal de FAQ';
-
-
-
-CREATE TABLE IF NOT EXISTS "public"."saas_faq" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "pergunta" "text" NOT NULL,
- "categoria" "text",
- "publico" boolean DEFAULT false NOT NULL,
- "votos" integer DEFAULT 0 NOT NULL,
- "titulo" "text",
- "conteudo" "text",
- "tipo_acesso" "text" DEFAULT 'usuario'::"text" NOT NULL,
- "pagina_path" "text" NOT NULL,
- "pagina_label" "text",
- "medias" "jsonb" DEFAULT '[]'::"jsonb" NOT NULL,
- "faqs_relacionados" "uuid"[] DEFAULT '{}'::"uuid"[] NOT NULL,
- "ativo" boolean DEFAULT true NOT NULL,
- "ordem" integer DEFAULT 0 NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."saas_faq" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."saas_faq_itens" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "doc_id" "uuid" NOT NULL,
- "pergunta" "text" NOT NULL,
- "resposta" "text",
- "ordem" integer DEFAULT 0 NOT NULL,
- "ativo" boolean DEFAULT true NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."saas_faq_itens" OWNER TO "supabase_admin";
-
-
-COMMENT ON TABLE "public"."saas_faq_itens" IS 'Pares pergunta/resposta vinculados a um documento de ajuda';
-
-
-
-CREATE TABLE IF NOT EXISTS "public"."subscription_events" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "subscription_id" "uuid" NOT NULL,
- "owner_id" "uuid" NOT NULL,
- "event_type" "text" NOT NULL,
- "old_plan_id" "uuid",
- "new_plan_id" "uuid",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "created_by" "uuid",
- "source" "text" DEFAULT 'admin_ui'::"text",
- "reason" "text",
- "metadata" "jsonb",
- "owner_type" "text" NOT NULL,
- "owner_ref" "uuid" NOT NULL,
- CONSTRAINT "subscription_events_owner_ref_consistency_chk" CHECK (("owner_id" = "owner_ref")),
- CONSTRAINT "subscription_events_owner_type_chk" CHECK ((("owner_type" IS NULL) OR ("owner_type" = ANY (ARRAY['clinic'::"text", 'therapist'::"text"]))))
-);
-
-
-ALTER TABLE "public"."subscription_events" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."subscription_intents_personal" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "user_id" "uuid" NOT NULL,
- "created_by_user_id" "uuid",
- "email" "text" NOT NULL,
- "plan_id" "uuid" NOT NULL,
- "plan_key" "text",
- "interval" "text",
- "amount_cents" integer,
- "currency" "text",
- "status" "text" DEFAULT 'new'::"text" NOT NULL,
- "source" "text" DEFAULT 'manual'::"text" NOT NULL,
- "notes" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "paid_at" timestamp with time zone,
- "subscription_id" "uuid",
- CONSTRAINT "sint_personal_interval_check" CHECK ((("interval" IS NULL) OR ("interval" = ANY (ARRAY['month'::"text", 'year'::"text"])))),
- CONSTRAINT "sint_personal_status_check" CHECK (("status" = ANY (ARRAY['new'::"text", 'waiting_payment'::"text", 'paid'::"text", 'canceled'::"text"])))
-);
-
-
-ALTER TABLE "public"."subscription_intents_personal" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."subscription_intents_tenant" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "user_id" "uuid" NOT NULL,
- "created_by_user_id" "uuid",
- "email" "text" NOT NULL,
- "plan_id" "uuid" NOT NULL,
- "plan_key" "text",
- "interval" "text",
- "amount_cents" integer,
- "currency" "text",
- "status" "text" DEFAULT 'new'::"text" NOT NULL,
- "source" "text" DEFAULT 'manual'::"text" NOT NULL,
- "notes" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "paid_at" timestamp with time zone,
- "tenant_id" "uuid" NOT NULL,
- "subscription_id" "uuid",
- CONSTRAINT "sint_tenant_interval_check" CHECK ((("interval" IS NULL) OR ("interval" = ANY (ARRAY['month'::"text", 'year'::"text"])))),
- CONSTRAINT "sint_tenant_status_check" CHECK (("status" = ANY (ARRAY['new'::"text", 'waiting_payment'::"text", 'paid'::"text", 'canceled'::"text"])))
-);
-
-
-ALTER TABLE "public"."subscription_intents_tenant" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."subscription_intents" AS
- SELECT "t"."id",
- "t"."user_id",
- "t"."created_by_user_id",
- "t"."email",
- "t"."plan_id",
- "t"."plan_key",
- "t"."interval",
- "t"."amount_cents",
- "t"."currency",
- "t"."status",
- "t"."source",
- "t"."notes",
- "t"."created_at",
- "t"."paid_at",
- "t"."tenant_id",
- "t"."subscription_id",
- 'clinic'::"text" AS "plan_target"
- FROM "public"."subscription_intents_tenant" "t"
-UNION ALL
- SELECT "p"."id",
- "p"."user_id",
- "p"."created_by_user_id",
- "p"."email",
- "p"."plan_id",
- "p"."plan_key",
- "p"."interval",
- "p"."amount_cents",
- "p"."currency",
- "p"."status",
- "p"."source",
- "p"."notes",
- "p"."created_at",
- "p"."paid_at",
- NULL::"uuid" AS "tenant_id",
- "p"."subscription_id",
- 'therapist'::"text" AS "plan_target"
- FROM "public"."subscription_intents_personal" "p";
-
-
-ALTER VIEW "public"."subscription_intents" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."subscription_intents_legacy" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "user_id" "uuid",
- "email" "text",
- "plan_key" "text" NOT NULL,
- "interval" "text" NOT NULL,
- "amount_cents" integer NOT NULL,
- "currency" "text" DEFAULT 'BRL'::"text" NOT NULL,
- "status" "text" DEFAULT 'new'::"text" NOT NULL,
- "source" "text" DEFAULT 'landing'::"text" NOT NULL,
- "notes" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "paid_at" timestamp with time zone,
- "tenant_id" "uuid" NOT NULL,
- "created_by_user_id" "uuid",
- CONSTRAINT "subscription_intents_interval_check" CHECK (("interval" = ANY (ARRAY['month'::"text", 'year'::"text"]))),
- CONSTRAINT "subscription_intents_status_check" CHECK (("status" = ANY (ARRAY['new'::"text", 'waiting_payment'::"text", 'paid'::"text", 'canceled'::"text"])))
-);
-
-
-ALTER TABLE "public"."subscription_intents_legacy" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."tenant_feature_exceptions_log" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- "feature_key" "text" NOT NULL,
- "enabled" boolean NOT NULL,
- "reason" "text",
- "created_by" "uuid",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."tenant_feature_exceptions_log" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."tenant_features" (
- "tenant_id" "uuid" NOT NULL,
- "feature_key" "text" NOT NULL,
- "enabled" boolean DEFAULT false NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."tenant_features" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."tenant_invites" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "tenant_id" "uuid" NOT NULL,
- "email" "text" NOT NULL,
- "role" "text" NOT NULL,
- "token" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "invited_by" "uuid",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "expires_at" timestamp with time zone DEFAULT ("now"() + '7 days'::interval) NOT NULL,
- "accepted_at" timestamp with time zone,
- "accepted_by" "uuid",
- "revoked_at" timestamp with time zone,
- "revoked_by" "uuid",
- CONSTRAINT "tenant_invites_role_check" CHECK (("role" = ANY (ARRAY['therapist'::"text", 'secretary'::"text"])))
-);
-
-
-ALTER TABLE "public"."tenant_invites" OWNER TO "supabase_admin";
-
-
-CREATE TABLE IF NOT EXISTS "public"."tenants" (
- "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL,
- "name" "text",
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "kind" "text" DEFAULT 'saas'::"text" NOT NULL,
- CONSTRAINT "tenants_kind_check" CHECK (("kind" = ANY (ARRAY['therapist'::"text", 'clinic_coworking'::"text", 'clinic_reception'::"text", 'clinic_full'::"text", 'clinic'::"text", 'saas'::"text", 'supervisor'::"text"])))
-);
-
-
-ALTER TABLE "public"."tenants" OWNER TO "supabase_admin";
-
-
-COMMENT ON COLUMN "public"."tenants"."kind" IS 'Tipo do tenant. Imutável após criação. therapist=terapeuta solo. clinic_coworking/clinic_reception/clinic_full=clínicas. clinic e saas são legados.';
-
-
-
-CREATE TABLE IF NOT EXISTS "public"."user_settings" (
- "user_id" "uuid" NOT NULL,
- "theme_mode" "text" DEFAULT 'dark'::"text" NOT NULL,
- "preset" "text" DEFAULT 'Aura'::"text" NOT NULL,
- "primary_color" "text" DEFAULT 'noir'::"text" NOT NULL,
- "surface_color" "text" DEFAULT 'slate'::"text" NOT NULL,
- "menu_mode" "text" DEFAULT 'static'::"text" NOT NULL,
- "created_at" timestamp with time zone DEFAULT "now"() NOT NULL,
- "updated_at" timestamp with time zone DEFAULT "now"() NOT NULL
-);
-
-
-ALTER TABLE "public"."user_settings" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_auth_users_public" AS
- SELECT "id" AS "user_id",
- "email",
- "created_at",
- "last_sign_in_at"
- FROM "auth"."users" "u";
-
-
-ALTER VIEW "public"."v_auth_users_public" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_commitment_totals" AS
- SELECT "c"."tenant_id",
- "c"."id" AS "commitment_id",
- (COALESCE("sum"("l"."minutes"), (0)::bigint))::integer AS "total_minutes"
- FROM ("public"."determined_commitments" "c"
- LEFT JOIN "public"."commitment_time_logs" "l" ON (("l"."commitment_id" = "c"."id")))
- GROUP BY "c"."tenant_id", "c"."id";
-
-
-ALTER VIEW "public"."v_commitment_totals" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_patient_groups_with_counts" AS
- SELECT "pg"."id",
- "pg"."nome",
- "pg"."cor",
- "pg"."owner_id",
- "pg"."is_system",
- "pg"."is_active",
- "pg"."created_at",
- "pg"."updated_at",
- (COALESCE("count"("pgp"."patient_id"), (0)::bigint))::integer AS "patients_count"
- FROM ("public"."patient_groups" "pg"
- LEFT JOIN "public"."patient_group_patient" "pgp" ON (("pgp"."patient_group_id" = "pg"."id")))
- GROUP BY "pg"."id", "pg"."nome", "pg"."cor", "pg"."owner_id", "pg"."is_system", "pg"."is_active", "pg"."created_at", "pg"."updated_at";
-
-
-ALTER VIEW "public"."v_patient_groups_with_counts" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_plan_active_prices" AS
- SELECT "plan_id",
- "max"(
- CASE
- WHEN (("interval" = 'month'::"text") AND "is_active") THEN "amount_cents"
- ELSE NULL::integer
- END) AS "monthly_cents",
- "max"(
- CASE
- WHEN (("interval" = 'year'::"text") AND "is_active") THEN "amount_cents"
- ELSE NULL::integer
- END) AS "yearly_cents",
- "max"(
- CASE
- WHEN (("interval" = 'month'::"text") AND "is_active") THEN "currency"
- ELSE NULL::"text"
- END) AS "monthly_currency",
- "max"(
- CASE
- WHEN (("interval" = 'year'::"text") AND "is_active") THEN "currency"
- ELSE NULL::"text"
- END) AS "yearly_currency"
- FROM "public"."plan_prices"
- GROUP BY "plan_id";
-
-
-ALTER VIEW "public"."v_plan_active_prices" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_public_pricing" AS
- SELECT "p"."id" AS "plan_id",
- "p"."key" AS "plan_key",
- "p"."name" AS "plan_name",
- COALESCE("pp"."public_name", ''::"text") AS "public_name",
- COALESCE("pp"."public_description", ''::"text") AS "public_description",
- "pp"."badge",
- COALESCE("pp"."is_featured", false) AS "is_featured",
- COALESCE("pp"."is_visible", true) AS "is_visible",
- COALESCE("pp"."sort_order", 0) AS "sort_order",
- "ap"."monthly_cents",
- "ap"."yearly_cents",
- "ap"."monthly_currency",
- "ap"."yearly_currency",
- COALESCE(( SELECT "jsonb_agg"("jsonb_build_object"('id', "b"."id", 'text', "b"."text", 'highlight', "b"."highlight", 'sort_order', "b"."sort_order") ORDER BY "b"."sort_order", "b"."created_at") AS "jsonb_agg"
- FROM "public"."plan_public_bullets" "b"
- WHERE ("b"."plan_id" = "p"."id")), '[]'::"jsonb") AS "bullets",
- "p"."target" AS "plan_target"
- FROM (("public"."plans" "p"
- LEFT JOIN "public"."plan_public" "pp" ON (("pp"."plan_id" = "p"."id")))
- LEFT JOIN "public"."v_plan_active_prices" "ap" ON (("ap"."plan_id" = "p"."id")))
- ORDER BY COALESCE("pp"."sort_order", 0), "p"."key";
-
-
-ALTER VIEW "public"."v_public_pricing" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_subscription_feature_mismatch" AS
- WITH "expected" AS (
- SELECT "s"."user_id" AS "owner_id",
- "f"."key" AS "feature_key"
- FROM (("public"."subscriptions" "s"
- JOIN "public"."plan_features" "pf" ON ((("pf"."plan_id" = "s"."plan_id") AND ("pf"."enabled" = true))))
- JOIN "public"."features" "f" ON (("f"."id" = "pf"."feature_id")))
- WHERE (("s"."status" = 'active'::"text") AND ("s"."tenant_id" IS NULL) AND ("s"."user_id" IS NOT NULL))
- ), "actual" AS (
- SELECT "e"."owner_id",
- "e"."feature_key"
- FROM "public"."owner_feature_entitlements" "e"
- )
- SELECT COALESCE("expected"."owner_id", "actual"."owner_id") AS "owner_id",
- COALESCE("expected"."feature_key", "actual"."feature_key") AS "feature_key",
- CASE
- WHEN (("expected"."feature_key" IS NOT NULL) AND ("actual"."feature_key" IS NULL)) THEN 'missing_entitlement'::"text"
- WHEN (("expected"."feature_key" IS NULL) AND ("actual"."feature_key" IS NOT NULL)) THEN 'unexpected_entitlement'::"text"
- ELSE NULL::"text"
- END AS "mismatch_type"
- FROM ("expected"
- FULL JOIN "actual" ON ((("expected"."owner_id" = "actual"."owner_id") AND ("expected"."feature_key" = "actual"."feature_key"))))
- WHERE (("expected"."feature_key" IS NULL) OR ("actual"."feature_key" IS NULL));
-
-
-ALTER VIEW "public"."v_subscription_feature_mismatch" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_subscription_health" AS
- SELECT "s"."id" AS "subscription_id",
- "s"."user_id" AS "owner_id",
- "s"."status",
- "s"."plan_id",
- "p"."key" AS "plan_key",
- "s"."current_period_start",
- "s"."current_period_end",
- "s"."updated_at",
- CASE
- WHEN ("s"."plan_id" IS NULL) THEN 'missing_plan'::"text"
- WHEN ("p"."id" IS NULL) THEN 'invalid_plan'::"text"
- WHEN (("s"."status" = 'active'::"text") AND ("s"."current_period_end" IS NOT NULL) AND ("s"."current_period_end" < "now"())) THEN 'expired_but_active'::"text"
- WHEN (("s"."status" = 'canceled'::"text") AND ("s"."current_period_end" > "now"())) THEN 'canceled_but_still_in_period'::"text"
- ELSE 'ok'::"text"
- END AS "health_status",
- CASE
- WHEN ("s"."tenant_id" IS NOT NULL) THEN 'clinic'::"text"
- ELSE 'therapist'::"text"
- END AS "owner_type",
- COALESCE("s"."tenant_id", "s"."user_id") AS "owner_ref"
- FROM ("public"."subscriptions" "s"
- LEFT JOIN "public"."plans" "p" ON (("p"."id" = "s"."plan_id")));
-
-
-ALTER VIEW "public"."v_subscription_health" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_subscription_health_v2" AS
- SELECT "s"."id" AS "subscription_id",
- "s"."user_id" AS "owner_id",
- CASE
- WHEN ("s"."tenant_id" IS NOT NULL) THEN 'clinic'::"text"
- ELSE 'therapist'::"text"
- END AS "owner_type",
- COALESCE("s"."tenant_id", "s"."user_id") AS "owner_ref",
- "s"."status",
- "s"."plan_id",
- "p"."key" AS "plan_key",
- "s"."current_period_start",
- "s"."current_period_end",
- "s"."updated_at",
- CASE
- WHEN ("s"."plan_id" IS NULL) THEN 'missing_plan'::"text"
- WHEN ("p"."id" IS NULL) THEN 'invalid_plan'::"text"
- WHEN (("s"."status" = 'active'::"text") AND ("s"."current_period_end" IS NOT NULL) AND ("s"."current_period_end" < "now"())) THEN 'expired_but_active'::"text"
- WHEN (("s"."status" = 'canceled'::"text") AND ("s"."current_period_end" > "now"())) THEN 'canceled_but_still_in_period'::"text"
- ELSE 'ok'::"text"
- END AS "health_status"
- FROM ("public"."subscriptions" "s"
- LEFT JOIN "public"."plans" "p" ON (("p"."id" = "s"."plan_id")));
-
-
-ALTER VIEW "public"."v_subscription_health_v2" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_tag_patient_counts" AS
- SELECT "t"."id",
- "t"."owner_id",
- "t"."nome",
- "t"."cor",
- "t"."is_padrao",
- "t"."created_at",
- "t"."updated_at",
- (COALESCE("count"("ppt"."patient_id"), (0)::bigint))::integer AS "pacientes_count",
- (COALESCE("count"("ppt"."patient_id"), (0)::bigint))::integer AS "patient_count"
- FROM ("public"."patient_tags" "t"
- LEFT JOIN "public"."patient_patient_tag" "ppt" ON ((("ppt"."tag_id" = "t"."id") AND ("ppt"."owner_id" = "t"."owner_id"))))
- GROUP BY "t"."id", "t"."owner_id", "t"."nome", "t"."cor", "t"."is_padrao", "t"."created_at", "t"."updated_at";
-
-
-ALTER VIEW "public"."v_tag_patient_counts" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_tenant_active_subscription" AS
- SELECT DISTINCT ON ("tenant_id") "tenant_id",
- "plan_id",
- "plan_key",
- "interval",
- "status",
- "current_period_start",
- "current_period_end",
- "created_at"
- FROM "public"."subscriptions" "s"
- WHERE (("tenant_id" IS NOT NULL) AND ("status" = 'active'::"text") AND (("current_period_end" IS NULL) OR ("current_period_end" > "now"())))
- ORDER BY "tenant_id", "created_at" DESC;
-
-
-ALTER VIEW "public"."v_tenant_active_subscription" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_tenant_entitlements" AS
- SELECT "a"."tenant_id",
- "f"."key" AS "feature_key",
- true AS "allowed"
- FROM (("public"."v_tenant_active_subscription" "a"
- JOIN "public"."plan_features" "pf" ON ((("pf"."plan_id" = "a"."plan_id") AND ("pf"."enabled" = true))))
- JOIN "public"."features" "f" ON (("f"."id" = "pf"."feature_id")));
-
-
-ALTER VIEW "public"."v_tenant_entitlements" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_tenant_entitlements_full" AS
- SELECT "a"."tenant_id",
- "f"."key" AS "feature_key",
- ("pf"."enabled" = true) AS "allowed",
- "pf"."limits",
- "a"."plan_id",
- "p"."key" AS "plan_key"
- FROM ((("public"."v_tenant_active_subscription" "a"
- JOIN "public"."plan_features" "pf" ON (("pf"."plan_id" = "a"."plan_id")))
- JOIN "public"."features" "f" ON (("f"."id" = "pf"."feature_id")))
- JOIN "public"."plans" "p" ON (("p"."id" = "a"."plan_id")));
-
-
-ALTER VIEW "public"."v_tenant_entitlements_full" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_tenant_entitlements_json" AS
- SELECT "tenant_id",
- "max"("plan_key") AS "plan_key",
- "jsonb_object_agg"("feature_key", "jsonb_build_object"('allowed', "allowed", 'limits', COALESCE("limits", '{}'::"jsonb")) ORDER BY "feature_key") AS "entitlements"
- FROM "public"."v_tenant_entitlements_full"
- GROUP BY "tenant_id";
-
-
-ALTER VIEW "public"."v_tenant_entitlements_json" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_tenant_feature_exceptions" AS
- SELECT "tf"."tenant_id",
- "a"."plan_key",
- "tf"."feature_key",
- 'commercial_exception'::"text" AS "exception_type"
- FROM (("public"."tenant_features" "tf"
- JOIN "public"."v_tenant_active_subscription" "a" ON (("a"."tenant_id" = "tf"."tenant_id")))
- LEFT JOIN "public"."v_tenant_entitlements_full" "v" ON ((("v"."tenant_id" = "tf"."tenant_id") AND ("v"."feature_key" = "tf"."feature_key"))))
- WHERE (("tf"."enabled" = true) AND (COALESCE("v"."allowed", false) = false));
-
-
-ALTER VIEW "public"."v_tenant_feature_exceptions" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_tenant_feature_mismatch" AS
- WITH "plan_allowed" AS (
- SELECT "v"."tenant_id",
- "v"."feature_key",
- "v"."allowed"
- FROM "public"."v_tenant_entitlements_full" "v"
- ), "overrides" AS (
- SELECT "tf"."tenant_id",
- "tf"."feature_key",
- "tf"."enabled"
- FROM "public"."tenant_features" "tf"
- )
- SELECT "o"."tenant_id",
- "o"."feature_key",
- CASE
- WHEN (("o"."enabled" = true) AND (COALESCE("p"."allowed", false) = false)) THEN 'unexpected_override'::"text"
- ELSE NULL::"text"
- END AS "mismatch_type"
- FROM ("overrides" "o"
- LEFT JOIN "plan_allowed" "p" ON ((("p"."tenant_id" = "o"."tenant_id") AND ("p"."feature_key" = "o"."feature_key"))))
- WHERE (("o"."enabled" = true) AND (COALESCE("p"."allowed", false) = false));
-
-
-ALTER VIEW "public"."v_tenant_feature_mismatch" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_tenant_members_with_profiles" AS
- SELECT "tm"."id" AS "tenant_member_id",
- "tm"."tenant_id",
- "tm"."user_id",
- "tm"."role",
- "tm"."status",
- "tm"."created_at",
- "p"."full_name",
- "au"."email"
- FROM (("public"."tenant_members" "tm"
- LEFT JOIN "public"."profiles" "p" ON (("p"."id" = "tm"."user_id")))
- LEFT JOIN "auth"."users" "au" ON (("au"."id" = "tm"."user_id")));
-
-
-ALTER VIEW "public"."v_tenant_members_with_profiles" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_tenant_people" AS
- SELECT 'member'::"text" AS "type",
- "m"."tenant_id",
- "m"."user_id",
- "u"."email",
- "m"."role",
- "m"."status",
- NULL::"uuid" AS "invite_token",
- NULL::timestamp with time zone AS "expires_at"
- FROM ("public"."tenant_members" "m"
- JOIN "auth"."users" "u" ON (("u"."id" = "m"."user_id")))
-UNION ALL
- SELECT 'invite'::"text" AS "type",
- "i"."tenant_id",
- NULL::"uuid" AS "user_id",
- "i"."email",
- "i"."role",
- 'invited'::"text" AS "status",
- "i"."token" AS "invite_token",
- "i"."expires_at"
- FROM "public"."tenant_invites" "i"
- WHERE (("i"."accepted_at" IS NULL) AND ("i"."revoked_at" IS NULL));
-
-
-ALTER VIEW "public"."v_tenant_people" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_tenant_staff" AS
- SELECT ('m_'::"text" || ("tm"."id")::"text") AS "row_id",
- "tm"."tenant_id",
- "tm"."user_id",
- "tm"."role",
- "tm"."status",
- "tm"."created_at",
- "p"."full_name",
- "au"."email",
- NULL::"uuid" AS "invite_token"
- FROM (("public"."tenant_members" "tm"
- LEFT JOIN "public"."profiles" "p" ON (("p"."id" = "tm"."user_id")))
- LEFT JOIN "auth"."users" "au" ON (("au"."id" = "tm"."user_id")))
-UNION ALL
- SELECT ('i_'::"text" || ("ti"."id")::"text") AS "row_id",
- "ti"."tenant_id",
- NULL::"uuid" AS "user_id",
- "ti"."role",
- 'invited'::"text" AS "status",
- "ti"."created_at",
- NULL::"text" AS "full_name",
- "ti"."email",
- "ti"."token" AS "invite_token"
- FROM "public"."tenant_invites" "ti"
- WHERE (("ti"."accepted_at" IS NULL) AND ("ti"."revoked_at" IS NULL) AND ("ti"."expires_at" > "now"()));
-
-
-ALTER VIEW "public"."v_tenant_staff" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_user_active_subscription" AS
- SELECT DISTINCT ON ("user_id") "user_id",
- "plan_id",
- "plan_key",
- "interval",
- "status",
- "current_period_start",
- "current_period_end",
- "created_at"
- FROM "public"."subscriptions" "s"
- WHERE (("tenant_id" IS NULL) AND ("user_id" IS NOT NULL) AND ("status" = 'active'::"text") AND (("current_period_end" IS NULL) OR ("current_period_end" > "now"())))
- ORDER BY "user_id", "created_at" DESC;
-
-
-ALTER VIEW "public"."v_user_active_subscription" OWNER TO "supabase_admin";
-
-
-CREATE OR REPLACE VIEW "public"."v_user_entitlements" AS
- SELECT "a"."user_id",
- "f"."key" AS "feature_key",
- true AS "allowed"
- FROM (("public"."v_user_active_subscription" "a"
- JOIN "public"."plan_features" "pf" ON ((("pf"."plan_id" = "a"."plan_id") AND ("pf"."enabled" = true))))
- JOIN "public"."features" "f" ON (("f"."id" = "pf"."feature_id")));
-
-
-ALTER VIEW "public"."v_user_entitlements" OWNER TO "supabase_admin";
-
-
-ALTER TABLE ONLY "public"."agenda_online_slots" ALTER COLUMN "id" SET DEFAULT "nextval"('"public"."agenda_online_slots_id_seq"'::"regclass");
-
-
-
-ALTER TABLE ONLY "public"."agenda_bloqueios"
- ADD CONSTRAINT "agenda_bloqueios_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."agenda_configuracoes"
- ADD CONSTRAINT "agenda_configuracoes_pkey" PRIMARY KEY ("owner_id");
-
-
-
-ALTER TABLE ONLY "public"."agenda_eventos"
- ADD CONSTRAINT "agenda_eventos_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."agenda_eventos"
- ADD CONSTRAINT "agenda_eventos_sem_sobreposicao" EXCLUDE USING "gist" ("owner_id" WITH =, "tstzrange"("inicio_em", "fim_em", '[)'::"text") WITH &&);
-
-
-
-ALTER TABLE ONLY "public"."agenda_excecoes"
- ADD CONSTRAINT "agenda_excecoes_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."agenda_online_slots"
- ADD CONSTRAINT "agenda_online_slots_owner_id_weekday_time_key" UNIQUE ("owner_id", "weekday", "time");
-
-
-
-ALTER TABLE ONLY "public"."agenda_online_slots"
- ADD CONSTRAINT "agenda_online_slots_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."agenda_regras_semanais"
- ADD CONSTRAINT "agenda_regras_semanais_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."agenda_regras_semanais"
- ADD CONSTRAINT "agenda_regras_semanais_unique" UNIQUE ("owner_id", "dia_semana", "hora_inicio", "hora_fim", "modalidade");
-
-
-
-ALTER TABLE ONLY "public"."agenda_slots_bloqueados_semanais"
- ADD CONSTRAINT "agenda_slots_bloqueados_seman_owner_id_dia_semana_hora_inic_key" UNIQUE ("owner_id", "dia_semana", "hora_inicio");
-
-
-
-ALTER TABLE ONLY "public"."agenda_slots_bloqueados_semanais"
- ADD CONSTRAINT "agenda_slots_bloqueados_semanais_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."agenda_slots_regras"
- ADD CONSTRAINT "agenda_slots_regras_owner_id_dia_semana_key" UNIQUE ("owner_id", "dia_semana");
-
-
-
-ALTER TABLE ONLY "public"."agenda_slots_regras"
- ADD CONSTRAINT "agenda_slots_regras_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."agendador_configuracoes"
- ADD CONSTRAINT "agendador_configuracoes_pkey" PRIMARY KEY ("owner_id");
-
-
-
-ALTER TABLE ONLY "public"."agendador_solicitacoes"
- ADD CONSTRAINT "agendador_solicitacoes_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."commitment_time_logs"
- ADD CONSTRAINT "commitment_time_logs_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."determined_commitment_fields"
- ADD CONSTRAINT "determined_commitment_fields_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."determined_commitments"
- ADD CONSTRAINT "determined_commitments_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."determined_commitments"
- ADD CONSTRAINT "determined_commitments_tenant_native_key_uq" UNIQUE ("tenant_id", "native_key");
-
-
-
-ALTER TABLE ONLY "public"."dev_user_credentials"
- ADD CONSTRAINT "dev_user_credentials_email_key" UNIQUE ("email");
-
-
-
-ALTER TABLE ONLY "public"."dev_user_credentials"
- ADD CONSTRAINT "dev_user_credentials_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."entitlements_invalidation"
- ADD CONSTRAINT "entitlements_invalidation_pkey" PRIMARY KEY ("owner_id");
-
-
-
-ALTER TABLE ONLY "public"."features"
- ADD CONSTRAINT "features_key_key" UNIQUE ("key");
-
-
-
-ALTER TABLE ONLY "public"."features"
- ADD CONSTRAINT "features_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."feriados"
- ADD CONSTRAINT "feriados_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."feriados"
- ADD CONSTRAINT "feriados_tenant_id_data_nome_key" UNIQUE ("tenant_id", "data", "nome");
-
-
-
-ALTER TABLE ONLY "public"."module_features"
- ADD CONSTRAINT "module_features_pkey" PRIMARY KEY ("module_id", "feature_id");
-
-
-
-ALTER TABLE ONLY "public"."modules"
- ADD CONSTRAINT "modules_key_key" UNIQUE ("key");
-
-
-
-ALTER TABLE ONLY "public"."modules"
- ADD CONSTRAINT "modules_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."owner_users"
- ADD CONSTRAINT "owner_users_pkey" PRIMARY KEY ("owner_id", "user_id");
-
-
-
-ALTER TABLE ONLY "public"."patient_group_patient"
- ADD CONSTRAINT "patient_group_patient_pkey" PRIMARY KEY ("patient_group_id", "patient_id");
-
-
-
-ALTER TABLE ONLY "public"."patient_groups"
- ADD CONSTRAINT "patient_groups_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."patient_intake_requests"
- ADD CONSTRAINT "patient_intake_requests_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."patient_invites"
- ADD CONSTRAINT "patient_invites_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."patient_invites"
- ADD CONSTRAINT "patient_invites_token_key" UNIQUE ("token");
-
-
-
-ALTER TABLE ONLY "public"."patient_patient_tag"
- ADD CONSTRAINT "patient_patient_tag_pkey" PRIMARY KEY ("patient_id", "tag_id");
-
-
-
-ALTER TABLE ONLY "public"."patient_tags"
- ADD CONSTRAINT "patient_tags_owner_name_uniq" UNIQUE ("owner_id", "nome");
-
-
-
-ALTER TABLE ONLY "public"."patient_tags"
- ADD CONSTRAINT "patient_tags_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."patients"
- ADD CONSTRAINT "patients_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."plan_features"
- ADD CONSTRAINT "plan_features_pkey" PRIMARY KEY ("plan_id", "feature_id");
-
-
-
-ALTER TABLE ONLY "public"."plan_prices"
- ADD CONSTRAINT "plan_prices_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."plan_public_bullets"
- ADD CONSTRAINT "plan_public_bullets_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."plan_public"
- ADD CONSTRAINT "plan_public_pkey" PRIMARY KEY ("plan_id");
-
-
-
-ALTER TABLE ONLY "public"."plans"
- ADD CONSTRAINT "plans_key_key" UNIQUE ("key");
-
-
-
-ALTER TABLE ONLY "public"."plans"
- ADD CONSTRAINT "plans_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."profiles"
- ADD CONSTRAINT "profiles_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."recurrence_exceptions"
- ADD CONSTRAINT "recurrence_exceptions_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."recurrence_exceptions"
- ADD CONSTRAINT "recurrence_exceptions_unique" UNIQUE ("recurrence_id", "original_date");
-
-
-
-ALTER TABLE ONLY "public"."recurrence_rules"
- ADD CONSTRAINT "recurrence_rules_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."saas_admins"
- ADD CONSTRAINT "saas_admins_pkey" PRIMARY KEY ("user_id");
-
-
-
-ALTER TABLE ONLY "public"."saas_doc_votos"
- ADD CONSTRAINT "saas_doc_votos_doc_id_user_id_key" UNIQUE ("doc_id", "user_id");
-
-
-
-ALTER TABLE ONLY "public"."saas_doc_votos"
- ADD CONSTRAINT "saas_doc_votos_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."saas_docs"
- ADD CONSTRAINT "saas_docs_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."saas_faq_itens"
- ADD CONSTRAINT "saas_faq_itens_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."saas_faq"
- ADD CONSTRAINT "saas_faq_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."subscription_events"
- ADD CONSTRAINT "subscription_events_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."subscription_intents_personal"
- ADD CONSTRAINT "subscription_intents_personal_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."subscription_intents_legacy"
- ADD CONSTRAINT "subscription_intents_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."subscription_intents_tenant"
- ADD CONSTRAINT "subscription_intents_tenant_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."subscriptions"
- ADD CONSTRAINT "subscriptions_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."tenant_feature_exceptions_log"
- ADD CONSTRAINT "tenant_feature_exceptions_log_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."tenant_features"
- ADD CONSTRAINT "tenant_features_pkey" PRIMARY KEY ("tenant_id", "feature_key");
-
-
-
-ALTER TABLE ONLY "public"."tenant_invites"
- ADD CONSTRAINT "tenant_invites_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."tenant_members"
- ADD CONSTRAINT "tenant_members_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."tenant_members"
- ADD CONSTRAINT "tenant_members_tenant_id_user_id_key" UNIQUE ("tenant_id", "user_id");
-
-
-
-ALTER TABLE ONLY "public"."tenant_modules"
- ADD CONSTRAINT "tenant_modules_owner_id_module_id_key" UNIQUE ("owner_id", "module_id");
-
-
-
-ALTER TABLE ONLY "public"."tenant_modules"
- ADD CONSTRAINT "tenant_modules_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."tenants"
- ADD CONSTRAINT "tenants_pkey" PRIMARY KEY ("id");
-
-
-
-ALTER TABLE ONLY "public"."user_settings"
- ADD CONSTRAINT "user_settings_pkey" PRIMARY KEY ("user_id");
-
-
-
-CREATE INDEX "agenda_bloqueios_owner_data_idx" ON "public"."agenda_bloqueios" USING "btree" ("owner_id", "data_inicio", "data_fim");
-
-
-
-CREATE INDEX "agenda_bloqueios_owner_id_idx" ON "public"."agenda_bloqueios" USING "btree" ("owner_id");
-
-
-
-CREATE INDEX "agenda_bloqueios_recorrente_idx" ON "public"."agenda_bloqueios" USING "btree" ("owner_id", "dia_semana") WHERE ("recorrente" = true);
-
-
-
-CREATE INDEX "agenda_bloqueios_tenant_id_idx" ON "public"."agenda_bloqueios" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "agenda_configuracoes_tenant_idx" ON "public"."agenda_configuracoes" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "agenda_configuracoes_tenant_owner_idx" ON "public"."agenda_configuracoes" USING "btree" ("tenant_id", "owner_id");
-
-
-
-CREATE INDEX "agenda_eventos_owner_inicio_idx" ON "public"."agenda_eventos" USING "btree" ("owner_id", "inicio_em");
-
-
-
-CREATE INDEX "agenda_eventos_owner_paciente_idx" ON "public"."agenda_eventos" USING "btree" ("owner_id", "paciente_id");
-
-
-
-CREATE INDEX "agenda_eventos_owner_terapeuta_inicio_idx" ON "public"."agenda_eventos" USING "btree" ("owner_id", "terapeuta_id", "inicio_em");
-
-
-
-CREATE INDEX "agenda_eventos_recurrence_idx" ON "public"."agenda_eventos" USING "btree" ("recurrence_id") WHERE ("recurrence_id" IS NOT NULL);
-
-
-
-CREATE INDEX "agenda_eventos_tenant_inicio_idx" ON "public"."agenda_eventos" USING "btree" ("tenant_id", "inicio_em");
-
-
-
-CREATE INDEX "agenda_eventos_tenant_owner_inicio_idx" ON "public"."agenda_eventos" USING "btree" ("tenant_id", "owner_id", "inicio_em");
-
-
-
-CREATE INDEX "agenda_excecoes_owner_data_idx" ON "public"."agenda_excecoes" USING "btree" ("owner_id", "data");
-
-
-
-CREATE INDEX "agenda_excecoes_tenant_idx" ON "public"."agenda_excecoes" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "agenda_excecoes_tenant_owner_idx" ON "public"."agenda_excecoes" USING "btree" ("tenant_id", "owner_id");
-
-
-
-CREATE INDEX "agenda_online_slots_owner_weekday_idx" ON "public"."agenda_online_slots" USING "btree" ("owner_id", "weekday");
-
-
-
-CREATE INDEX "agenda_online_slots_tenant_idx" ON "public"."agenda_online_slots" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "agenda_online_slots_tenant_owner_idx" ON "public"."agenda_online_slots" USING "btree" ("tenant_id", "owner_id");
-
-
-
-CREATE INDEX "agenda_regras_semanais_owner_dia_idx" ON "public"."agenda_regras_semanais" USING "btree" ("owner_id", "dia_semana");
-
-
-
-CREATE INDEX "agenda_regras_semanais_tenant_idx" ON "public"."agenda_regras_semanais" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "agenda_regras_semanais_tenant_owner_idx" ON "public"."agenda_regras_semanais" USING "btree" ("tenant_id", "owner_id");
-
-
-
-CREATE INDEX "agenda_slots_bloqueados_semanais_tenant_idx" ON "public"."agenda_slots_bloqueados_semanais" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "agenda_slots_bloqueados_semanais_tenant_owner_idx" ON "public"."agenda_slots_bloqueados_semanais" USING "btree" ("tenant_id", "owner_id");
-
-
-
-CREATE INDEX "agenda_slots_regras_tenant_idx" ON "public"."agenda_slots_regras" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "agenda_slots_regras_tenant_owner_idx" ON "public"."agenda_slots_regras" USING "btree" ("tenant_id", "owner_id");
-
-
-
-CREATE INDEX "agendador_cfg_tenant_idx" ON "public"."agendador_configuracoes" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "agendador_sol_data_idx" ON "public"."agendador_solicitacoes" USING "btree" ("data_solicitada", "hora_solicitada");
-
-
-
-CREATE INDEX "agendador_sol_owner_idx" ON "public"."agendador_solicitacoes" USING "btree" ("owner_id", "status");
-
-
-
-CREATE INDEX "agendador_sol_tenant_idx" ON "public"."agendador_solicitacoes" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "commitment_time_logs_calendar_event_idx" ON "public"."commitment_time_logs" USING "btree" ("calendar_event_id");
-
-
-
-CREATE INDEX "commitment_time_logs_commitment_idx" ON "public"."commitment_time_logs" USING "btree" ("commitment_id", "created_at" DESC);
-
-
-
-CREATE INDEX "commitment_time_logs_tenant_idx" ON "public"."commitment_time_logs" USING "btree" ("tenant_id", "created_at" DESC);
-
-
-
-CREATE INDEX "determined_commitment_fields_commitment_idx" ON "public"."determined_commitment_fields" USING "btree" ("commitment_id", "sort_order");
-
-
-
-CREATE UNIQUE INDEX "determined_commitment_fields_key_uniq" ON "public"."determined_commitment_fields" USING "btree" ("commitment_id", "key");
-
-
-
-CREATE INDEX "determined_commitment_fields_tenant_idx" ON "public"."determined_commitment_fields" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "determined_commitments_active_idx" ON "public"."determined_commitments" USING "btree" ("tenant_id", "active");
-
-
-
-CREATE INDEX "determined_commitments_tenant_idx" ON "public"."determined_commitments" USING "btree" ("tenant_id");
-
-
-
-CREATE UNIQUE INDEX "determined_commitments_tenant_name_uniq" ON "public"."determined_commitments" USING "btree" ("tenant_id", "lower"("name"));
-
-
-
-CREATE UNIQUE INDEX "feriados_global_unique" ON "public"."feriados" USING "btree" ("data", "nome") WHERE ("tenant_id" IS NULL);
-
-
-
-CREATE INDEX "idx_agenda_eventos_determined_commitment_id" ON "public"."agenda_eventos" USING "btree" ("determined_commitment_id");
-
-
-
-CREATE INDEX "idx_agenda_excecoes_owner_data" ON "public"."agenda_excecoes" USING "btree" ("owner_id", "data");
-
-
-
-CREATE INDEX "idx_agenda_slots_regras_owner_dia" ON "public"."agenda_slots_regras" USING "btree" ("owner_id", "dia_semana");
-
-
-
-CREATE INDEX "idx_intakes_converted_patient_id" ON "public"."patient_intake_requests" USING "btree" ("converted_patient_id");
-
-
-
-CREATE INDEX "idx_intakes_owner_cpf" ON "public"."patient_intake_requests" USING "btree" ("owner_id", "cpf");
-
-
-
-CREATE INDEX "idx_intakes_owner_created" ON "public"."patient_intake_requests" USING "btree" ("owner_id", "created_at" DESC);
-
-
-
-CREATE INDEX "idx_intakes_owner_status_created" ON "public"."patient_intake_requests" USING "btree" ("owner_id", "status", "created_at" DESC);
-
-
-
-CREATE INDEX "idx_intakes_status_created" ON "public"."patient_intake_requests" USING "btree" ("status", "created_at" DESC);
-
-
-
-CREATE INDEX "idx_patient_group_patient_group_id" ON "public"."patient_group_patient" USING "btree" ("patient_group_id");
-
-
-
-CREATE INDEX "idx_patient_groups_owner" ON "public"."patient_groups" USING "btree" ("owner_id");
-
-
-
-CREATE INDEX "idx_patient_groups_owner_system_nome" ON "public"."patient_groups" USING "btree" ("owner_id", "is_system", "nome");
-
-
-
-CREATE INDEX "idx_patient_tags_owner" ON "public"."patient_tags" USING "btree" ("owner_id");
-
-
-
-CREATE INDEX "idx_patients_created_at" ON "public"."patients" USING "btree" ("created_at" DESC);
-
-
-
-CREATE INDEX "idx_patients_last_attended" ON "public"."patients" USING "btree" ("last_attended_at" DESC);
-
-
-
-CREATE INDEX "idx_patients_owner_email_principal" ON "public"."patients" USING "btree" ("owner_id", "email_principal");
-
-
-
-CREATE INDEX "idx_patients_owner_id" ON "public"."patients" USING "btree" ("owner_id");
-
-
-
-CREATE INDEX "idx_patients_owner_nome" ON "public"."patients" USING "btree" ("owner_id", "nome_completo");
-
-
-
-CREATE INDEX "idx_patients_responsible_member" ON "public"."patients" USING "btree" ("responsible_member_id");
-
-
-
-CREATE INDEX "idx_patients_status" ON "public"."patients" USING "btree" ("status");
-
-
-
-CREATE INDEX "idx_patients_tenant" ON "public"."patients" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "idx_patients_tenant_email_norm" ON "public"."patients" USING "btree" ("tenant_id", "lower"(TRIM(BOTH FROM "email_principal")));
-
-
-
-CREATE INDEX "idx_pgp_group" ON "public"."patient_group_patient" USING "btree" ("patient_group_id");
-
-
-
-CREATE INDEX "idx_pgp_patient" ON "public"."patient_group_patient" USING "btree" ("patient_id");
-
-
-
-CREATE INDEX "idx_ppt_patient" ON "public"."patient_patient_tag" USING "btree" ("patient_id");
-
-
-
-CREATE INDEX "idx_ppt_tag" ON "public"."patient_patient_tag" USING "btree" ("tag_id");
-
-
-
-CREATE INDEX "idx_slots_bloq_owner_dia" ON "public"."agenda_slots_bloqueados_semanais" USING "btree" ("owner_id", "dia_semana");
-
-
-
-CREATE INDEX "idx_subscription_intents_plan_interval" ON "public"."subscription_intents_legacy" USING "btree" ("plan_key", "interval");
-
-
-
-CREATE INDEX "idx_subscription_intents_status" ON "public"."subscription_intents_legacy" USING "btree" ("status");
-
-
-
-CREATE INDEX "idx_subscription_intents_user_id" ON "public"."subscription_intents_legacy" USING "btree" ("user_id");
-
-
-
-CREATE INDEX "idx_tenant_features_tenant" ON "public"."tenant_features" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "idx_tenant_invites_tenant" ON "public"."tenant_invites" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "idx_tenant_invites_token" ON "public"."tenant_invites" USING "btree" ("token");
-
-
-
-CREATE INDEX "ix_plan_prices_plan" ON "public"."plan_prices" USING "btree" ("plan_id");
-
-
-
-CREATE INDEX "ix_plan_public_bullets_plan" ON "public"."plan_public_bullets" USING "btree" ("plan_id");
-
-
-
-CREATE INDEX "ix_plan_public_sort" ON "public"."plan_public" USING "btree" ("sort_order");
-
-
-
-CREATE INDEX "patient_group_patient_tenant_idx" ON "public"."patient_group_patient" USING "btree" ("tenant_id");
-
-
-
-CREATE UNIQUE INDEX "patient_groups_owner_nome_uniq" ON "public"."patient_groups" USING "btree" ("owner_id", "nome");
-
-
-
-CREATE INDEX "patient_groups_tenant_idx" ON "public"."patient_groups" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "patient_intake_owner_id_idx" ON "public"."patient_intake_requests" USING "btree" ("owner_id");
-
-
-
-CREATE INDEX "patient_intake_requests_tenant_idx" ON "public"."patient_intake_requests" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "patient_intake_status_idx" ON "public"."patient_intake_requests" USING "btree" ("status");
-
-
-
-CREATE INDEX "patient_intake_token_idx" ON "public"."patient_intake_requests" USING "btree" ("token");
-
-
-
-CREATE UNIQUE INDEX "patient_invites_one_active_per_owner" ON "public"."patient_invites" USING "btree" ("owner_id") WHERE ("active" = true);
-
-
-
-CREATE INDEX "patient_invites_owner_id_idx" ON "public"."patient_invites" USING "btree" ("owner_id");
-
-
-
-CREATE INDEX "patient_invites_tenant_idx" ON "public"."patient_invites" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "patient_invites_token_idx" ON "public"."patient_invites" USING "btree" ("token");
-
-
-
-CREATE INDEX "patient_patient_tag_tenant_idx" ON "public"."patient_patient_tag" USING "btree" ("tenant_id");
-
-
-
-CREATE UNIQUE INDEX "patient_tags_owner_name_uq" ON "public"."patient_tags" USING "btree" ("owner_id", "lower"("nome"));
-
-
-
-CREATE INDEX "patient_tags_tenant_idx" ON "public"."patient_tags" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "ppt_owner_idx" ON "public"."patient_patient_tag" USING "btree" ("owner_id");
-
-
-
-CREATE INDEX "ppt_patient_idx" ON "public"."patient_patient_tag" USING "btree" ("patient_id");
-
-
-
-CREATE INDEX "ppt_tag_idx" ON "public"."patient_patient_tag" USING "btree" ("tag_id");
-
-
-
-CREATE INDEX "recurrence_exceptions_rule_idx" ON "public"."recurrence_exceptions" USING "btree" ("recurrence_id");
-
-
-
-CREATE INDEX "recurrence_exceptions_tenant_idx" ON "public"."recurrence_exceptions" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "recurrence_rules_active_idx" ON "public"."recurrence_rules" USING "btree" ("owner_id", "status") WHERE ("status" = 'ativo'::"text");
-
-
-
-CREATE INDEX "recurrence_rules_owner_idx" ON "public"."recurrence_rules" USING "btree" ("owner_id");
-
-
-
-CREATE INDEX "recurrence_rules_patient_idx" ON "public"."recurrence_rules" USING "btree" ("patient_id");
-
-
-
-CREATE INDEX "recurrence_rules_tenant_idx" ON "public"."recurrence_rules" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "saas_doc_votos_doc_id_idx" ON "public"."saas_doc_votos" USING "btree" ("doc_id");
-
-
-
-CREATE INDEX "saas_doc_votos_user_id_idx" ON "public"."saas_doc_votos" USING "btree" ("user_id");
-
-
-
-CREATE INDEX "saas_docs_categoria_idx" ON "public"."saas_docs" USING "btree" ("categoria");
-
-
-
-CREATE INDEX "saas_docs_exibir_no_faq_idx" ON "public"."saas_docs" USING "btree" ("exibir_no_faq") WHERE ("exibir_no_faq" = true);
-
-
-
-CREATE INDEX "saas_docs_path_ativo_idx" ON "public"."saas_docs" USING "btree" ("pagina_path", "ativo");
-
-
-
-CREATE INDEX "saas_faq_ativo_idx" ON "public"."saas_faq" USING "btree" ("ativo");
-
-
-
-CREATE INDEX "saas_faq_categoria_idx" ON "public"."saas_faq" USING "btree" ("categoria");
-
-
-
-CREATE INDEX "saas_faq_fts_idx" ON "public"."saas_faq" USING "gin" ("to_tsvector"('"portuguese"'::"regconfig", ((COALESCE("pergunta", ''::"text") || ' '::"text") || COALESCE("conteudo", ''::"text"))));
-
-
-
-CREATE INDEX "saas_faq_itens_ativo_idx" ON "public"."saas_faq_itens" USING "btree" ("ativo");
-
-
-
-CREATE INDEX "saas_faq_itens_doc_id_idx" ON "public"."saas_faq_itens" USING "btree" ("doc_id");
-
-
-
-CREATE INDEX "saas_faq_pagina_path_idx" ON "public"."saas_faq" USING "btree" ("pagina_path");
-
-
-
-CREATE INDEX "saas_faq_publico_idx" ON "public"."saas_faq" USING "btree" ("publico");
-
-
-
-CREATE INDEX "saas_faq_votos_idx" ON "public"."saas_faq" USING "btree" ("votos" DESC);
-
-
-
-CREATE INDEX "sint_personal_created_idx" ON "public"."subscription_intents_personal" USING "btree" ("created_at" DESC);
-
-
-
-CREATE INDEX "sint_personal_status_idx" ON "public"."subscription_intents_personal" USING "btree" ("status");
-
-
-
-CREATE INDEX "sint_tenant_created_idx" ON "public"."subscription_intents_tenant" USING "btree" ("created_at" DESC);
-
-
-
-CREATE INDEX "sint_tenant_status_idx" ON "public"."subscription_intents_tenant" USING "btree" ("status");
-
-
-
-CREATE INDEX "sint_tenant_tenant_idx" ON "public"."subscription_intents_tenant" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "subscription_events_created_at_idx" ON "public"."subscription_events" USING "btree" ("created_at" DESC);
-
-
-
-CREATE INDEX "subscription_events_owner_ref_idx" ON "public"."subscription_events" USING "btree" ("owner_type", "owner_ref");
-
-
-
-CREATE INDEX "subscription_events_sub_created_idx" ON "public"."subscription_events" USING "btree" ("subscription_id", "created_at" DESC);
-
-
-
-CREATE INDEX "subscription_events_subscription_id_idx" ON "public"."subscription_events" USING "btree" ("subscription_id");
-
-
-
-CREATE UNIQUE INDEX "subscriptions_one_active_per_tenant" ON "public"."subscriptions" USING "btree" ("tenant_id") WHERE ("status" = 'active'::"text");
-
-
-
-CREATE UNIQUE INDEX "subscriptions_one_active_per_user" ON "public"."subscriptions" USING "btree" ("user_id") WHERE ("status" = 'active'::"text");
-
-
-
-CREATE UNIQUE INDEX "subscriptions_one_active_per_user_personal" ON "public"."subscriptions" USING "btree" ("user_id") WHERE (("tenant_id" IS NULL) AND ("status" = 'active'::"text"));
-
-
-
-CREATE INDEX "subscriptions_owner_idx" ON "public"."subscriptions" USING "btree" ("user_id");
-
-
-
-CREATE INDEX "subscriptions_plan_key_idx" ON "public"."subscriptions" USING "btree" ("plan_key");
-
-
-
-CREATE INDEX "subscriptions_status_idx" ON "public"."subscriptions" USING "btree" ("status");
-
-
-
-CREATE INDEX "subscriptions_tenant_id_idx" ON "public"."subscriptions" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "subscriptions_tenant_period_end_idx" ON "public"."subscriptions" USING "btree" ("tenant_id", "current_period_end");
-
-
-
-CREATE INDEX "subscriptions_tenant_status_idx" ON "public"."subscriptions" USING "btree" ("tenant_id", "status");
-
-
-
-CREATE INDEX "subscriptions_user_status_idx" ON "public"."subscriptions" USING "btree" ("user_id", "status", "created_at" DESC);
-
-
-
-CREATE INDEX "tenant_members_tenant_idx" ON "public"."tenant_members" USING "btree" ("tenant_id");
-
-
-
-CREATE INDEX "tenant_members_user_idx" ON "public"."tenant_members" USING "btree" ("user_id");
-
-
-
-CREATE INDEX "tenant_modules_owner_idx" ON "public"."tenant_modules" USING "btree" ("owner_id");
-
-
-
-CREATE UNIQUE INDEX "unique_member_per_tenant" ON "public"."tenant_members" USING "btree" ("tenant_id", "user_id");
-
-
-
-CREATE UNIQUE INDEX "uq_patients_tenant_user" ON "public"."patients" USING "btree" ("tenant_id", "user_id") WHERE ("user_id" IS NOT NULL);
-
-
-
-CREATE UNIQUE INDEX "uq_plan_price_active" ON "public"."plan_prices" USING "btree" ("plan_id", "interval", "currency") WHERE (("is_active" = true) AND ("active_to" IS NULL));
-
-
-
-CREATE UNIQUE INDEX "uq_plan_prices_active" ON "public"."plan_prices" USING "btree" ("plan_id", "interval") WHERE ("is_active" = true);
-
-
-
-CREATE UNIQUE INDEX "uq_subscriptions_active_by_tenant" ON "public"."subscriptions" USING "btree" ("tenant_id") WHERE (("tenant_id" IS NOT NULL) AND ("status" = 'active'::"text"));
-
-
-
-CREATE UNIQUE INDEX "uq_subscriptions_active_personal_by_user" ON "public"."subscriptions" USING "btree" ("user_id") WHERE (("tenant_id" IS NULL) AND ("status" = 'active'::"text"));
-
-
-
-CREATE UNIQUE INDEX "uq_tenant_invites_pending" ON "public"."tenant_invites" USING "btree" ("tenant_id", "lower"("email"), "role") WHERE (("accepted_at" IS NULL) AND ("revoked_at" IS NULL));
-
-
-
-CREATE UNIQUE INDEX "uq_tenant_members_tenant_user" ON "public"."tenant_members" USING "btree" ("tenant_id", "user_id");
-
-
-
-CREATE UNIQUE INDEX "ux_subscriptions_active_per_personal_user" ON "public"."subscriptions" USING "btree" ("user_id") WHERE (("status" = 'active'::"text") AND ("tenant_id" IS NULL));
-
-
-
-CREATE UNIQUE INDEX "ux_subscriptions_active_per_tenant" ON "public"."subscriptions" USING "btree" ("tenant_id") WHERE (("status" = 'active'::"text") AND ("tenant_id" IS NOT NULL));
-
-
-
-CREATE OR REPLACE TRIGGER "agenda_bloqueios_updated_at" BEFORE UPDATE ON "public"."agenda_bloqueios" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "agendador_slug_trigger" BEFORE INSERT OR UPDATE ON "public"."agendador_configuracoes" FOR EACH ROW EXECUTE FUNCTION "public"."agendador_gerar_slug"();
-
-
-
-CREATE OR REPLACE TRIGGER "prevent_saas_membership_trigger" BEFORE INSERT ON "public"."tenant_members" FOR EACH ROW EXECUTE FUNCTION "public"."prevent_saas_membership"();
-
-
-
-CREATE OR REPLACE TRIGGER "tg_agenda_configuracoes_updated_at" BEFORE UPDATE ON "public"."agenda_configuracoes" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "tg_agenda_eventos_updated_at" BEFORE UPDATE ON "public"."agenda_eventos" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "tg_agenda_excecoes_updated_at" BEFORE UPDATE ON "public"."agenda_excecoes" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "tg_agenda_regras_semanais_updated_at" BEFORE UPDATE ON "public"."agenda_regras_semanais" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "tg_recurrence_rules_updated_at" BEFORE UPDATE ON "public"."recurrence_rules" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at_recurrence"();
-
-
-
-CREATE OR REPLACE TRIGGER "tr_plan_public_updated_at" BEFORE UPDATE ON "public"."plan_public" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_account_type_immutable" BEFORE UPDATE OF "account_type" ON "public"."profiles" FOR EACH ROW EXECUTE FUNCTION "public"."guard_account_type_immutable"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_agenda_cfg_sync" BEFORE INSERT OR UPDATE ON "public"."agenda_configuracoes" FOR EACH ROW EXECUTE FUNCTION "public"."agenda_cfg_sync"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_agenda_eventos_busy_mirror_del" AFTER DELETE ON "public"."agenda_eventos" FOR EACH ROW WHEN ((("old"."mirror_of_event_id" IS NULL) AND ("old"."tenant_id" = "old"."owner_id"))) EXECUTE FUNCTION "public"."sync_busy_mirror_agenda_eventos"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_agenda_eventos_busy_mirror_ins" AFTER INSERT ON "public"."agenda_eventos" FOR EACH ROW WHEN ((("new"."mirror_of_event_id" IS NULL) AND ("new"."tenant_id" = "new"."owner_id") AND ("new"."visibility_scope" = ANY (ARRAY['busy_only'::"text", 'private'::"text"])))) EXECUTE FUNCTION "public"."sync_busy_mirror_agenda_eventos"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_agenda_eventos_busy_mirror_upd" AFTER UPDATE ON "public"."agenda_eventos" FOR EACH ROW WHEN ((("new"."mirror_of_event_id" IS NULL) AND ("new"."tenant_id" = "new"."owner_id") AND (("new"."visibility_scope" IS DISTINCT FROM "old"."visibility_scope") OR ("new"."inicio_em" IS DISTINCT FROM "old"."inicio_em") OR ("new"."fim_em" IS DISTINCT FROM "old"."fim_em") OR ("new"."owner_id" IS DISTINCT FROM "old"."owner_id") OR ("new"."tenant_id" IS DISTINCT FROM "old"."tenant_id")))) EXECUTE FUNCTION "public"."sync_busy_mirror_agenda_eventos"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_agenda_regras_semanais_no_overlap" BEFORE INSERT OR UPDATE ON "public"."agenda_regras_semanais" FOR EACH ROW EXECUTE FUNCTION "public"."fn_agenda_regras_semanais_no_overlap"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_determined_commitment_fields_updated_at" BEFORE UPDATE ON "public"."determined_commitment_fields" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_determined_commitments_updated_at" BEFORE UPDATE ON "public"."determined_commitments" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_no_change_core_plan_key" BEFORE UPDATE ON "public"."plans" FOR EACH ROW EXECUTE FUNCTION "public"."guard_no_change_core_plan_key"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_no_change_plan_target" BEFORE UPDATE ON "public"."plans" FOR EACH ROW EXECUTE FUNCTION "public"."guard_no_change_plan_target"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_no_delete_core_plans" BEFORE DELETE ON "public"."plans" FOR EACH ROW EXECUTE FUNCTION "public"."guard_no_delete_core_plans"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_patient_cannot_own_tenant" BEFORE INSERT OR UPDATE ON "public"."tenant_members" FOR EACH ROW EXECUTE FUNCTION "public"."guard_patient_cannot_own_tenant"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_patient_groups_set_updated_at" BEFORE UPDATE ON "public"."patient_groups" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_patient_intake_requests_updated_at" BEFORE UPDATE ON "public"."patient_intake_requests" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_patient_tags_set_updated_at" BEFORE UPDATE ON "public"."patient_tags" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_patients_updated_at" BEFORE UPDATE ON "public"."patients" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_patients_validate_members" BEFORE INSERT OR UPDATE OF "tenant_id", "responsible_member_id", "patient_scope", "therapist_member_id" ON "public"."patients" FOR EACH ROW EXECUTE FUNCTION "public"."patients_validate_member_consistency"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_prevent_promoting_to_system" BEFORE UPDATE ON "public"."patient_groups" FOR EACH ROW EXECUTE FUNCTION "public"."prevent_promoting_to_system"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_prevent_system_group_changes" BEFORE DELETE OR UPDATE ON "public"."patient_groups" FOR EACH ROW EXECUTE FUNCTION "public"."prevent_system_group_changes"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_profiles_updated_at" BEFORE UPDATE ON "public"."profiles" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_subscription_intents_view_insert" INSTEAD OF INSERT ON "public"."subscription_intents" FOR EACH ROW EXECUTE FUNCTION "public"."subscription_intents_view_insert"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_subscriptions_validate_scope" BEFORE INSERT OR UPDATE ON "public"."subscriptions" FOR EACH ROW EXECUTE FUNCTION "public"."subscriptions_validate_scope"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_tenant_features_guard_with_plan" BEFORE INSERT OR UPDATE ON "public"."tenant_features" FOR EACH ROW EXECUTE FUNCTION "public"."tenant_features_guard_with_plan"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_tenant_features_updated_at" BEFORE UPDATE ON "public"."tenant_features" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_tenant_kind_immutable" BEFORE UPDATE OF "kind" ON "public"."tenants" FOR EACH ROW EXECUTE FUNCTION "public"."guard_tenant_kind_immutable"();
-
-
-
-CREATE OR REPLACE TRIGGER "trg_user_settings_updated_at" BEFORE UPDATE ON "public"."user_settings" FOR EACH ROW EXECUTE FUNCTION "public"."set_updated_at"();
-
-
-
-ALTER TABLE ONLY "public"."agenda_bloqueios"
- ADD CONSTRAINT "agenda_bloqueios_owner_id_fkey" FOREIGN KEY ("owner_id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agenda_bloqueios"
- ADD CONSTRAINT "agenda_bloqueios_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."agenda_configuracoes"
- ADD CONSTRAINT "agenda_configuracoes_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agenda_eventos"
- ADD CONSTRAINT "agenda_eventos_determined_commitment_fk" FOREIGN KEY ("determined_commitment_id") REFERENCES "public"."determined_commitments"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."agenda_eventos"
- ADD CONSTRAINT "agenda_eventos_patient_id_fkey" FOREIGN KEY ("patient_id") REFERENCES "public"."patients"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."agenda_eventos"
- ADD CONSTRAINT "agenda_eventos_recurrence_id_fkey" FOREIGN KEY ("recurrence_id") REFERENCES "public"."recurrence_rules"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."agenda_eventos"
- ADD CONSTRAINT "agenda_eventos_terapeuta_fk" FOREIGN KEY ("terapeuta_id") REFERENCES "auth"."users"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."agenda_excecoes"
- ADD CONSTRAINT "agenda_excecoes_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agenda_online_slots"
- ADD CONSTRAINT "agenda_online_slots_owner_id_fkey" FOREIGN KEY ("owner_id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agenda_online_slots"
- ADD CONSTRAINT "agenda_online_slots_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agenda_regras_semanais"
- ADD CONSTRAINT "agenda_regras_semanais_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agenda_slots_bloqueados_semanais"
- ADD CONSTRAINT "agenda_slots_bloqueados_semanais_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agenda_slots_regras"
- ADD CONSTRAINT "agenda_slots_regras_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agendador_configuracoes"
- ADD CONSTRAINT "agendador_configuracoes_owner_fk" FOREIGN KEY ("owner_id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agendador_configuracoes"
- ADD CONSTRAINT "agendador_configuracoes_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agendador_solicitacoes"
- ADD CONSTRAINT "agendador_sol_owner_fk" FOREIGN KEY ("owner_id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."agendador_solicitacoes"
- ADD CONSTRAINT "agendador_sol_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."commitment_time_logs"
- ADD CONSTRAINT "commitment_time_logs_calendar_event_id_fkey" FOREIGN KEY ("calendar_event_id") REFERENCES "public"."agenda_eventos"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."commitment_time_logs"
- ADD CONSTRAINT "commitment_time_logs_commitment_id_fkey" FOREIGN KEY ("commitment_id") REFERENCES "public"."determined_commitments"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."commitment_time_logs"
- ADD CONSTRAINT "commitment_time_logs_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."determined_commitment_fields"
- ADD CONSTRAINT "determined_commitment_fields_commitment_id_fkey" FOREIGN KEY ("commitment_id") REFERENCES "public"."determined_commitments"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."determined_commitment_fields"
- ADD CONSTRAINT "determined_commitment_fields_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."determined_commitments"
- ADD CONSTRAINT "determined_commitments_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."feriados"
- ADD CONSTRAINT "feriados_owner_id_fkey" FOREIGN KEY ("owner_id") REFERENCES "auth"."users"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."feriados"
- ADD CONSTRAINT "feriados_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."module_features"
- ADD CONSTRAINT "module_features_feature_id_fkey" FOREIGN KEY ("feature_id") REFERENCES "public"."features"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."module_features"
- ADD CONSTRAINT "module_features_module_id_fkey" FOREIGN KEY ("module_id") REFERENCES "public"."modules"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patient_group_patient"
- ADD CONSTRAINT "patient_group_patient_patient_id_fkey" FOREIGN KEY ("patient_id") REFERENCES "public"."patients"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patient_group_patient"
- ADD CONSTRAINT "patient_group_patient_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patient_groups"
- ADD CONSTRAINT "patient_groups_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patient_intake_requests"
- ADD CONSTRAINT "patient_intake_requests_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patient_invites"
- ADD CONSTRAINT "patient_invites_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patient_patient_tag"
- ADD CONSTRAINT "patient_patient_tag_tag_id_fkey" FOREIGN KEY ("tag_id") REFERENCES "public"."patient_tags"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patient_patient_tag"
- ADD CONSTRAINT "patient_patient_tag_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patient_tags"
- ADD CONSTRAINT "patient_tags_tenant_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patients"
- ADD CONSTRAINT "patients_responsible_member_id_fkey" FOREIGN KEY ("responsible_member_id") REFERENCES "public"."tenant_members"("id") ON DELETE RESTRICT;
-
-
-
-ALTER TABLE ONLY "public"."patients"
- ADD CONSTRAINT "patients_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patients"
- ADD CONSTRAINT "patients_therapist_member_id_fkey" FOREIGN KEY ("therapist_member_id") REFERENCES "public"."tenant_members"("id");
-
-
-
-ALTER TABLE ONLY "public"."patients"
- ADD CONSTRAINT "patients_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "auth"."users"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."plan_features"
- ADD CONSTRAINT "plan_features_feature_id_fkey" FOREIGN KEY ("feature_id") REFERENCES "public"."features"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."plan_features"
- ADD CONSTRAINT "plan_features_plan_id_fkey" FOREIGN KEY ("plan_id") REFERENCES "public"."plans"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."plan_prices"
- ADD CONSTRAINT "plan_prices_plan_id_fkey" FOREIGN KEY ("plan_id") REFERENCES "public"."plans"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."plan_public_bullets"
- ADD CONSTRAINT "plan_public_bullets_plan_id_fkey" FOREIGN KEY ("plan_id") REFERENCES "public"."plans"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."plan_public"
- ADD CONSTRAINT "plan_public_plan_id_fkey" FOREIGN KEY ("plan_id") REFERENCES "public"."plans"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patient_patient_tag"
- ADD CONSTRAINT "ppt_patient_fk" FOREIGN KEY ("patient_id") REFERENCES "public"."patients"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."patient_patient_tag"
- ADD CONSTRAINT "ppt_tag_fk" FOREIGN KEY ("tag_id") REFERENCES "public"."patient_tags"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."profiles"
- ADD CONSTRAINT "profiles_id_fkey" FOREIGN KEY ("id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."recurrence_exceptions"
- ADD CONSTRAINT "recurrence_exceptions_agenda_evento_id_fkey" FOREIGN KEY ("agenda_evento_id") REFERENCES "public"."agenda_eventos"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."recurrence_exceptions"
- ADD CONSTRAINT "recurrence_exceptions_recurrence_id_fkey" FOREIGN KEY ("recurrence_id") REFERENCES "public"."recurrence_rules"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."saas_admins"
- ADD CONSTRAINT "saas_admins_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."saas_doc_votos"
- ADD CONSTRAINT "saas_doc_votos_doc_id_fkey" FOREIGN KEY ("doc_id") REFERENCES "public"."saas_docs"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."saas_doc_votos"
- ADD CONSTRAINT "saas_doc_votos_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."saas_faq_itens"
- ADD CONSTRAINT "saas_faq_itens_doc_id_fkey" FOREIGN KEY ("doc_id") REFERENCES "public"."saas_docs"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."subscription_intents_personal"
- ADD CONSTRAINT "sint_personal_subscription_id_fkey" FOREIGN KEY ("subscription_id") REFERENCES "public"."subscriptions"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."subscription_intents_tenant"
- ADD CONSTRAINT "sint_tenant_subscription_id_fkey" FOREIGN KEY ("subscription_id") REFERENCES "public"."subscriptions"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."subscription_events"
- ADD CONSTRAINT "subscription_events_subscription_id_fkey" FOREIGN KEY ("subscription_id") REFERENCES "public"."subscriptions"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."subscription_intents_personal"
- ADD CONSTRAINT "subscription_intents_personal_plan_id_fkey" FOREIGN KEY ("plan_id") REFERENCES "public"."plans"("id") ON DELETE RESTRICT;
-
-
-
-ALTER TABLE ONLY "public"."subscription_intents_tenant"
- ADD CONSTRAINT "subscription_intents_tenant_plan_id_fkey" FOREIGN KEY ("plan_id") REFERENCES "public"."plans"("id") ON DELETE RESTRICT;
-
-
-
-ALTER TABLE ONLY "public"."subscription_intents_legacy"
- ADD CONSTRAINT "subscription_intents_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "auth"."users"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."subscriptions"
- ADD CONSTRAINT "subscriptions_owner_id_fkey" FOREIGN KEY ("user_id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."subscriptions"
- ADD CONSTRAINT "subscriptions_plan_id_fkey" FOREIGN KEY ("plan_id") REFERENCES "public"."plans"("id") ON DELETE RESTRICT;
-
-
-
-ALTER TABLE ONLY "public"."tenant_features"
- ADD CONSTRAINT "tenant_features_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."tenant_invites"
- ADD CONSTRAINT "tenant_invites_accepted_by_fkey" FOREIGN KEY ("accepted_by") REFERENCES "auth"."users"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."tenant_invites"
- ADD CONSTRAINT "tenant_invites_invited_by_fkey" FOREIGN KEY ("invited_by") REFERENCES "auth"."users"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."tenant_invites"
- ADD CONSTRAINT "tenant_invites_revoked_by_fkey" FOREIGN KEY ("revoked_by") REFERENCES "auth"."users"("id") ON DELETE SET NULL;
-
-
-
-ALTER TABLE ONLY "public"."tenant_invites"
- ADD CONSTRAINT "tenant_invites_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."tenant_members"
- ADD CONSTRAINT "tenant_members_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."tenant_members"
- ADD CONSTRAINT "tenant_members_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."tenant_modules"
- ADD CONSTRAINT "tenant_modules_module_id_fkey" FOREIGN KEY ("module_id") REFERENCES "public"."modules"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."tenant_modules"
- ADD CONSTRAINT "tenant_modules_owner_id_fkey" FOREIGN KEY ("owner_id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE ONLY "public"."user_settings"
- ADD CONSTRAINT "user_settings_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "auth"."users"("id") ON DELETE CASCADE;
-
-
-
-ALTER TABLE "public"."agenda_bloqueios" ENABLE ROW LEVEL SECURITY;
-
-
-ALTER TABLE "public"."agenda_configuracoes" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "agenda_configuracoes_clinic_read" ON "public"."agenda_configuracoes" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.view'::"text")));
-
-
-
-CREATE POLICY "agenda_configuracoes_clinic_write" ON "public"."agenda_configuracoes" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text")));
-
-
-
-CREATE POLICY "agenda_configuracoes_owner" ON "public"."agenda_configuracoes" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-ALTER TABLE "public"."agenda_eventos" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "agenda_eventos_delete" ON "public"."agenda_eventos" FOR DELETE USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.delete'::"text")));
-
-
-
-CREATE POLICY "agenda_eventos_insert" ON "public"."agenda_eventos" FOR INSERT WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.create'::"text")));
-
-
-
-CREATE POLICY "agenda_eventos_owner_all" ON "public"."agenda_eventos" TO "authenticated" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "agenda_eventos_select" ON "public"."agenda_eventos" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.view'::"text")));
-
-
-
-CREATE POLICY "agenda_eventos_update" ON "public"."agenda_eventos" FOR UPDATE USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text")));
-
-
-
-ALTER TABLE "public"."agenda_excecoes" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "agenda_excecoes_owner" ON "public"."agenda_excecoes" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "agenda_excecoes_select" ON "public"."agenda_excecoes" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.view'::"text")));
-
-
-
-CREATE POLICY "agenda_excecoes_write" ON "public"."agenda_excecoes" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text")));
-
-
-
-ALTER TABLE "public"."agenda_online_slots" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "agenda_online_slots_owner" ON "public"."agenda_online_slots" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "agenda_online_slots_select" ON "public"."agenda_online_slots" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.view'::"text")));
-
-
-
-CREATE POLICY "agenda_online_slots_write" ON "public"."agenda_online_slots" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text")));
-
-
-
-ALTER TABLE "public"."agenda_regras_semanais" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "agenda_regras_semanais_owner" ON "public"."agenda_regras_semanais" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "agenda_regras_semanais_select" ON "public"."agenda_regras_semanais" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.view'::"text")));
-
-
-
-CREATE POLICY "agenda_regras_semanais_write" ON "public"."agenda_regras_semanais" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text")));
-
-
-
-ALTER TABLE "public"."agenda_slots_bloqueados_semanais" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "agenda_slots_bloqueados_semanais_select" ON "public"."agenda_slots_bloqueados_semanais" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.view'::"text")));
-
-
-
-CREATE POLICY "agenda_slots_bloqueados_semanais_write" ON "public"."agenda_slots_bloqueados_semanais" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text")));
-
-
-
-ALTER TABLE "public"."agenda_slots_regras" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "agenda_slots_regras_select" ON "public"."agenda_slots_regras" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.view'::"text")));
-
-
-
-CREATE POLICY "agenda_slots_regras_write" ON "public"."agenda_slots_regras" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text")));
-
-
-
-CREATE POLICY "agendador_cfg_public_read" ON "public"."agendador_configuracoes" FOR SELECT TO "anon" USING ((("ativo" = true) AND ("link_slug" IS NOT NULL)));
-
-
-
-CREATE POLICY "agendador_cfg_select" ON "public"."agendador_configuracoes" FOR SELECT USING (("auth"."uid"() = "owner_id"));
-
-
-
-CREATE POLICY "agendador_cfg_write" ON "public"."agendador_configuracoes" USING (("auth"."uid"() = "owner_id")) WITH CHECK (("auth"."uid"() = "owner_id"));
-
-
-
-ALTER TABLE "public"."agendador_configuracoes" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "agendador_sol_owner_select" ON "public"."agendador_solicitacoes" FOR SELECT USING (("auth"."uid"() = "owner_id"));
-
-
-
-CREATE POLICY "agendador_sol_owner_write" ON "public"."agendador_solicitacoes" USING (("auth"."uid"() = "owner_id")) WITH CHECK (("auth"."uid"() = "owner_id"));
-
-
-
-CREATE POLICY "agendador_sol_patient_read" ON "public"."agendador_solicitacoes" FOR SELECT TO "authenticated" USING ((("auth"."uid"() = "user_id") OR ("auth"."uid"() = "owner_id")));
-
-
-
-CREATE POLICY "agendador_sol_public_insert" ON "public"."agendador_solicitacoes" FOR INSERT TO "anon" WITH CHECK (true);
-
-
-
-ALTER TABLE "public"."agendador_solicitacoes" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "bloqueios_delete" ON "public"."agenda_bloqueios" FOR DELETE TO "authenticated" USING (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "bloqueios_insert" ON "public"."agenda_bloqueios" FOR INSERT TO "authenticated" WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "bloqueios_select_clinic" ON "public"."agenda_bloqueios" FOR SELECT TO "authenticated" USING (("tenant_id" IN ( SELECT "tenant_members"."tenant_id"
- FROM "public"."tenant_members"
- WHERE (("tenant_members"."user_id" = "auth"."uid"()) AND ("tenant_members"."role" = ANY (ARRAY['admin'::"text", 'clinic_admin'::"text", 'tenant_admin'::"text", 'secretary'::"text"]))))));
-
-
-
-CREATE POLICY "bloqueios_select_own" ON "public"."agenda_bloqueios" FOR SELECT TO "authenticated" USING (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "bloqueios_update" ON "public"."agenda_bloqueios" FOR UPDATE TO "authenticated" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "clinic_admin_read_all_docs" ON "public"."saas_docs" FOR SELECT TO "authenticated" USING ((("ativo" = true) AND (EXISTS ( SELECT 1
- FROM "public"."profiles"
- WHERE (("profiles"."id" = "auth"."uid"()) AND ("profiles"."role" = ANY (ARRAY['clinic_admin'::"text", 'tenant_admin'::"text"])))))));
-
-
-
-ALTER TABLE "public"."commitment_time_logs" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "ctl_delete_for_active_member" ON "public"."commitment_time_logs" FOR DELETE TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "commitment_time_logs"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "ctl_insert_for_active_member" ON "public"."commitment_time_logs" FOR INSERT TO "authenticated" WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "commitment_time_logs"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "ctl_select_for_active_member" ON "public"."commitment_time_logs" FOR SELECT TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "commitment_time_logs"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "ctl_update_for_active_member" ON "public"."commitment_time_logs" FOR UPDATE TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "commitment_time_logs"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text"))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "commitment_time_logs"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "dc_delete_custom_for_active_member" ON "public"."determined_commitments" FOR DELETE TO "authenticated" USING ((("is_native" = false) AND (EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "determined_commitments"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text"))))));
-
-
-
-CREATE POLICY "dc_insert_for_active_member" ON "public"."determined_commitments" FOR INSERT TO "authenticated" WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "determined_commitments"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "dc_select_for_active_member" ON "public"."determined_commitments" FOR SELECT TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "determined_commitments"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "dc_update_for_active_member" ON "public"."determined_commitments" FOR UPDATE TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "determined_commitments"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text"))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "determined_commitments"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "dcf_delete_for_active_member" ON "public"."determined_commitment_fields" FOR DELETE TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "determined_commitment_fields"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "dcf_insert_for_active_member" ON "public"."determined_commitment_fields" FOR INSERT TO "authenticated" WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "determined_commitment_fields"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "dcf_select_for_active_member" ON "public"."determined_commitment_fields" FOR SELECT TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "determined_commitment_fields"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "dcf_update_for_active_member" ON "public"."determined_commitment_fields" FOR UPDATE TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "determined_commitment_fields"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text"))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "determined_commitment_fields"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text")))));
-
-
-
-CREATE POLICY "delete own" ON "public"."agenda_bloqueios" FOR DELETE USING (("owner_id" = "auth"."uid"()));
-
-
-
-ALTER TABLE "public"."determined_commitment_fields" ENABLE ROW LEVEL SECURITY;
-
-
-ALTER TABLE "public"."determined_commitments" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "dev_creds_select_saas_admin" ON "public"."dev_user_credentials" FOR SELECT TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."profiles" "p"
- WHERE (("p"."id" = "auth"."uid"()) AND ("p"."role" = 'saas_admin'::"text")))));
-
-
-
-CREATE POLICY "dev_creds_write_saas_admin" ON "public"."dev_user_credentials" TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."profiles" "p"
- WHERE (("p"."id" = "auth"."uid"()) AND ("p"."role" = 'saas_admin'::"text"))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."profiles" "p"
- WHERE (("p"."id" = "auth"."uid"()) AND ("p"."role" = 'saas_admin'::"text")))));
-
-
-
-ALTER TABLE "public"."dev_user_credentials" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "ent_inv_select_own" ON "public"."entitlements_invalidation" FOR SELECT USING ((("owner_id" = "auth"."uid"()) OR "public"."is_saas_admin"()));
-
-
-
-CREATE POLICY "ent_inv_update_saas" ON "public"."entitlements_invalidation" FOR UPDATE USING ("public"."is_saas_admin"()) WITH CHECK ("public"."is_saas_admin"());
-
-
-
-CREATE POLICY "ent_inv_write_saas" ON "public"."entitlements_invalidation" FOR INSERT WITH CHECK ("public"."is_saas_admin"());
-
-
-
-ALTER TABLE "public"."entitlements_invalidation" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "faq_admin_write" ON "public"."saas_faq" TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."profiles"
- WHERE (("profiles"."id" = "auth"."uid"()) AND ("profiles"."role" = ANY (ARRAY['saas_admin'::"text", 'tenant_admin'::"text", 'clinic_admin'::"text"]))))));
-
-
-
-CREATE POLICY "faq_auth_read" ON "public"."saas_faq" FOR SELECT TO "authenticated" USING (("ativo" = true));
-
-
-
-CREATE POLICY "faq_itens_admin_write" ON "public"."saas_faq_itens" TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."profiles"
- WHERE (("profiles"."id" = "auth"."uid"()) AND ("profiles"."role" = ANY (ARRAY['saas_admin'::"text", 'tenant_admin'::"text", 'clinic_admin'::"text"]))))));
-
-
-
-CREATE POLICY "faq_itens_auth_read" ON "public"."saas_faq_itens" FOR SELECT TO "authenticated" USING ((("ativo" = true) AND (EXISTS ( SELECT 1
- FROM "public"."saas_docs" "d"
- WHERE (("d"."id" = "saas_faq_itens"."doc_id") AND ("d"."ativo" = true))))));
-
-
-
-CREATE POLICY "faq_public_read" ON "public"."saas_faq" FOR SELECT USING ((("publico" = true) AND ("ativo" = true)));
-
-
-
-ALTER TABLE "public"."features" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "features_read_authenticated" ON "public"."features" FOR SELECT TO "authenticated" USING (true);
-
-
-
-CREATE POLICY "features_write_saas_admin" ON "public"."features" TO "authenticated" USING ("public"."is_saas_admin"()) WITH CHECK ("public"."is_saas_admin"());
-
-
-
-ALTER TABLE "public"."feriados" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "feriados_delete" ON "public"."feriados" FOR DELETE USING (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "feriados_global_select" ON "public"."feriados" FOR SELECT USING (("tenant_id" IS NULL));
-
-
-
-CREATE POLICY "feriados_insert" ON "public"."feriados" FOR INSERT WITH CHECK (("tenant_id" IN ( SELECT "tenant_members"."tenant_id"
- FROM "public"."tenant_members"
- WHERE ("tenant_members"."user_id" = "auth"."uid"()))));
-
-
-
-CREATE POLICY "feriados_saas_delete" ON "public"."feriados" FOR DELETE USING ((EXISTS ( SELECT 1
- FROM "public"."saas_admins"
- WHERE ("saas_admins"."user_id" = "auth"."uid"()))));
-
-
-
-CREATE POLICY "feriados_saas_insert" ON "public"."feriados" FOR INSERT WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."saas_admins"
- WHERE ("saas_admins"."user_id" = "auth"."uid"()))));
-
-
-
-CREATE POLICY "feriados_saas_select" ON "public"."feriados" FOR SELECT USING ((EXISTS ( SELECT 1
- FROM "public"."saas_admins"
- WHERE ("saas_admins"."user_id" = "auth"."uid"()))));
-
-
-
-CREATE POLICY "feriados_select" ON "public"."feriados" FOR SELECT USING (("tenant_id" IN ( SELECT "tenant_members"."tenant_id"
- FROM "public"."tenant_members"
- WHERE ("tenant_members"."user_id" = "auth"."uid"()))));
-
-
-
-CREATE POLICY "insert own" ON "public"."agenda_bloqueios" FOR INSERT WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-ALTER TABLE "public"."module_features" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "module_features_read_authenticated" ON "public"."module_features" FOR SELECT TO "authenticated" USING (true);
-
-
-
-CREATE POLICY "module_features_write_saas_admin" ON "public"."module_features" TO "authenticated" USING ("public"."is_saas_admin"()) WITH CHECK ("public"."is_saas_admin"());
-
-
-
-ALTER TABLE "public"."modules" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "modules_read_authenticated" ON "public"."modules" FOR SELECT TO "authenticated" USING (true);
-
-
-
-CREATE POLICY "modules_write_saas_admin" ON "public"."modules" TO "authenticated" USING ("public"."is_saas_admin"()) WITH CHECK ("public"."is_saas_admin"());
-
-
-
-ALTER TABLE "public"."owner_users" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "owner_users: user can read own links" ON "public"."owner_users" FOR SELECT TO "authenticated" USING (("user_id" = "auth"."uid"()));
-
-
-
-ALTER TABLE "public"."patient_group_patient" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "patient_group_patient_owner_all" ON "public"."patient_group_patient" TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."patients" "p"
- WHERE (("p"."id" = "patient_group_patient"."patient_id") AND ("p"."owner_id" = "auth"."uid"()))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."patients" "p"
- WHERE (("p"."id" = "patient_group_patient"."patient_id") AND ("p"."owner_id" = "auth"."uid"())))));
-
-
-
-CREATE POLICY "patient_group_patient_select" ON "public"."patient_group_patient" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.view'::"text")));
-
-
-
-CREATE POLICY "patient_group_patient_write" ON "public"."patient_group_patient" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text")));
-
-
-
-ALTER TABLE "public"."patient_groups" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "patient_groups_owner_all" ON "public"."patient_groups" TO "authenticated" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "patient_groups_select" ON "public"."patient_groups" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.view'::"text")));
-
-
-
-CREATE POLICY "patient_groups_write" ON "public"."patient_groups" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text")));
-
-
-
-ALTER TABLE "public"."patient_intake_requests" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "patient_intake_requests_owner_all" ON "public"."patient_intake_requests" TO "authenticated" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "patient_intake_requests_select" ON "public"."patient_intake_requests" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.view'::"text")));
-
-
-
-CREATE POLICY "patient_intake_requests_write" ON "public"."patient_intake_requests" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text")));
-
-
-
-ALTER TABLE "public"."patient_invites" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "patient_invites_owner_all" ON "public"."patient_invites" TO "authenticated" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "patient_invites_select" ON "public"."patient_invites" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.view'::"text")));
-
-
-
-CREATE POLICY "patient_invites_write" ON "public"."patient_invites" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text")));
-
-
-
-ALTER TABLE "public"."patient_patient_tag" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "patient_patient_tag_owner_all" ON "public"."patient_patient_tag" TO "authenticated" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "patient_patient_tag_select" ON "public"."patient_patient_tag" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.view'::"text")));
-
-
-
-CREATE POLICY "patient_patient_tag_write" ON "public"."patient_patient_tag" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text")));
-
-
-
-ALTER TABLE "public"."patient_tags" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "patient_tags_owner_all" ON "public"."patient_tags" TO "authenticated" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "patient_tags_select" ON "public"."patient_tags" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.view'::"text")));
-
-
-
-CREATE POLICY "patient_tags_write" ON "public"."patient_tags" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text")));
-
-
-
-ALTER TABLE "public"."patients" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "patients_delete" ON "public"."patients" FOR DELETE USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.delete'::"text")));
-
-
-
-CREATE POLICY "patients_insert" ON "public"."patients" FOR INSERT WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.create'::"text")));
-
-
-
-CREATE POLICY "patients_owner_all" ON "public"."patients" TO "authenticated" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "patients_select" ON "public"."patients" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.view'::"text")));
-
-
-
-CREATE POLICY "patients_update" ON "public"."patients" FOR UPDATE USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'patients.edit'::"text")));
-
-
-
-ALTER TABLE "public"."plan_features" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "plan_features_read_authenticated" ON "public"."plan_features" FOR SELECT TO "authenticated" USING (true);
-
-
-
-CREATE POLICY "plan_features_write_saas_admin" ON "public"."plan_features" TO "authenticated" USING ("public"."is_saas_admin"()) WITH CHECK ("public"."is_saas_admin"());
-
-
-
-ALTER TABLE "public"."plans" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "plans_read_authenticated" ON "public"."plans" FOR SELECT TO "authenticated" USING (true);
-
-
-
-CREATE POLICY "plans_write_saas_admin" ON "public"."plans" TO "authenticated" USING ("public"."is_saas_admin"()) WITH CHECK ("public"."is_saas_admin"());
-
-
-
-ALTER TABLE "public"."profiles" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "profiles_insert_own" ON "public"."profiles" FOR INSERT WITH CHECK (("id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "profiles_read_saas_admin" ON "public"."profiles" FOR SELECT USING ("public"."is_saas_admin"());
-
-
-
-CREATE POLICY "profiles_select_own" ON "public"."profiles" FOR SELECT USING (("id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "profiles_update_own" ON "public"."profiles" FOR UPDATE USING (("id" = "auth"."uid"())) WITH CHECK (("id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "read features (auth)" ON "public"."features" FOR SELECT TO "authenticated" USING (true);
-
-
-
-CREATE POLICY "read plan_features (auth)" ON "public"."plan_features" FOR SELECT TO "authenticated" USING (true);
-
-
-
-CREATE POLICY "read plans (auth)" ON "public"."plans" FOR SELECT TO "authenticated" USING (true);
-
-
-
-ALTER TABLE "public"."recurrence_exceptions" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "recurrence_exceptions_tenant" ON "public"."recurrence_exceptions" TO "authenticated" USING (("tenant_id" IN ( SELECT "tenant_members"."tenant_id"
- FROM "public"."tenant_members"
- WHERE ("tenant_members"."user_id" = "auth"."uid"())))) WITH CHECK (("tenant_id" IN ( SELECT "tenant_members"."tenant_id"
- FROM "public"."tenant_members"
- WHERE ("tenant_members"."user_id" = "auth"."uid"()))));
-
-
-
-ALTER TABLE "public"."recurrence_rules" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "recurrence_rules_clinic_read" ON "public"."recurrence_rules" FOR SELECT USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.view'::"text")));
-
-
-
-CREATE POLICY "recurrence_rules_clinic_write" ON "public"."recurrence_rules" USING (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text"))) WITH CHECK (("public"."is_clinic_tenant"("tenant_id") AND "public"."is_tenant_member"("tenant_id") AND "public"."tenant_has_feature"("tenant_id", 'agenda.edit'::"text")));
-
-
-
-CREATE POLICY "recurrence_rules_owner" ON "public"."recurrence_rules" TO "authenticated" USING (("owner_id" = "auth"."uid"())) WITH CHECK (("owner_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "saas_admin can read subscription_intents" ON "public"."subscription_intents_legacy" FOR SELECT TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."saas_admins" "a"
- WHERE ("a"."user_id" = "auth"."uid"()))));
-
-
-
-CREATE POLICY "saas_admin can update subscription_intents" ON "public"."subscription_intents_legacy" FOR UPDATE TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."saas_admins" "a"
- WHERE ("a"."user_id" = "auth"."uid"())))) WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."saas_admins" "a"
- WHERE ("a"."user_id" = "auth"."uid"()))));
-
-
-
-CREATE POLICY "saas_admin_full_access" ON "public"."saas_docs" TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."saas_admins"
- WHERE ("saas_admins"."user_id" = "auth"."uid"())))) WITH CHECK ((EXISTS ( SELECT 1
- FROM "public"."saas_admins"
- WHERE ("saas_admins"."user_id" = "auth"."uid"()))));
-
-
-
-ALTER TABLE "public"."saas_admins" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "saas_admins_select_self" ON "public"."saas_admins" FOR SELECT TO "authenticated" USING (("user_id" = "auth"."uid"()));
-
-
-
-ALTER TABLE "public"."saas_doc_votos" ENABLE ROW LEVEL SECURITY;
-
-
-ALTER TABLE "public"."saas_docs" ENABLE ROW LEVEL SECURITY;
-
-
-ALTER TABLE "public"."saas_faq" ENABLE ROW LEVEL SECURITY;
-
-
-ALTER TABLE "public"."saas_faq_itens" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "select own" ON "public"."agenda_bloqueios" FOR SELECT USING (("owner_id" = "auth"."uid"()));
-
-
-
-ALTER TABLE "public"."subscription_events" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "subscription_events_read_saas" ON "public"."subscription_events" FOR SELECT USING ("public"."is_saas_admin"());
-
-
-
-CREATE POLICY "subscription_events_write_saas" ON "public"."subscription_events" FOR INSERT WITH CHECK ("public"."is_saas_admin"());
-
-
-
-CREATE POLICY "subscription_intents_insert_own" ON "public"."subscription_intents_legacy" FOR INSERT TO "authenticated" WITH CHECK (("user_id" = "auth"."uid"()));
-
-
-
-ALTER TABLE "public"."subscription_intents_legacy" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "subscription_intents_select_own" ON "public"."subscription_intents_legacy" FOR SELECT TO "authenticated" USING (("user_id" = "auth"."uid"()));
-
-
-
-ALTER TABLE "public"."subscriptions" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "subscriptions read own" ON "public"."subscriptions" FOR SELECT TO "authenticated" USING (("user_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "subscriptions: read if linked owner_users" ON "public"."subscriptions" FOR SELECT TO "authenticated" USING ((EXISTS ( SELECT 1
- FROM "public"."owner_users" "ou"
- WHERE (("ou"."owner_id" = "subscriptions"."user_id") AND ("ou"."user_id" = "auth"."uid"())))));
-
-
-
-CREATE POLICY "subscriptions_insert_own_personal" ON "public"."subscriptions" FOR INSERT TO "authenticated" WITH CHECK ((("user_id" = "auth"."uid"()) AND ("tenant_id" IS NULL)));
-
-
-
-CREATE POLICY "subscriptions_no_direct_update" ON "public"."subscriptions" FOR UPDATE TO "authenticated" USING (false) WITH CHECK (false);
-
-
-
-CREATE POLICY "subscriptions_read_own" ON "public"."subscriptions" FOR SELECT TO "authenticated" USING ((("user_id" = "auth"."uid"()) OR "public"."is_saas_admin"()));
-
-
-
-CREATE POLICY "subscriptions_select_for_tenant_members" ON "public"."subscriptions" FOR SELECT TO "authenticated" USING ((("tenant_id" IS NOT NULL) AND (EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "subscriptions"."tenant_id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text"))))));
-
-
-
-CREATE POLICY "subscriptions_select_own_personal" ON "public"."subscriptions" FOR SELECT TO "authenticated" USING ((("user_id" = "auth"."uid"()) AND ("tenant_id" IS NULL)));
-
-
-
-CREATE POLICY "subscriptions_update_only_saas_admin" ON "public"."subscriptions" FOR UPDATE TO "authenticated" USING ("public"."is_saas_admin"()) WITH CHECK ("public"."is_saas_admin"());
-
-
-
-ALTER TABLE "public"."tenant_members" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "tenant_members_write_saas" ON "public"."tenant_members" TO "authenticated" USING ("public"."is_saas_admin"()) WITH CHECK ("public"."is_saas_admin"());
-
-
-
-ALTER TABLE "public"."tenant_modules" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "tenant_modules_read_own" ON "public"."tenant_modules" FOR SELECT TO "authenticated" USING ((("owner_id" = "auth"."uid"()) OR "public"."is_saas_admin"()));
-
-
-
-CREATE POLICY "tenant_modules_write_saas" ON "public"."tenant_modules" TO "authenticated" USING ("public"."is_saas_admin"()) WITH CHECK ("public"."is_saas_admin"());
-
-
-
-ALTER TABLE "public"."tenants" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "tenants_read_members" ON "public"."tenants" FOR SELECT TO "authenticated" USING (("public"."is_saas_admin"() OR (EXISTS ( SELECT 1
- FROM "public"."tenant_members" "tm"
- WHERE (("tm"."tenant_id" = "tenants"."id") AND ("tm"."user_id" = "auth"."uid"()) AND ("tm"."status" = 'active'::"text"))))));
-
-
-
-CREATE POLICY "tenants_write_saas" ON "public"."tenants" TO "authenticated" USING ("public"."is_saas_admin"()) WITH CHECK ("public"."is_saas_admin"());
-
-
-
-CREATE POLICY "tm_select_admin_all_members" ON "public"."tenant_members" FOR SELECT TO "authenticated" USING ("public"."is_tenant_admin"("tenant_id"));
-
-
-
-CREATE POLICY "tm_select_own_membership" ON "public"."tenant_members" FOR SELECT TO "authenticated" USING (("user_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "update own" ON "public"."agenda_bloqueios" FOR UPDATE USING (("owner_id" = "auth"."uid"()));
-
-
-
-ALTER TABLE "public"."user_settings" ENABLE ROW LEVEL SECURITY;
-
-
-CREATE POLICY "user_settings_insert_own" ON "public"."user_settings" FOR INSERT WITH CHECK (("user_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "user_settings_select_own" ON "public"."user_settings" FOR SELECT USING (("user_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "user_settings_update_own" ON "public"."user_settings" FOR UPDATE USING (("user_id" = "auth"."uid"())) WITH CHECK (("user_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "users_read_usuario_docs" ON "public"."saas_docs" FOR SELECT TO "authenticated" USING ((("ativo" = true) AND ("tipo_acesso" = 'usuario'::"text")));
-
-
-
-CREATE POLICY "votos_select_own" ON "public"."saas_doc_votos" FOR SELECT TO "authenticated" USING (("user_id" = "auth"."uid"()));
-
-
-
-CREATE POLICY "votos_upsert_own" ON "public"."saas_doc_votos" TO "authenticated" USING (("user_id" = "auth"."uid"())) WITH CHECK (("user_id" = "auth"."uid"()));
-
-
-
-
-
-ALTER PUBLICATION "supabase_realtime" OWNER TO "postgres";
-
-
-
-
-
-GRANT USAGE ON SCHEMA "public" TO "postgres";
-GRANT USAGE ON SCHEMA "public" TO "anon";
-GRANT USAGE ON SCHEMA "public" TO "authenticated";
-GRANT USAGE ON SCHEMA "public" TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citextin"("cstring") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citextin"("cstring") TO "anon";
-GRANT ALL ON FUNCTION "public"."citextin"("cstring") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citextin"("cstring") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citextout"("public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citextout"("public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citextout"("public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citextout"("public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citextrecv"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citextrecv"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."citextrecv"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citextrecv"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citextsend"("public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citextsend"("public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citextsend"("public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citextsend"("public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey16_in"("cstring") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey16_in"("cstring") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey16_in"("cstring") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey16_in"("cstring") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey16_out"("public"."gbtreekey16") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey16_out"("public"."gbtreekey16") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey16_out"("public"."gbtreekey16") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey16_out"("public"."gbtreekey16") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey2_in"("cstring") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey2_in"("cstring") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey2_in"("cstring") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey2_in"("cstring") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey2_out"("public"."gbtreekey2") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey2_out"("public"."gbtreekey2") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey2_out"("public"."gbtreekey2") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey2_out"("public"."gbtreekey2") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey32_in"("cstring") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey32_in"("cstring") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey32_in"("cstring") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey32_in"("cstring") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey32_out"("public"."gbtreekey32") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey32_out"("public"."gbtreekey32") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey32_out"("public"."gbtreekey32") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey32_out"("public"."gbtreekey32") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey4_in"("cstring") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey4_in"("cstring") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey4_in"("cstring") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey4_in"("cstring") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey4_out"("public"."gbtreekey4") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey4_out"("public"."gbtreekey4") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey4_out"("public"."gbtreekey4") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey4_out"("public"."gbtreekey4") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey8_in"("cstring") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey8_in"("cstring") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey8_in"("cstring") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey8_in"("cstring") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey8_out"("public"."gbtreekey8") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey8_out"("public"."gbtreekey8") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey8_out"("public"."gbtreekey8") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey8_out"("public"."gbtreekey8") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey_var_in"("cstring") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey_var_in"("cstring") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey_var_in"("cstring") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey_var_in"("cstring") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbtreekey_var_out"("public"."gbtreekey_var") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbtreekey_var_out"("public"."gbtreekey_var") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbtreekey_var_out"("public"."gbtreekey_var") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbtreekey_var_out"("public"."gbtreekey_var") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_in"("cstring") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_in"("cstring") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_in"("cstring") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_in"("cstring") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_out"("public"."gtrgm") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_out"("public"."gtrgm") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_out"("public"."gtrgm") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_out"("public"."gtrgm") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext"(boolean) TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext"(boolean) TO "anon";
-GRANT ALL ON FUNCTION "public"."citext"(boolean) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext"(boolean) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext"(character) TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext"(character) TO "anon";
-GRANT ALL ON FUNCTION "public"."citext"(character) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext"(character) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext"("inet") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext"("inet") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext"("inet") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext"("inet") TO "service_role";
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-GRANT ALL ON FUNCTION "public"."__rls_ping"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."__rls_ping"() TO "anon";
-GRANT ALL ON FUNCTION "public"."__rls_ping"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."__rls_ping"() TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."subscriptions" TO "postgres";
-GRANT ALL ON TABLE "public"."subscriptions" TO "anon";
-GRANT ALL ON TABLE "public"."subscriptions" TO "authenticated";
-GRANT ALL ON TABLE "public"."subscriptions" TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."activate_subscription_from_intent"("p_intent_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."activate_subscription_from_intent"("p_intent_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."activate_subscription_from_intent"("p_intent_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."activate_subscription_from_intent"("p_intent_id" "uuid") TO "service_role";
-
-
-
-REVOKE ALL ON FUNCTION "public"."admin_fix_plan_target"("p_plan_key" "text", "p_new_target" "text") FROM PUBLIC;
-GRANT ALL ON FUNCTION "public"."admin_fix_plan_target"("p_plan_key" "text", "p_new_target" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."admin_fix_plan_target"("p_plan_key" "text", "p_new_target" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."admin_fix_plan_target"("p_plan_key" "text", "p_new_target" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."admin_fix_plan_target"("p_plan_key" "text", "p_new_target" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."agenda_cfg_sync"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."agenda_cfg_sync"() TO "anon";
-GRANT ALL ON FUNCTION "public"."agenda_cfg_sync"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."agenda_cfg_sync"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."agendador_dias_disponiveis"("p_slug" "text", "p_ano" integer, "p_mes" integer) TO "postgres";
-GRANT ALL ON FUNCTION "public"."agendador_dias_disponiveis"("p_slug" "text", "p_ano" integer, "p_mes" integer) TO "anon";
-GRANT ALL ON FUNCTION "public"."agendador_dias_disponiveis"("p_slug" "text", "p_ano" integer, "p_mes" integer) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."agendador_dias_disponiveis"("p_slug" "text", "p_ano" integer, "p_mes" integer) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."agendador_gerar_slug"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."agendador_gerar_slug"() TO "anon";
-GRANT ALL ON FUNCTION "public"."agendador_gerar_slug"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."agendador_gerar_slug"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."agendador_slots_disponiveis"("p_slug" "text", "p_data" "date") TO "postgres";
-GRANT ALL ON FUNCTION "public"."agendador_slots_disponiveis"("p_slug" "text", "p_data" "date") TO "anon";
-GRANT ALL ON FUNCTION "public"."agendador_slots_disponiveis"("p_slug" "text", "p_data" "date") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."agendador_slots_disponiveis"("p_slug" "text", "p_data" "date") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."cancel_recurrence_from"("p_recurrence_id" "uuid", "p_from_date" "date") TO "postgres";
-GRANT ALL ON FUNCTION "public"."cancel_recurrence_from"("p_recurrence_id" "uuid", "p_from_date" "date") TO "anon";
-GRANT ALL ON FUNCTION "public"."cancel_recurrence_from"("p_recurrence_id" "uuid", "p_from_date" "date") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."cancel_recurrence_from"("p_recurrence_id" "uuid", "p_from_date" "date") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."cancel_subscription"("p_subscription_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."cancel_subscription"("p_subscription_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."cancel_subscription"("p_subscription_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."cancel_subscription"("p_subscription_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."cancelar_eventos_serie"("p_serie_id" "uuid", "p_a_partir_de" timestamp with time zone) TO "postgres";
-GRANT ALL ON FUNCTION "public"."cancelar_eventos_serie"("p_serie_id" "uuid", "p_a_partir_de" timestamp with time zone) TO "anon";
-GRANT ALL ON FUNCTION "public"."cancelar_eventos_serie"("p_serie_id" "uuid", "p_a_partir_de" timestamp with time zone) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."cancelar_eventos_serie"("p_serie_id" "uuid", "p_a_partir_de" timestamp with time zone) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."cash_dist"("money", "money") TO "postgres";
-GRANT ALL ON FUNCTION "public"."cash_dist"("money", "money") TO "anon";
-GRANT ALL ON FUNCTION "public"."cash_dist"("money", "money") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."cash_dist"("money", "money") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."change_subscription_plan"("p_subscription_id" "uuid", "p_new_plan_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."change_subscription_plan"("p_subscription_id" "uuid", "p_new_plan_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."change_subscription_plan"("p_subscription_id" "uuid", "p_new_plan_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."change_subscription_plan"("p_subscription_id" "uuid", "p_new_plan_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_cmp"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_cmp"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_cmp"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_cmp"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_eq"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_eq"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_eq"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_eq"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_ge"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_ge"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_ge"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_ge"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_gt"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_gt"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_gt"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_gt"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_hash"("public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_hash"("public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_hash"("public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_hash"("public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_hash_extended"("public"."citext", bigint) TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_hash_extended"("public"."citext", bigint) TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_hash_extended"("public"."citext", bigint) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_hash_extended"("public"."citext", bigint) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_larger"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_larger"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_larger"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_larger"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_le"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_le"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_le"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_le"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_lt"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_lt"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_lt"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_lt"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_ne"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_ne"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_ne"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_ne"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_pattern_cmp"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_pattern_cmp"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_pattern_cmp"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_pattern_cmp"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_pattern_ge"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_pattern_ge"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_pattern_ge"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_pattern_ge"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_pattern_gt"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_pattern_gt"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_pattern_gt"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_pattern_gt"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_pattern_le"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_pattern_le"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_pattern_le"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_pattern_le"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_pattern_lt"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_pattern_lt"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_pattern_lt"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_pattern_lt"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."citext_smaller"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."citext_smaller"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."citext_smaller"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."citext_smaller"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."create_clinic_tenant"("p_name" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."create_clinic_tenant"("p_name" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."create_clinic_tenant"("p_name" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."create_clinic_tenant"("p_name" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."create_patient_intake_request"("p_token" "text", "p_name" "text", "p_email" "text", "p_phone" "text", "p_notes" "text", "p_consent" boolean) TO "postgres";
-GRANT ALL ON FUNCTION "public"."create_patient_intake_request"("p_token" "text", "p_name" "text", "p_email" "text", "p_phone" "text", "p_notes" "text", "p_consent" boolean) TO "anon";
-GRANT ALL ON FUNCTION "public"."create_patient_intake_request"("p_token" "text", "p_name" "text", "p_email" "text", "p_phone" "text", "p_notes" "text", "p_consent" boolean) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."create_patient_intake_request"("p_token" "text", "p_name" "text", "p_email" "text", "p_phone" "text", "p_notes" "text", "p_consent" boolean) TO "service_role";
-
-
-
-REVOKE ALL ON FUNCTION "public"."create_patient_intake_request_v2"("p_token" "text", "p_payload" "jsonb") FROM PUBLIC;
-GRANT ALL ON FUNCTION "public"."create_patient_intake_request_v2"("p_token" "text", "p_payload" "jsonb") TO "postgres";
-GRANT ALL ON FUNCTION "public"."create_patient_intake_request_v2"("p_token" "text", "p_payload" "jsonb") TO "anon";
-GRANT ALL ON FUNCTION "public"."create_patient_intake_request_v2"("p_token" "text", "p_payload" "jsonb") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."create_patient_intake_request_v2"("p_token" "text", "p_payload" "jsonb") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."current_member_id"("p_tenant_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."current_member_id"("p_tenant_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."current_member_id"("p_tenant_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."current_member_id"("p_tenant_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."current_member_role"("p_tenant_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."current_member_role"("p_tenant_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."current_member_role"("p_tenant_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."current_member_role"("p_tenant_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."date_dist"("date", "date") TO "postgres";
-GRANT ALL ON FUNCTION "public"."date_dist"("date", "date") TO "anon";
-GRANT ALL ON FUNCTION "public"."date_dist"("date", "date") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."date_dist"("date", "date") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."delete_commitment_full"("p_tenant_id" "uuid", "p_commitment_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."delete_commitment_full"("p_tenant_id" "uuid", "p_commitment_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."delete_commitment_full"("p_tenant_id" "uuid", "p_commitment_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."delete_determined_commitment"("p_tenant_id" "uuid", "p_commitment_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."delete_determined_commitment"("p_tenant_id" "uuid", "p_commitment_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."delete_determined_commitment"("p_tenant_id" "uuid", "p_commitment_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."delete_determined_commitment"("p_tenant_id" "uuid", "p_commitment_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."dev_list_auth_users"("p_limit" integer) TO "postgres";
-GRANT ALL ON FUNCTION "public"."dev_list_auth_users"("p_limit" integer) TO "anon";
-GRANT ALL ON FUNCTION "public"."dev_list_auth_users"("p_limit" integer) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."dev_list_auth_users"("p_limit" integer) TO "service_role";
-
-
-
-REVOKE ALL ON FUNCTION "public"."dev_list_custom_users"() FROM PUBLIC;
-GRANT ALL ON FUNCTION "public"."dev_list_custom_users"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."dev_list_custom_users"() TO "anon";
-GRANT ALL ON FUNCTION "public"."dev_list_custom_users"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."dev_list_custom_users"() TO "service_role";
-
-
-
-REVOKE ALL ON FUNCTION "public"."dev_list_intent_leads"() FROM PUBLIC;
-GRANT ALL ON FUNCTION "public"."dev_list_intent_leads"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."dev_list_intent_leads"() TO "anon";
-GRANT ALL ON FUNCTION "public"."dev_list_intent_leads"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."dev_list_intent_leads"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."dev_public_debug_snapshot"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."dev_public_debug_snapshot"() TO "anon";
-GRANT ALL ON FUNCTION "public"."dev_public_debug_snapshot"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."dev_public_debug_snapshot"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."ensure_personal_tenant"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."ensure_personal_tenant"() TO "anon";
-GRANT ALL ON FUNCTION "public"."ensure_personal_tenant"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."ensure_personal_tenant"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."ensure_personal_tenant_for_user"("p_user_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."ensure_personal_tenant_for_user"("p_user_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."ensure_personal_tenant_for_user"("p_user_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."ensure_personal_tenant_for_user"("p_user_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."faq_votar"("faq_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."faq_votar"("faq_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."faq_votar"("faq_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."faq_votar"("faq_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."fix_all_subscription_mismatches"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."fix_all_subscription_mismatches"() TO "anon";
-GRANT ALL ON FUNCTION "public"."fix_all_subscription_mismatches"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."fix_all_subscription_mismatches"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."float4_dist"(real, real) TO "postgres";
-GRANT ALL ON FUNCTION "public"."float4_dist"(real, real) TO "anon";
-GRANT ALL ON FUNCTION "public"."float4_dist"(real, real) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."float4_dist"(real, real) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."float8_dist"(double precision, double precision) TO "postgres";
-GRANT ALL ON FUNCTION "public"."float8_dist"(double precision, double precision) TO "anon";
-GRANT ALL ON FUNCTION "public"."float8_dist"(double precision, double precision) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."float8_dist"(double precision, double precision) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."fn_agenda_regras_semanais_no_overlap"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."fn_agenda_regras_semanais_no_overlap"() TO "anon";
-GRANT ALL ON FUNCTION "public"."fn_agenda_regras_semanais_no_overlap"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."fn_agenda_regras_semanais_no_overlap"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bit_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bit_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bit_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bit_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bit_consistent"("internal", bit, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bit_consistent"("internal", bit, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bit_consistent"("internal", bit, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bit_consistent"("internal", bit, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bit_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bit_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bit_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bit_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bit_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bit_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bit_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bit_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bit_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bit_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bit_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bit_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bit_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bit_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bit_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bit_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bool_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bool_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bool_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bool_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bool_consistent"("internal", boolean, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bool_consistent"("internal", boolean, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bool_consistent"("internal", boolean, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bool_consistent"("internal", boolean, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bool_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bool_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bool_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bool_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bool_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bool_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bool_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bool_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bool_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bool_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bool_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bool_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bool_same"("public"."gbtreekey2", "public"."gbtreekey2", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bool_same"("public"."gbtreekey2", "public"."gbtreekey2", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bool_same"("public"."gbtreekey2", "public"."gbtreekey2", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bool_same"("public"."gbtreekey2", "public"."gbtreekey2", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bool_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bool_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bool_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bool_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bpchar_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bpchar_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bpchar_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bpchar_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bpchar_consistent"("internal", character, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bpchar_consistent"("internal", character, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bpchar_consistent"("internal", character, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bpchar_consistent"("internal", character, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bytea_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bytea_consistent"("internal", "bytea", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_consistent"("internal", "bytea", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_consistent"("internal", "bytea", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_consistent"("internal", "bytea", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bytea_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bytea_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bytea_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_bytea_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_bytea_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_cash_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_cash_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_cash_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_cash_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_cash_consistent"("internal", "money", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_cash_consistent"("internal", "money", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_cash_consistent"("internal", "money", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_cash_consistent"("internal", "money", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_cash_distance"("internal", "money", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_cash_distance"("internal", "money", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_cash_distance"("internal", "money", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_cash_distance"("internal", "money", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_cash_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_cash_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_cash_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_cash_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_cash_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_cash_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_cash_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_cash_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_cash_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_cash_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_cash_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_cash_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_cash_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_cash_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_cash_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_cash_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_cash_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_cash_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_cash_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_cash_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_date_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_date_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_date_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_date_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_date_consistent"("internal", "date", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_date_consistent"("internal", "date", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_date_consistent"("internal", "date", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_date_consistent"("internal", "date", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_date_distance"("internal", "date", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_date_distance"("internal", "date", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_date_distance"("internal", "date", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_date_distance"("internal", "date", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_date_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_date_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_date_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_date_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_date_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_date_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_date_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_date_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_date_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_date_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_date_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_date_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_date_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_date_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_date_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_date_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_date_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_date_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_date_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_date_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_decompress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_decompress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_decompress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_decompress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_enum_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_enum_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_enum_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_enum_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_enum_consistent"("internal", "anyenum", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_enum_consistent"("internal", "anyenum", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_enum_consistent"("internal", "anyenum", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_enum_consistent"("internal", "anyenum", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_enum_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_enum_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_enum_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_enum_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_enum_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_enum_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_enum_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_enum_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_enum_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_enum_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_enum_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_enum_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_enum_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_enum_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_enum_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_enum_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_enum_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_enum_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_enum_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_enum_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float4_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float4_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float4_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float4_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float4_consistent"("internal", real, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float4_consistent"("internal", real, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float4_consistent"("internal", real, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float4_consistent"("internal", real, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float4_distance"("internal", real, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float4_distance"("internal", real, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float4_distance"("internal", real, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float4_distance"("internal", real, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float4_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float4_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float4_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float4_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float4_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float4_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float4_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float4_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float4_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float4_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float4_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float4_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float4_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float4_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float4_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float4_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float4_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float4_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float4_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float4_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float8_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float8_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float8_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float8_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float8_consistent"("internal", double precision, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float8_consistent"("internal", double precision, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float8_consistent"("internal", double precision, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float8_consistent"("internal", double precision, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float8_distance"("internal", double precision, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float8_distance"("internal", double precision, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float8_distance"("internal", double precision, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float8_distance"("internal", double precision, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float8_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float8_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float8_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float8_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float8_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float8_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float8_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float8_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float8_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float8_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float8_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float8_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_float8_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_float8_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_float8_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_float8_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_inet_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_inet_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_inet_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_inet_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_inet_consistent"("internal", "inet", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_inet_consistent"("internal", "inet", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_inet_consistent"("internal", "inet", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_inet_consistent"("internal", "inet", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_inet_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_inet_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_inet_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_inet_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_inet_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_inet_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_inet_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_inet_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_inet_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_inet_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_inet_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_inet_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_inet_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_inet_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_inet_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_inet_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int2_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int2_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int2_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int2_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int2_consistent"("internal", smallint, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int2_consistent"("internal", smallint, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int2_consistent"("internal", smallint, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int2_consistent"("internal", smallint, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int2_distance"("internal", smallint, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int2_distance"("internal", smallint, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int2_distance"("internal", smallint, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int2_distance"("internal", smallint, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int2_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int2_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int2_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int2_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int2_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int2_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int2_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int2_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int2_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int2_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int2_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int2_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int2_same"("public"."gbtreekey4", "public"."gbtreekey4", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int2_same"("public"."gbtreekey4", "public"."gbtreekey4", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int2_same"("public"."gbtreekey4", "public"."gbtreekey4", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int2_same"("public"."gbtreekey4", "public"."gbtreekey4", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int2_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int2_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int2_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int2_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int4_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int4_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int4_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int4_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int4_consistent"("internal", integer, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int4_consistent"("internal", integer, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int4_consistent"("internal", integer, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int4_consistent"("internal", integer, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int4_distance"("internal", integer, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int4_distance"("internal", integer, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int4_distance"("internal", integer, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int4_distance"("internal", integer, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int4_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int4_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int4_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int4_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int4_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int4_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int4_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int4_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int4_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int4_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int4_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int4_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int4_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int4_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int4_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int4_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int4_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int4_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int4_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int4_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int8_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int8_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int8_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int8_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int8_consistent"("internal", bigint, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int8_consistent"("internal", bigint, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int8_consistent"("internal", bigint, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int8_consistent"("internal", bigint, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int8_distance"("internal", bigint, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int8_distance"("internal", bigint, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int8_distance"("internal", bigint, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int8_distance"("internal", bigint, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int8_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int8_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int8_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int8_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int8_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int8_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int8_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int8_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int8_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int8_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int8_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int8_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_int8_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_int8_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_int8_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_int8_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_intv_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_intv_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_intv_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_intv_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_intv_consistent"("internal", interval, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_intv_consistent"("internal", interval, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_intv_consistent"("internal", interval, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_intv_consistent"("internal", interval, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_intv_decompress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_intv_decompress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_intv_decompress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_intv_decompress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_intv_distance"("internal", interval, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_intv_distance"("internal", interval, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_intv_distance"("internal", interval, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_intv_distance"("internal", interval, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_intv_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_intv_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_intv_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_intv_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_intv_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_intv_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_intv_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_intv_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_intv_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_intv_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_intv_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_intv_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_intv_same"("public"."gbtreekey32", "public"."gbtreekey32", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_intv_same"("public"."gbtreekey32", "public"."gbtreekey32", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_intv_same"("public"."gbtreekey32", "public"."gbtreekey32", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_intv_same"("public"."gbtreekey32", "public"."gbtreekey32", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_intv_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_intv_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_intv_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_intv_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad8_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad8_consistent"("internal", "macaddr8", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_consistent"("internal", "macaddr8", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_consistent"("internal", "macaddr8", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_consistent"("internal", "macaddr8", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad8_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad8_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad8_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad8_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad8_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad_consistent"("internal", "macaddr", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad_consistent"("internal", "macaddr", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad_consistent"("internal", "macaddr", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad_consistent"("internal", "macaddr", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_macad_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_macad_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_macad_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_macad_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_numeric_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_numeric_consistent"("internal", numeric, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_consistent"("internal", numeric, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_consistent"("internal", numeric, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_consistent"("internal", numeric, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_numeric_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_numeric_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_numeric_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_numeric_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_numeric_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_oid_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_oid_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_oid_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_oid_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_oid_consistent"("internal", "oid", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_oid_consistent"("internal", "oid", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_oid_consistent"("internal", "oid", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_oid_consistent"("internal", "oid", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_oid_distance"("internal", "oid", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_oid_distance"("internal", "oid", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_oid_distance"("internal", "oid", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_oid_distance"("internal", "oid", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_oid_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_oid_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_oid_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_oid_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_oid_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_oid_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_oid_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_oid_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_oid_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_oid_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_oid_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_oid_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_oid_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_oid_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_oid_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_oid_same"("public"."gbtreekey8", "public"."gbtreekey8", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_oid_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_oid_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_oid_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_oid_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_text_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_text_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_text_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_text_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_text_consistent"("internal", "text", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_text_consistent"("internal", "text", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_text_consistent"("internal", "text", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_text_consistent"("internal", "text", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_text_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_text_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_text_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_text_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_text_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_text_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_text_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_text_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_text_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_text_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_text_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_text_same"("public"."gbtreekey_var", "public"."gbtreekey_var", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_text_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_text_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_text_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_text_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_time_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_time_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_time_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_time_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_time_consistent"("internal", time without time zone, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_time_consistent"("internal", time without time zone, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_time_consistent"("internal", time without time zone, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_time_consistent"("internal", time without time zone, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_time_distance"("internal", time without time zone, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_time_distance"("internal", time without time zone, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_time_distance"("internal", time without time zone, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_time_distance"("internal", time without time zone, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_time_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_time_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_time_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_time_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_time_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_time_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_time_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_time_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_time_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_time_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_time_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_time_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_time_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_time_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_time_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_time_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_time_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_time_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_time_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_time_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_timetz_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_timetz_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_timetz_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_timetz_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_timetz_consistent"("internal", time with time zone, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_timetz_consistent"("internal", time with time zone, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_timetz_consistent"("internal", time with time zone, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_timetz_consistent"("internal", time with time zone, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_ts_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_ts_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_ts_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_ts_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_ts_consistent"("internal", timestamp without time zone, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_ts_consistent"("internal", timestamp without time zone, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_ts_consistent"("internal", timestamp without time zone, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_ts_consistent"("internal", timestamp without time zone, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_ts_distance"("internal", timestamp without time zone, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_ts_distance"("internal", timestamp without time zone, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_ts_distance"("internal", timestamp without time zone, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_ts_distance"("internal", timestamp without time zone, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_ts_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_ts_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_ts_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_ts_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_ts_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_ts_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_ts_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_ts_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_ts_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_ts_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_ts_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_ts_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_ts_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_ts_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_ts_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_ts_same"("public"."gbtreekey16", "public"."gbtreekey16", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_ts_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_ts_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_ts_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_ts_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_tstz_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_tstz_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_tstz_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_tstz_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_tstz_consistent"("internal", timestamp with time zone, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_tstz_consistent"("internal", timestamp with time zone, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_tstz_consistent"("internal", timestamp with time zone, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_tstz_consistent"("internal", timestamp with time zone, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_tstz_distance"("internal", timestamp with time zone, smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_tstz_distance"("internal", timestamp with time zone, smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_tstz_distance"("internal", timestamp with time zone, smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_tstz_distance"("internal", timestamp with time zone, smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_uuid_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_uuid_consistent"("internal", "uuid", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_consistent"("internal", "uuid", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_consistent"("internal", "uuid", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_consistent"("internal", "uuid", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_uuid_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_fetch"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_uuid_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_uuid_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_uuid_same"("public"."gbtreekey32", "public"."gbtreekey32", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_same"("public"."gbtreekey32", "public"."gbtreekey32", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_same"("public"."gbtreekey32", "public"."gbtreekey32", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_same"("public"."gbtreekey32", "public"."gbtreekey32", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_uuid_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_uuid_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_var_decompress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_var_decompress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_var_decompress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_var_decompress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gbt_var_fetch"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gbt_var_fetch"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gbt_var_fetch"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gbt_var_fetch"("internal") TO "service_role";
-
-
-
-REVOKE ALL ON FUNCTION "public"."get_my_email"() FROM PUBLIC;
-GRANT ALL ON FUNCTION "public"."get_my_email"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."get_my_email"() TO "anon";
-GRANT ALL ON FUNCTION "public"."get_my_email"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."get_my_email"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gin_extract_query_trgm"("text", "internal", smallint, "internal", "internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gin_extract_query_trgm"("text", "internal", smallint, "internal", "internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gin_extract_query_trgm"("text", "internal", smallint, "internal", "internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gin_extract_query_trgm"("text", "internal", smallint, "internal", "internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gin_extract_value_trgm"("text", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gin_extract_value_trgm"("text", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gin_extract_value_trgm"("text", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gin_extract_value_trgm"("text", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gin_trgm_consistent"("internal", smallint, "text", integer, "internal", "internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gin_trgm_consistent"("internal", smallint, "text", integer, "internal", "internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gin_trgm_consistent"("internal", smallint, "text", integer, "internal", "internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gin_trgm_consistent"("internal", smallint, "text", integer, "internal", "internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gin_trgm_triconsistent"("internal", smallint, "text", integer, "internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gin_trgm_triconsistent"("internal", smallint, "text", integer, "internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gin_trgm_triconsistent"("internal", smallint, "text", integer, "internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gin_trgm_triconsistent"("internal", smallint, "text", integer, "internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_compress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_compress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_compress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_compress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_consistent"("internal", "text", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_consistent"("internal", "text", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_consistent"("internal", "text", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_consistent"("internal", "text", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_decompress"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_decompress"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_decompress"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_decompress"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_distance"("internal", "text", smallint, "oid", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_distance"("internal", "text", smallint, "oid", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_distance"("internal", "text", smallint, "oid", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_distance"("internal", "text", smallint, "oid", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_options"("internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_options"("internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_options"("internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_options"("internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_penalty"("internal", "internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_penalty"("internal", "internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_penalty"("internal", "internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_penalty"("internal", "internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_picksplit"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_picksplit"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_picksplit"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_picksplit"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_same"("public"."gtrgm", "public"."gtrgm", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_same"("public"."gtrgm", "public"."gtrgm", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_same"("public"."gtrgm", "public"."gtrgm", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_same"("public"."gtrgm", "public"."gtrgm", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."gtrgm_union"("internal", "internal") TO "postgres";
-GRANT ALL ON FUNCTION "public"."gtrgm_union"("internal", "internal") TO "anon";
-GRANT ALL ON FUNCTION "public"."gtrgm_union"("internal", "internal") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."gtrgm_union"("internal", "internal") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."guard_account_type_immutable"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."guard_account_type_immutable"() TO "anon";
-GRANT ALL ON FUNCTION "public"."guard_account_type_immutable"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."guard_account_type_immutable"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."guard_locked_commitment"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."guard_locked_commitment"() TO "anon";
-GRANT ALL ON FUNCTION "public"."guard_locked_commitment"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."guard_locked_commitment"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."guard_no_change_core_plan_key"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."guard_no_change_core_plan_key"() TO "anon";
-GRANT ALL ON FUNCTION "public"."guard_no_change_core_plan_key"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."guard_no_change_core_plan_key"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."guard_no_change_plan_target"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."guard_no_change_plan_target"() TO "anon";
-GRANT ALL ON FUNCTION "public"."guard_no_change_plan_target"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."guard_no_change_plan_target"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."guard_no_delete_core_plans"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."guard_no_delete_core_plans"() TO "anon";
-GRANT ALL ON FUNCTION "public"."guard_no_delete_core_plans"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."guard_no_delete_core_plans"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."guard_patient_cannot_own_tenant"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."guard_patient_cannot_own_tenant"() TO "anon";
-GRANT ALL ON FUNCTION "public"."guard_patient_cannot_own_tenant"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."guard_patient_cannot_own_tenant"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."guard_tenant_kind_immutable"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."guard_tenant_kind_immutable"() TO "anon";
-GRANT ALL ON FUNCTION "public"."guard_tenant_kind_immutable"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."guard_tenant_kind_immutable"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."handle_new_user"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."handle_new_user"() TO "anon";
-GRANT ALL ON FUNCTION "public"."handle_new_user"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."handle_new_user"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."handle_new_user_create_personal_tenant"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."handle_new_user_create_personal_tenant"() TO "anon";
-GRANT ALL ON FUNCTION "public"."handle_new_user_create_personal_tenant"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."handle_new_user_create_personal_tenant"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."has_feature"("p_owner_id" "uuid", "p_feature_key" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."has_feature"("p_owner_id" "uuid", "p_feature_key" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."has_feature"("p_owner_id" "uuid", "p_feature_key" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."has_feature"("p_owner_id" "uuid", "p_feature_key" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."int2_dist"(smallint, smallint) TO "postgres";
-GRANT ALL ON FUNCTION "public"."int2_dist"(smallint, smallint) TO "anon";
-GRANT ALL ON FUNCTION "public"."int2_dist"(smallint, smallint) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."int2_dist"(smallint, smallint) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."int4_dist"(integer, integer) TO "postgres";
-GRANT ALL ON FUNCTION "public"."int4_dist"(integer, integer) TO "anon";
-GRANT ALL ON FUNCTION "public"."int4_dist"(integer, integer) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."int4_dist"(integer, integer) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."int8_dist"(bigint, bigint) TO "postgres";
-GRANT ALL ON FUNCTION "public"."int8_dist"(bigint, bigint) TO "anon";
-GRANT ALL ON FUNCTION "public"."int8_dist"(bigint, bigint) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."int8_dist"(bigint, bigint) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."interval_dist"(interval, interval) TO "postgres";
-GRANT ALL ON FUNCTION "public"."interval_dist"(interval, interval) TO "anon";
-GRANT ALL ON FUNCTION "public"."interval_dist"(interval, interval) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."interval_dist"(interval, interval) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."is_clinic_tenant"("_tenant_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."is_clinic_tenant"("_tenant_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."is_clinic_tenant"("_tenant_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."is_clinic_tenant"("_tenant_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."is_saas_admin"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."is_saas_admin"() TO "anon";
-GRANT ALL ON FUNCTION "public"."is_saas_admin"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."is_saas_admin"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."is_tenant_admin"("p_tenant_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."is_tenant_admin"("p_tenant_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."is_tenant_admin"("p_tenant_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."is_tenant_admin"("p_tenant_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."is_tenant_member"("_tenant_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."is_tenant_member"("_tenant_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."is_tenant_member"("_tenant_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."is_tenant_member"("_tenant_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."is_therapist_tenant"("_tenant_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."is_therapist_tenant"("_tenant_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."is_therapist_tenant"("_tenant_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."is_therapist_tenant"("_tenant_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."jwt_email"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."jwt_email"() TO "anon";
-GRANT ALL ON FUNCTION "public"."jwt_email"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."jwt_email"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."my_tenants"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."my_tenants"() TO "anon";
-GRANT ALL ON FUNCTION "public"."my_tenants"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."my_tenants"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."oid_dist"("oid", "oid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."oid_dist"("oid", "oid") TO "anon";
-GRANT ALL ON FUNCTION "public"."oid_dist"("oid", "oid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."oid_dist"("oid", "oid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."on_new_user_seed_patient_groups"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."on_new_user_seed_patient_groups"() TO "anon";
-GRANT ALL ON FUNCTION "public"."on_new_user_seed_patient_groups"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."on_new_user_seed_patient_groups"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."patients_validate_member_consistency"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."patients_validate_member_consistency"() TO "anon";
-GRANT ALL ON FUNCTION "public"."patients_validate_member_consistency"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."patients_validate_member_consistency"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."patients_validate_responsible_member_tenant"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."patients_validate_responsible_member_tenant"() TO "anon";
-GRANT ALL ON FUNCTION "public"."patients_validate_responsible_member_tenant"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."patients_validate_responsible_member_tenant"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."prevent_promoting_to_system"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."prevent_promoting_to_system"() TO "anon";
-GRANT ALL ON FUNCTION "public"."prevent_promoting_to_system"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."prevent_promoting_to_system"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."prevent_saas_membership"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."prevent_saas_membership"() TO "anon";
-GRANT ALL ON FUNCTION "public"."prevent_saas_membership"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."prevent_saas_membership"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."prevent_system_group_changes"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."prevent_system_group_changes"() TO "anon";
-GRANT ALL ON FUNCTION "public"."prevent_system_group_changes"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."prevent_system_group_changes"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."provision_account_tenant"("p_user_id" "uuid", "p_kind" "text", "p_name" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."provision_account_tenant"("p_user_id" "uuid", "p_kind" "text", "p_name" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."provision_account_tenant"("p_user_id" "uuid", "p_kind" "text", "p_name" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."provision_account_tenant"("p_user_id" "uuid", "p_kind" "text", "p_name" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."reactivate_subscription"("p_subscription_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."reactivate_subscription"("p_subscription_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."reactivate_subscription"("p_subscription_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."reactivate_subscription"("p_subscription_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."rebuild_owner_entitlements"("p_owner_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."rebuild_owner_entitlements"("p_owner_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."rebuild_owner_entitlements"("p_owner_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."rebuild_owner_entitlements"("p_owner_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."regexp_match"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."regexp_match"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."regexp_match"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."regexp_match"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."regexp_match"("public"."citext", "public"."citext", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."regexp_match"("public"."citext", "public"."citext", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."regexp_match"("public"."citext", "public"."citext", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."regexp_match"("public"."citext", "public"."citext", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."regexp_matches"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."regexp_matches"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."regexp_matches"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."regexp_matches"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."regexp_matches"("public"."citext", "public"."citext", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."regexp_matches"("public"."citext", "public"."citext", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."regexp_matches"("public"."citext", "public"."citext", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."regexp_matches"("public"."citext", "public"."citext", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."regexp_replace"("public"."citext", "public"."citext", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."regexp_replace"("public"."citext", "public"."citext", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."regexp_replace"("public"."citext", "public"."citext", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."regexp_replace"("public"."citext", "public"."citext", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."regexp_replace"("public"."citext", "public"."citext", "text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."regexp_replace"("public"."citext", "public"."citext", "text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."regexp_replace"("public"."citext", "public"."citext", "text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."regexp_replace"("public"."citext", "public"."citext", "text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."regexp_split_to_array"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_array"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_array"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_array"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."regexp_split_to_array"("public"."citext", "public"."citext", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_array"("public"."citext", "public"."citext", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_array"("public"."citext", "public"."citext", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_array"("public"."citext", "public"."citext", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."regexp_split_to_table"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_table"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_table"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_table"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."regexp_split_to_table"("public"."citext", "public"."citext", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_table"("public"."citext", "public"."citext", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_table"("public"."citext", "public"."citext", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."regexp_split_to_table"("public"."citext", "public"."citext", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."replace"("public"."citext", "public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."replace"("public"."citext", "public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."replace"("public"."citext", "public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."replace"("public"."citext", "public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."rotate_patient_invite_token"("p_new_token" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."rotate_patient_invite_token"("p_new_token" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."rotate_patient_invite_token"("p_new_token" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."rotate_patient_invite_token"("p_new_token" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."saas_votar_doc"("p_doc_id" "uuid", "p_util" boolean) TO "postgres";
-GRANT ALL ON FUNCTION "public"."saas_votar_doc"("p_doc_id" "uuid", "p_util" boolean) TO "anon";
-GRANT ALL ON FUNCTION "public"."saas_votar_doc"("p_doc_id" "uuid", "p_util" boolean) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."saas_votar_doc"("p_doc_id" "uuid", "p_util" boolean) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."seed_determined_commitments"("p_tenant_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."seed_determined_commitments"("p_tenant_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."seed_determined_commitments"("p_tenant_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."seed_determined_commitments"("p_tenant_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."set_limit"(real) TO "postgres";
-GRANT ALL ON FUNCTION "public"."set_limit"(real) TO "anon";
-GRANT ALL ON FUNCTION "public"."set_limit"(real) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."set_limit"(real) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."set_owner_id"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."set_owner_id"() TO "anon";
-GRANT ALL ON FUNCTION "public"."set_owner_id"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."set_owner_id"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."set_tenant_feature_exception"("p_tenant_id" "uuid", "p_feature_key" "text", "p_enabled" boolean, "p_reason" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."set_tenant_feature_exception"("p_tenant_id" "uuid", "p_feature_key" "text", "p_enabled" boolean, "p_reason" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."set_tenant_feature_exception"("p_tenant_id" "uuid", "p_feature_key" "text", "p_enabled" boolean, "p_reason" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."set_tenant_feature_exception"("p_tenant_id" "uuid", "p_feature_key" "text", "p_enabled" boolean, "p_reason" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."set_updated_at"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."set_updated_at"() TO "anon";
-GRANT ALL ON FUNCTION "public"."set_updated_at"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."set_updated_at"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."set_updated_at_recurrence"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."set_updated_at_recurrence"() TO "anon";
-GRANT ALL ON FUNCTION "public"."set_updated_at_recurrence"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."set_updated_at_recurrence"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."show_limit"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."show_limit"() TO "anon";
-GRANT ALL ON FUNCTION "public"."show_limit"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."show_limit"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."show_trgm"("text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."show_trgm"("text") TO "anon";
-GRANT ALL ON FUNCTION "public"."show_trgm"("text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."show_trgm"("text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."similarity"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."similarity"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."similarity"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."similarity"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."similarity_dist"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."similarity_dist"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."similarity_dist"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."similarity_dist"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."similarity_op"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."similarity_op"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."similarity_op"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."similarity_op"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."split_part"("public"."citext", "public"."citext", integer) TO "postgres";
-GRANT ALL ON FUNCTION "public"."split_part"("public"."citext", "public"."citext", integer) TO "anon";
-GRANT ALL ON FUNCTION "public"."split_part"("public"."citext", "public"."citext", integer) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."split_part"("public"."citext", "public"."citext", integer) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."split_recurrence_at"("p_recurrence_id" "uuid", "p_from_date" "date") TO "postgres";
-GRANT ALL ON FUNCTION "public"."split_recurrence_at"("p_recurrence_id" "uuid", "p_from_date" "date") TO "anon";
-GRANT ALL ON FUNCTION "public"."split_recurrence_at"("p_recurrence_id" "uuid", "p_from_date" "date") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."split_recurrence_at"("p_recurrence_id" "uuid", "p_from_date" "date") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."strict_word_similarity"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_commutator_op"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_commutator_op"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_commutator_op"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_commutator_op"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_dist_commutator_op"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_dist_commutator_op"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_dist_commutator_op"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_dist_commutator_op"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_dist_op"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_dist_op"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_dist_op"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_dist_op"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_op"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_op"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_op"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."strict_word_similarity_op"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."strpos"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."strpos"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."strpos"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."strpos"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."subscription_intents_view_insert"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."subscription_intents_view_insert"() TO "anon";
-GRANT ALL ON FUNCTION "public"."subscription_intents_view_insert"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."subscription_intents_view_insert"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."subscriptions_validate_scope"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."subscriptions_validate_scope"() TO "anon";
-GRANT ALL ON FUNCTION "public"."subscriptions_validate_scope"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."subscriptions_validate_scope"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."sync_busy_mirror_agenda_eventos"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."sync_busy_mirror_agenda_eventos"() TO "anon";
-GRANT ALL ON FUNCTION "public"."sync_busy_mirror_agenda_eventos"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."sync_busy_mirror_agenda_eventos"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_accept_invite"("p_token" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_accept_invite"("p_token" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_accept_invite"("p_token" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_accept_invite"("p_token" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."tenant_members" TO "postgres";
-GRANT SELECT,REFERENCES,TRIGGER,TRUNCATE,MAINTAIN ON TABLE "public"."tenant_members" TO "authenticated";
-GRANT ALL ON TABLE "public"."tenant_members" TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_add_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_add_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_add_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_add_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_feature_allowed"("p_tenant_id" "uuid", "p_feature_key" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_feature_allowed"("p_tenant_id" "uuid", "p_feature_key" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_feature_allowed"("p_tenant_id" "uuid", "p_feature_key" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_feature_allowed"("p_tenant_id" "uuid", "p_feature_key" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_feature_enabled"("p_tenant_id" "uuid", "p_feature_key" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_feature_enabled"("p_tenant_id" "uuid", "p_feature_key" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_feature_enabled"("p_tenant_id" "uuid", "p_feature_key" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_feature_enabled"("p_tenant_id" "uuid", "p_feature_key" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_features_guard_with_plan"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_features_guard_with_plan"() TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_features_guard_with_plan"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_features_guard_with_plan"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_has_feature"("_tenant_id" "uuid", "_feature" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_has_feature"("_tenant_id" "uuid", "_feature" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_has_feature"("_tenant_id" "uuid", "_feature" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_has_feature"("_tenant_id" "uuid", "_feature" "text") TO "service_role";
-
-
-
-REVOKE ALL ON FUNCTION "public"."tenant_invite_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") FROM PUBLIC;
-GRANT ALL ON FUNCTION "public"."tenant_invite_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_invite_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_invite_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_invite_member_by_email"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_reactivate_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_reactivate_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_reactivate_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_reactivate_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_remove_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_remove_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_remove_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_remove_member"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_remove_member_soft"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_remove_member_soft"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_remove_member_soft"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_remove_member_soft"("p_tenant_id" "uuid", "p_member_user_id" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_revoke_invite"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_revoke_invite"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_revoke_invite"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_revoke_invite"("p_tenant_id" "uuid", "p_email" "text", "p_role" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_set_member_status"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_status" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_set_member_status"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_status" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_set_member_status"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_status" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_set_member_status"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_status" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tenant_update_member_role"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_role" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."tenant_update_member_role"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_role" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."tenant_update_member_role"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_role" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tenant_update_member_role"("p_tenant_id" "uuid", "p_member_user_id" "uuid", "p_new_role" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."texticlike"("public"."citext", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."texticlike"("public"."citext", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."texticlike"("public"."citext", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."texticlike"("public"."citext", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."texticlike"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."texticlike"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."texticlike"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."texticlike"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."texticnlike"("public"."citext", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."texticnlike"("public"."citext", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."texticnlike"("public"."citext", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."texticnlike"("public"."citext", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."texticnlike"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."texticnlike"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."texticnlike"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."texticnlike"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."texticregexeq"("public"."citext", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."texticregexeq"("public"."citext", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."texticregexeq"("public"."citext", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."texticregexeq"("public"."citext", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."texticregexeq"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."texticregexeq"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."texticregexeq"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."texticregexeq"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."texticregexne"("public"."citext", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."texticregexne"("public"."citext", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."texticregexne"("public"."citext", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."texticregexne"("public"."citext", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."texticregexne"("public"."citext", "public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."texticregexne"("public"."citext", "public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."texticregexne"("public"."citext", "public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."texticregexne"("public"."citext", "public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."time_dist"(time without time zone, time without time zone) TO "postgres";
-GRANT ALL ON FUNCTION "public"."time_dist"(time without time zone, time without time zone) TO "anon";
-GRANT ALL ON FUNCTION "public"."time_dist"(time without time zone, time without time zone) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."time_dist"(time without time zone, time without time zone) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."toggle_plan"("owner" "uuid") TO "postgres";
-GRANT ALL ON FUNCTION "public"."toggle_plan"("owner" "uuid") TO "anon";
-GRANT ALL ON FUNCTION "public"."toggle_plan"("owner" "uuid") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."toggle_plan"("owner" "uuid") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."transition_subscription"("p_subscription_id" "uuid", "p_to_status" "text", "p_reason" "text", "p_metadata" "jsonb") TO "postgres";
-GRANT ALL ON FUNCTION "public"."transition_subscription"("p_subscription_id" "uuid", "p_to_status" "text", "p_reason" "text", "p_metadata" "jsonb") TO "anon";
-GRANT ALL ON FUNCTION "public"."transition_subscription"("p_subscription_id" "uuid", "p_to_status" "text", "p_reason" "text", "p_metadata" "jsonb") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."transition_subscription"("p_subscription_id" "uuid", "p_to_status" "text", "p_reason" "text", "p_metadata" "jsonb") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."translate"("public"."citext", "public"."citext", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."translate"("public"."citext", "public"."citext", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."translate"("public"."citext", "public"."citext", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."translate"("public"."citext", "public"."citext", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."ts_dist"(timestamp without time zone, timestamp without time zone) TO "postgres";
-GRANT ALL ON FUNCTION "public"."ts_dist"(timestamp without time zone, timestamp without time zone) TO "anon";
-GRANT ALL ON FUNCTION "public"."ts_dist"(timestamp without time zone, timestamp without time zone) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."ts_dist"(timestamp without time zone, timestamp without time zone) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."tstz_dist"(timestamp with time zone, timestamp with time zone) TO "postgres";
-GRANT ALL ON FUNCTION "public"."tstz_dist"(timestamp with time zone, timestamp with time zone) TO "anon";
-GRANT ALL ON FUNCTION "public"."tstz_dist"(timestamp with time zone, timestamp with time zone) TO "authenticated";
-GRANT ALL ON FUNCTION "public"."tstz_dist"(timestamp with time zone, timestamp with time zone) TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."user_has_feature"("_user_id" "uuid", "_feature" "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."user_has_feature"("_user_id" "uuid", "_feature" "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."user_has_feature"("_user_id" "uuid", "_feature" "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."user_has_feature"("_user_id" "uuid", "_feature" "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."whoami"() TO "postgres";
-GRANT ALL ON FUNCTION "public"."whoami"() TO "anon";
-GRANT ALL ON FUNCTION "public"."whoami"() TO "authenticated";
-GRANT ALL ON FUNCTION "public"."whoami"() TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."word_similarity"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."word_similarity"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."word_similarity"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."word_similarity"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."word_similarity_commutator_op"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."word_similarity_commutator_op"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."word_similarity_commutator_op"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."word_similarity_commutator_op"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."word_similarity_dist_commutator_op"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."word_similarity_dist_commutator_op"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."word_similarity_dist_commutator_op"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."word_similarity_dist_commutator_op"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."word_similarity_dist_op"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."word_similarity_dist_op"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."word_similarity_dist_op"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."word_similarity_dist_op"("text", "text") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."word_similarity_op"("text", "text") TO "postgres";
-GRANT ALL ON FUNCTION "public"."word_similarity_op"("text", "text") TO "anon";
-GRANT ALL ON FUNCTION "public"."word_similarity_op"("text", "text") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."word_similarity_op"("text", "text") TO "service_role";
-
-
-
-
-
-
-
-
-
-
-
-
-GRANT ALL ON FUNCTION "public"."max"("public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."max"("public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."max"("public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."max"("public"."citext") TO "service_role";
-
-
-
-GRANT ALL ON FUNCTION "public"."min"("public"."citext") TO "postgres";
-GRANT ALL ON FUNCTION "public"."min"("public"."citext") TO "anon";
-GRANT ALL ON FUNCTION "public"."min"("public"."citext") TO "authenticated";
-GRANT ALL ON FUNCTION "public"."min"("public"."citext") TO "service_role";
-
-
-
-
-
-
-
-
-
-GRANT ALL ON TABLE "public"."agenda_bloqueios" TO "postgres";
-GRANT ALL ON TABLE "public"."agenda_bloqueios" TO "anon";
-GRANT ALL ON TABLE "public"."agenda_bloqueios" TO "authenticated";
-GRANT ALL ON TABLE "public"."agenda_bloqueios" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."agenda_configuracoes" TO "postgres";
-GRANT ALL ON TABLE "public"."agenda_configuracoes" TO "anon";
-GRANT ALL ON TABLE "public"."agenda_configuracoes" TO "authenticated";
-GRANT ALL ON TABLE "public"."agenda_configuracoes" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."agenda_eventos" TO "postgres";
-GRANT ALL ON TABLE "public"."agenda_eventos" TO "anon";
-GRANT ALL ON TABLE "public"."agenda_eventos" TO "authenticated";
-GRANT ALL ON TABLE "public"."agenda_eventos" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."agenda_excecoes" TO "postgres";
-GRANT ALL ON TABLE "public"."agenda_excecoes" TO "anon";
-GRANT ALL ON TABLE "public"."agenda_excecoes" TO "authenticated";
-GRANT ALL ON TABLE "public"."agenda_excecoes" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."agenda_online_slots" TO "postgres";
-GRANT ALL ON TABLE "public"."agenda_online_slots" TO "anon";
-GRANT ALL ON TABLE "public"."agenda_online_slots" TO "authenticated";
-GRANT ALL ON TABLE "public"."agenda_online_slots" TO "service_role";
-
-
-
-GRANT ALL ON SEQUENCE "public"."agenda_online_slots_id_seq" TO "postgres";
-GRANT ALL ON SEQUENCE "public"."agenda_online_slots_id_seq" TO "anon";
-GRANT ALL ON SEQUENCE "public"."agenda_online_slots_id_seq" TO "authenticated";
-GRANT ALL ON SEQUENCE "public"."agenda_online_slots_id_seq" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."agenda_regras_semanais" TO "postgres";
-GRANT ALL ON TABLE "public"."agenda_regras_semanais" TO "anon";
-GRANT ALL ON TABLE "public"."agenda_regras_semanais" TO "authenticated";
-GRANT ALL ON TABLE "public"."agenda_regras_semanais" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."agenda_slots_bloqueados_semanais" TO "postgres";
-GRANT ALL ON TABLE "public"."agenda_slots_bloqueados_semanais" TO "anon";
-GRANT ALL ON TABLE "public"."agenda_slots_bloqueados_semanais" TO "authenticated";
-GRANT ALL ON TABLE "public"."agenda_slots_bloqueados_semanais" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."agenda_slots_regras" TO "postgres";
-GRANT ALL ON TABLE "public"."agenda_slots_regras" TO "anon";
-GRANT ALL ON TABLE "public"."agenda_slots_regras" TO "authenticated";
-GRANT ALL ON TABLE "public"."agenda_slots_regras" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."agendador_configuracoes" TO "postgres";
-GRANT ALL ON TABLE "public"."agendador_configuracoes" TO "anon";
-GRANT ALL ON TABLE "public"."agendador_configuracoes" TO "authenticated";
-GRANT ALL ON TABLE "public"."agendador_configuracoes" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."agendador_solicitacoes" TO "postgres";
-GRANT ALL ON TABLE "public"."agendador_solicitacoes" TO "anon";
-GRANT ALL ON TABLE "public"."agendador_solicitacoes" TO "authenticated";
-GRANT ALL ON TABLE "public"."agendador_solicitacoes" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."commitment_time_logs" TO "postgres";
-GRANT ALL ON TABLE "public"."commitment_time_logs" TO "anon";
-GRANT ALL ON TABLE "public"."commitment_time_logs" TO "authenticated";
-GRANT ALL ON TABLE "public"."commitment_time_logs" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."current_tenant_id" TO "postgres";
-GRANT ALL ON TABLE "public"."current_tenant_id" TO "anon";
-GRANT ALL ON TABLE "public"."current_tenant_id" TO "authenticated";
-GRANT ALL ON TABLE "public"."current_tenant_id" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."determined_commitment_fields" TO "postgres";
-GRANT ALL ON TABLE "public"."determined_commitment_fields" TO "anon";
-GRANT ALL ON TABLE "public"."determined_commitment_fields" TO "authenticated";
-GRANT ALL ON TABLE "public"."determined_commitment_fields" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."determined_commitments" TO "postgres";
-GRANT ALL ON TABLE "public"."determined_commitments" TO "anon";
-GRANT ALL ON TABLE "public"."determined_commitments" TO "authenticated";
-GRANT ALL ON TABLE "public"."determined_commitments" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."dev_user_credentials" TO "postgres";
-GRANT ALL ON TABLE "public"."dev_user_credentials" TO "anon";
-GRANT ALL ON TABLE "public"."dev_user_credentials" TO "authenticated";
-GRANT ALL ON TABLE "public"."dev_user_credentials" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."entitlements_invalidation" TO "postgres";
-GRANT ALL ON TABLE "public"."entitlements_invalidation" TO "anon";
-GRANT ALL ON TABLE "public"."entitlements_invalidation" TO "authenticated";
-GRANT ALL ON TABLE "public"."entitlements_invalidation" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."features" TO "postgres";
-GRANT ALL ON TABLE "public"."features" TO "anon";
-GRANT ALL ON TABLE "public"."features" TO "authenticated";
-GRANT ALL ON TABLE "public"."features" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."feriados" TO "postgres";
-GRANT ALL ON TABLE "public"."feriados" TO "anon";
-GRANT ALL ON TABLE "public"."feriados" TO "authenticated";
-GRANT ALL ON TABLE "public"."feriados" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."module_features" TO "postgres";
-GRANT ALL ON TABLE "public"."module_features" TO "anon";
-GRANT ALL ON TABLE "public"."module_features" TO "authenticated";
-GRANT ALL ON TABLE "public"."module_features" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."modules" TO "postgres";
-GRANT ALL ON TABLE "public"."modules" TO "anon";
-GRANT ALL ON TABLE "public"."modules" TO "authenticated";
-GRANT ALL ON TABLE "public"."modules" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."plan_features" TO "postgres";
-GRANT ALL ON TABLE "public"."plan_features" TO "anon";
-GRANT ALL ON TABLE "public"."plan_features" TO "authenticated";
-GRANT ALL ON TABLE "public"."plan_features" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."tenant_modules" TO "postgres";
-GRANT ALL ON TABLE "public"."tenant_modules" TO "anon";
-GRANT ALL ON TABLE "public"."tenant_modules" TO "authenticated";
-GRANT ALL ON TABLE "public"."tenant_modules" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."owner_feature_entitlements" TO "postgres";
-GRANT ALL ON TABLE "public"."owner_feature_entitlements" TO "anon";
-GRANT ALL ON TABLE "public"."owner_feature_entitlements" TO "authenticated";
-GRANT ALL ON TABLE "public"."owner_feature_entitlements" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."owner_users" TO "postgres";
-GRANT ALL ON TABLE "public"."owner_users" TO "anon";
-GRANT ALL ON TABLE "public"."owner_users" TO "authenticated";
-GRANT ALL ON TABLE "public"."owner_users" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."patient_group_patient" TO "postgres";
-GRANT ALL ON TABLE "public"."patient_group_patient" TO "anon";
-GRANT ALL ON TABLE "public"."patient_group_patient" TO "authenticated";
-GRANT ALL ON TABLE "public"."patient_group_patient" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."patient_groups" TO "postgres";
-GRANT ALL ON TABLE "public"."patient_groups" TO "anon";
-GRANT ALL ON TABLE "public"."patient_groups" TO "authenticated";
-GRANT ALL ON TABLE "public"."patient_groups" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."patient_intake_requests" TO "postgres";
-GRANT ALL ON TABLE "public"."patient_intake_requests" TO "authenticated";
-GRANT ALL ON TABLE "public"."patient_intake_requests" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."patient_invites" TO "postgres";
-GRANT ALL ON TABLE "public"."patient_invites" TO "authenticated";
-GRANT ALL ON TABLE "public"."patient_invites" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."patient_patient_tag" TO "postgres";
-GRANT ALL ON TABLE "public"."patient_patient_tag" TO "anon";
-GRANT ALL ON TABLE "public"."patient_patient_tag" TO "authenticated";
-GRANT ALL ON TABLE "public"."patient_patient_tag" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."patient_tags" TO "postgres";
-GRANT ALL ON TABLE "public"."patient_tags" TO "anon";
-GRANT ALL ON TABLE "public"."patient_tags" TO "authenticated";
-GRANT ALL ON TABLE "public"."patient_tags" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."patients" TO "postgres";
-GRANT ALL ON TABLE "public"."patients" TO "anon";
-GRANT ALL ON TABLE "public"."patients" TO "authenticated";
-GRANT ALL ON TABLE "public"."patients" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."plan_prices" TO "postgres";
-GRANT ALL ON TABLE "public"."plan_prices" TO "anon";
-GRANT ALL ON TABLE "public"."plan_prices" TO "authenticated";
-GRANT ALL ON TABLE "public"."plan_prices" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."plan_public" TO "postgres";
-GRANT ALL ON TABLE "public"."plan_public" TO "anon";
-GRANT ALL ON TABLE "public"."plan_public" TO "authenticated";
-GRANT ALL ON TABLE "public"."plan_public" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."plan_public_bullets" TO "postgres";
-GRANT ALL ON TABLE "public"."plan_public_bullets" TO "anon";
-GRANT ALL ON TABLE "public"."plan_public_bullets" TO "authenticated";
-GRANT ALL ON TABLE "public"."plan_public_bullets" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."plans" TO "postgres";
-GRANT ALL ON TABLE "public"."plans" TO "anon";
-GRANT ALL ON TABLE "public"."plans" TO "authenticated";
-GRANT ALL ON TABLE "public"."plans" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."profiles" TO "postgres";
-GRANT ALL ON TABLE "public"."profiles" TO "anon";
-GRANT ALL ON TABLE "public"."profiles" TO "authenticated";
-GRANT ALL ON TABLE "public"."profiles" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."recurrence_exceptions" TO "postgres";
-GRANT ALL ON TABLE "public"."recurrence_exceptions" TO "anon";
-GRANT ALL ON TABLE "public"."recurrence_exceptions" TO "authenticated";
-GRANT ALL ON TABLE "public"."recurrence_exceptions" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."recurrence_rules" TO "postgres";
-GRANT ALL ON TABLE "public"."recurrence_rules" TO "anon";
-GRANT ALL ON TABLE "public"."recurrence_rules" TO "authenticated";
-GRANT ALL ON TABLE "public"."recurrence_rules" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."saas_admins" TO "postgres";
-GRANT ALL ON TABLE "public"."saas_admins" TO "anon";
-GRANT ALL ON TABLE "public"."saas_admins" TO "authenticated";
-GRANT ALL ON TABLE "public"."saas_admins" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."saas_doc_votos" TO "postgres";
-GRANT ALL ON TABLE "public"."saas_doc_votos" TO "anon";
-GRANT ALL ON TABLE "public"."saas_doc_votos" TO "authenticated";
-GRANT ALL ON TABLE "public"."saas_doc_votos" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."saas_docs" TO "postgres";
-GRANT ALL ON TABLE "public"."saas_docs" TO "anon";
-GRANT ALL ON TABLE "public"."saas_docs" TO "authenticated";
-GRANT ALL ON TABLE "public"."saas_docs" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."saas_faq" TO "postgres";
-GRANT ALL ON TABLE "public"."saas_faq" TO "anon";
-GRANT ALL ON TABLE "public"."saas_faq" TO "authenticated";
-GRANT ALL ON TABLE "public"."saas_faq" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."saas_faq_itens" TO "postgres";
-GRANT ALL ON TABLE "public"."saas_faq_itens" TO "anon";
-GRANT ALL ON TABLE "public"."saas_faq_itens" TO "authenticated";
-GRANT ALL ON TABLE "public"."saas_faq_itens" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."subscription_events" TO "postgres";
-GRANT ALL ON TABLE "public"."subscription_events" TO "anon";
-GRANT ALL ON TABLE "public"."subscription_events" TO "authenticated";
-GRANT ALL ON TABLE "public"."subscription_events" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."subscription_intents_personal" TO "postgres";
-GRANT ALL ON TABLE "public"."subscription_intents_personal" TO "anon";
-GRANT ALL ON TABLE "public"."subscription_intents_personal" TO "authenticated";
-GRANT ALL ON TABLE "public"."subscription_intents_personal" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."subscription_intents_tenant" TO "postgres";
-GRANT ALL ON TABLE "public"."subscription_intents_tenant" TO "anon";
-GRANT ALL ON TABLE "public"."subscription_intents_tenant" TO "authenticated";
-GRANT ALL ON TABLE "public"."subscription_intents_tenant" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."subscription_intents" TO "postgres";
-GRANT ALL ON TABLE "public"."subscription_intents" TO "anon";
-GRANT ALL ON TABLE "public"."subscription_intents" TO "authenticated";
-GRANT ALL ON TABLE "public"."subscription_intents" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."subscription_intents_legacy" TO "postgres";
-GRANT ALL ON TABLE "public"."subscription_intents_legacy" TO "anon";
-GRANT ALL ON TABLE "public"."subscription_intents_legacy" TO "authenticated";
-GRANT ALL ON TABLE "public"."subscription_intents_legacy" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."tenant_feature_exceptions_log" TO "postgres";
-GRANT ALL ON TABLE "public"."tenant_feature_exceptions_log" TO "anon";
-GRANT ALL ON TABLE "public"."tenant_feature_exceptions_log" TO "authenticated";
-GRANT ALL ON TABLE "public"."tenant_feature_exceptions_log" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."tenant_features" TO "postgres";
-GRANT ALL ON TABLE "public"."tenant_features" TO "anon";
-GRANT ALL ON TABLE "public"."tenant_features" TO "authenticated";
-GRANT ALL ON TABLE "public"."tenant_features" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."tenant_invites" TO "postgres";
-GRANT ALL ON TABLE "public"."tenant_invites" TO "authenticated";
-GRANT ALL ON TABLE "public"."tenant_invites" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."tenants" TO "postgres";
-GRANT ALL ON TABLE "public"."tenants" TO "anon";
-GRANT ALL ON TABLE "public"."tenants" TO "authenticated";
-GRANT ALL ON TABLE "public"."tenants" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."user_settings" TO "postgres";
-GRANT ALL ON TABLE "public"."user_settings" TO "anon";
-GRANT ALL ON TABLE "public"."user_settings" TO "authenticated";
-GRANT ALL ON TABLE "public"."user_settings" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_auth_users_public" TO "postgres";
-GRANT ALL ON TABLE "public"."v_auth_users_public" TO "anon";
-GRANT ALL ON TABLE "public"."v_auth_users_public" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_auth_users_public" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_commitment_totals" TO "postgres";
-GRANT ALL ON TABLE "public"."v_commitment_totals" TO "anon";
-GRANT ALL ON TABLE "public"."v_commitment_totals" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_commitment_totals" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_patient_groups_with_counts" TO "postgres";
-GRANT ALL ON TABLE "public"."v_patient_groups_with_counts" TO "anon";
-GRANT ALL ON TABLE "public"."v_patient_groups_with_counts" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_patient_groups_with_counts" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_plan_active_prices" TO "postgres";
-GRANT ALL ON TABLE "public"."v_plan_active_prices" TO "anon";
-GRANT ALL ON TABLE "public"."v_plan_active_prices" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_plan_active_prices" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_public_pricing" TO "postgres";
-GRANT ALL ON TABLE "public"."v_public_pricing" TO "anon";
-GRANT ALL ON TABLE "public"."v_public_pricing" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_public_pricing" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_subscription_feature_mismatch" TO "postgres";
-GRANT ALL ON TABLE "public"."v_subscription_feature_mismatch" TO "anon";
-GRANT ALL ON TABLE "public"."v_subscription_feature_mismatch" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_subscription_feature_mismatch" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_subscription_health" TO "postgres";
-GRANT ALL ON TABLE "public"."v_subscription_health" TO "anon";
-GRANT ALL ON TABLE "public"."v_subscription_health" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_subscription_health" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_subscription_health_v2" TO "postgres";
-GRANT ALL ON TABLE "public"."v_subscription_health_v2" TO "anon";
-GRANT ALL ON TABLE "public"."v_subscription_health_v2" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_subscription_health_v2" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_tag_patient_counts" TO "postgres";
-GRANT ALL ON TABLE "public"."v_tag_patient_counts" TO "anon";
-GRANT ALL ON TABLE "public"."v_tag_patient_counts" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_tag_patient_counts" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_tenant_active_subscription" TO "postgres";
-GRANT ALL ON TABLE "public"."v_tenant_active_subscription" TO "anon";
-GRANT ALL ON TABLE "public"."v_tenant_active_subscription" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_tenant_active_subscription" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_tenant_entitlements" TO "postgres";
-GRANT ALL ON TABLE "public"."v_tenant_entitlements" TO "anon";
-GRANT ALL ON TABLE "public"."v_tenant_entitlements" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_tenant_entitlements" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_tenant_entitlements_full" TO "postgres";
-GRANT ALL ON TABLE "public"."v_tenant_entitlements_full" TO "anon";
-GRANT ALL ON TABLE "public"."v_tenant_entitlements_full" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_tenant_entitlements_full" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_tenant_entitlements_json" TO "postgres";
-GRANT ALL ON TABLE "public"."v_tenant_entitlements_json" TO "anon";
-GRANT ALL ON TABLE "public"."v_tenant_entitlements_json" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_tenant_entitlements_json" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_tenant_feature_exceptions" TO "postgres";
-GRANT ALL ON TABLE "public"."v_tenant_feature_exceptions" TO "anon";
-GRANT ALL ON TABLE "public"."v_tenant_feature_exceptions" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_tenant_feature_exceptions" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_tenant_feature_mismatch" TO "postgres";
-GRANT ALL ON TABLE "public"."v_tenant_feature_mismatch" TO "anon";
-GRANT ALL ON TABLE "public"."v_tenant_feature_mismatch" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_tenant_feature_mismatch" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_tenant_members_with_profiles" TO "postgres";
-GRANT ALL ON TABLE "public"."v_tenant_members_with_profiles" TO "anon";
-GRANT ALL ON TABLE "public"."v_tenant_members_with_profiles" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_tenant_members_with_profiles" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_tenant_people" TO "postgres";
-GRANT ALL ON TABLE "public"."v_tenant_people" TO "anon";
-GRANT ALL ON TABLE "public"."v_tenant_people" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_tenant_people" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_tenant_staff" TO "postgres";
-GRANT ALL ON TABLE "public"."v_tenant_staff" TO "anon";
-GRANT ALL ON TABLE "public"."v_tenant_staff" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_tenant_staff" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_user_active_subscription" TO "postgres";
-GRANT ALL ON TABLE "public"."v_user_active_subscription" TO "anon";
-GRANT ALL ON TABLE "public"."v_user_active_subscription" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_user_active_subscription" TO "service_role";
-
-
-
-GRANT ALL ON TABLE "public"."v_user_entitlements" TO "postgres";
-GRANT ALL ON TABLE "public"."v_user_entitlements" TO "anon";
-GRANT ALL ON TABLE "public"."v_user_entitlements" TO "authenticated";
-GRANT ALL ON TABLE "public"."v_user_entitlements" TO "service_role";
-
-
-
-
-
-
-
-
-
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "postgres";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "anon";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "authenticated";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "service_role";
-
-
-
-
-
-
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "postgres";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "anon";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "authenticated";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "service_role";
-
-
-
-
-
-
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "postgres";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "anon";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "authenticated";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "service_role";
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/DBS/2026-03-11/root/schema.sql b/DBS/2026-03-11/root/schema.sql
deleted file mode 100644
index 06441f8..0000000
Binary files a/DBS/2026-03-11/root/schema.sql and /dev/null differ
diff --git a/DBS/2026-03-11/src-sql-arquivos/01_profiles.sql b/DBS/2026-03-11/src-sql-arquivos/01_profiles.sql
deleted file mode 100644
index ff1694d..0000000
--- a/DBS/2026-03-11/src-sql-arquivos/01_profiles.sql
+++ /dev/null
@@ -1,110 +0,0 @@
--- =========================================================
--- Agência PSI — Profiles (v2) + Trigger + RLS
--- - 1 profile por auth.users.id
--- - role base (admin|therapist|patient)
--- - pronto para evoluir p/ multi-tenant depois
--- =========================================================
-
--- 0) Função padrão updated_at (se já existir, mantém)
-create or replace function public.set_updated_at()
-returns trigger
-language plpgsql
-as $$
-begin
- new.updated_at = now();
- return new;
-end;
-$$;
-
--- 1) Tabela profiles
-create table if not exists public.profiles (
- id uuid primary key, -- = auth.users.id
- email text,
- full_name text,
- avatar_url text,
-
- role text not null default 'patient',
- status text not null default 'active',
-
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now(),
-
- constraint profiles_role_check check (role in ('admin','therapist','patient')),
- constraint profiles_status_check check (status in ('active','inactive','invited'))
-);
-
--- FK opcional (em Supabase costuma ser ok)
-do $$
-begin
- if not exists (
- select 1
- from pg_constraint
- where conname = 'profiles_id_fkey'
- ) then
- alter table public.profiles
- add constraint profiles_id_fkey
- foreign key (id) references auth.users(id)
- on delete cascade;
- end if;
-end $$;
-
--- Índices úteis
-create index if not exists profiles_role_idx on public.profiles(role);
-create index if not exists profiles_status_idx on public.profiles(status);
-
--- 2) Trigger updated_at
-drop trigger if exists t_profiles_set_updated_at on public.profiles;
-create trigger t_profiles_set_updated_at
-before update on public.profiles
-for each row execute function public.set_updated_at();
-
--- 3) Trigger pós-signup: cria profile automático
--- Observação: roda como SECURITY DEFINER
-create or replace function public.handle_new_user()
-returns trigger
-language plpgsql
-security definer
-set search_path = public
-as $$
-begin
- insert into public.profiles (id, email, role, status)
- values (new.id, new.email, 'patient', 'active')
- on conflict (id) do update
- set email = excluded.email;
-
- return new;
-end;
-$$;
-
-drop trigger if exists on_auth_user_created on auth.users;
-create trigger on_auth_user_created
-after insert on auth.users
-for each row execute function public.handle_new_user();
-
--- 4) RLS
-alter table public.profiles enable row level security;
-
--- Leitura do próprio profile
-drop policy if exists "profiles_select_own" on public.profiles;
-create policy "profiles_select_own"
-on public.profiles
-for select
-to authenticated
-using (id = auth.uid());
-
--- Update do próprio profile (campos não-sensíveis)
-drop policy if exists "profiles_update_own" on public.profiles;
-create policy "profiles_update_own"
-on public.profiles
-for update
-to authenticated
-using (id = auth.uid())
-with check (id = auth.uid());
-
--- Insert só do próprio (na prática quem insere é trigger, mas deixa coerente)
-drop policy if exists "profiles_insert_own" on public.profiles;
-create policy "profiles_insert_own"
-on public.profiles
-for insert
-to authenticated
-with check (id = auth.uid());
diff --git a/DBS/2026-03-11/src-sql-arquivos/supabase_cadastro_externo.sql b/DBS/2026-03-11/src-sql-arquivos/supabase_cadastro_externo.sql
deleted file mode 100644
index e9b170f..0000000
--- a/DBS/2026-03-11/src-sql-arquivos/supabase_cadastro_externo.sql
+++ /dev/null
@@ -1,212 +0,0 @@
--- =========================================================
--- Agência PSI Quasar — Cadastro Externo de Paciente (Supabase/Postgres)
--- Objetivo:
--- - Ter um link público com TOKEN que o terapeuta envia ao paciente
--- - Paciente preenche um formulário público
--- - Salva em "intake requests" (pré-cadastro)
--- - Terapeuta revisa e converte em paciente dentro do sistema
---
--- Tabelas:
--- - patient_invites
--- - patient_intake_requests
---
--- Funções:
--- - create_patient_intake_request (RPC pública - anon)
---
--- Segurança:
--- - RLS habilitada
--- - Público (anon) não lê nada, só executa RPC
--- - Terapeuta (authenticated) lê/atualiza somente seus registros
--- =========================================================
-
--- 0) Tabelas
-create table if not exists public.patient_invites (
- id uuid primary key default gen_random_uuid(),
- owner_id uuid not null,
- token text not null unique,
- active boolean not null default true,
- expires_at timestamptz null,
- max_uses int null,
- uses int not null default 0,
- created_at timestamptz not null default now()
-);
-
-create index if not exists patient_invites_owner_id_idx on public.patient_invites(owner_id);
-create index if not exists patient_invites_token_idx on public.patient_invites(token);
-
-create table if not exists public.patient_intake_requests (
- id uuid primary key default gen_random_uuid(),
- owner_id uuid not null,
- token text not null,
- name text not null,
- email text null,
- phone text null,
- notes text null,
- consent boolean not null default false,
- status text not null default 'new', -- new | converted | rejected
- created_at timestamptz not null default now()
-);
-
-create index if not exists patient_intake_owner_id_idx on public.patient_intake_requests(owner_id);
-create index if not exists patient_intake_token_idx on public.patient_intake_requests(token);
-create index if not exists patient_intake_status_idx on public.patient_intake_requests(status);
-
--- 1) RLS
-alter table public.patient_invites enable row level security;
-alter table public.patient_intake_requests enable row level security;
-
--- 2) Fechar acesso direto para anon (público)
-revoke all on table public.patient_invites from anon;
-revoke all on table public.patient_intake_requests from anon;
-
--- 3) Policies: terapeuta (authenticated) - somente próprios registros
-
--- patient_invites
-drop policy if exists invites_select_own on public.patient_invites;
-create policy invites_select_own
-on public.patient_invites for select
-to authenticated
-using (owner_id = auth.uid());
-
-drop policy if exists invites_insert_own on public.patient_invites;
-create policy invites_insert_own
-on public.patient_invites for insert
-to authenticated
-with check (owner_id = auth.uid());
-
-drop policy if exists invites_update_own on public.patient_invites;
-create policy invites_update_own
-on public.patient_invites for update
-to authenticated
-using (owner_id = auth.uid())
-with check (owner_id = auth.uid());
-
--- patient_intake_requests
-drop policy if exists intake_select_own on public.patient_intake_requests;
-create policy intake_select_own
-on public.patient_intake_requests for select
-to authenticated
-using (owner_id = auth.uid());
-
-drop policy if exists intake_update_own on public.patient_intake_requests;
-create policy intake_update_own
-on public.patient_intake_requests for update
-to authenticated
-using (owner_id = auth.uid())
-with check (owner_id = auth.uid());
-
--- 4) RPC pública para criar intake (página pública)
--- Importantíssimo: security definer + search_path fixo
-create or replace function public.create_patient_intake_request(
- p_token text,
- p_name text,
- p_email text default null,
- p_phone text default null,
- p_notes text default null,
- p_consent boolean default false
-)
-returns uuid
-language plpgsql
-security definer
-set search_path = public
-as $$
-declare
- v_owner uuid;
- v_active boolean;
- v_expires timestamptz;
- v_max_uses int;
- v_uses int;
- v_id uuid;
-begin
- select owner_id, active, expires_at, max_uses, uses
- into v_owner, v_active, v_expires, v_max_uses, v_uses
- from public.patient_invites
- where token = p_token
- limit 1;
-
- if v_owner is null then
- raise exception 'Token inválido';
- end if;
-
- if v_active is not true then
- raise exception 'Link desativado';
- end if;
-
- if v_expires is not null and now() > v_expires then
- raise exception 'Link expirado';
- end if;
-
- if v_max_uses is not null and v_uses >= v_max_uses then
- raise exception 'Limite de uso atingido';
- end if;
-
- if p_name is null or length(trim(p_name)) = 0 then
- raise exception 'Nome é obrigatório';
- end if;
-
- insert into public.patient_intake_requests
- (owner_id, token, name, email, phone, notes, consent, status)
- values
- (v_owner, p_token, trim(p_name),
- nullif(lower(trim(p_email)), ''),
- nullif(trim(p_phone), ''),
- nullif(trim(p_notes), ''),
- coalesce(p_consent, false),
- 'new')
- returning id into v_id;
-
- update public.patient_invites
- set uses = uses + 1
- where token = p_token;
-
- return v_id;
-end;
-$$;
-
-grant execute on function public.create_patient_intake_request(text, text, text, text, text, boolean) to anon;
-grant execute on function public.create_patient_intake_request(text, text, text, text, text, boolean) to authenticated;
-
--- 5) (Opcional) helper para rotacionar token no painel (somente authenticated)
--- Você pode usar no front via supabase.rpc('rotate_patient_invite_token')
-create or replace function public.rotate_patient_invite_token(
- p_new_token text
-)
-returns uuid
-language plpgsql
-security definer
-set search_path = public
-as $$
-declare
- v_uid uuid;
- v_id uuid;
-begin
- -- pega o usuário logado
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'Usuário não autenticado';
- end if;
-
- -- desativa tokens antigos ativos do usuário
- update public.patient_invites
- set active = false
- where owner_id = v_uid
- and active = true;
-
- -- cria novo token
- insert into public.patient_invites (owner_id, token, active)
- values (v_uid, p_new_token, true)
- returning id into v_id;
-
- return v_id;
-end;
-$$;
-
-grant execute on function public.rotate_patient_invite_token(text) to authenticated;
-
-grant select, insert, update, delete on table public.patient_invites to authenticated;
-grant select, insert, update, delete on table public.patient_intake_requests to authenticated;
-
--- anon não precisa acessar tabelas diretamente
-revoke all on table public.patient_invites from anon;
-revoke all on table public.patient_intake_requests from anon;
-
diff --git a/DBS/2026-03-11/src-sql-arquivos/supabase_cadastro_pacientes.sql b/DBS/2026-03-11/src-sql-arquivos/supabase_cadastro_pacientes.sql
deleted file mode 100644
index 4eb0d54..0000000
--- a/DBS/2026-03-11/src-sql-arquivos/supabase_cadastro_pacientes.sql
+++ /dev/null
@@ -1,266 +0,0 @@
--- =========================================================
--- PATCH — Completar cadastro para bater com PatientsCadastroPage.vue
--- (rode DEPOIS do seu supabase_cadastro_pacientes.sql)
--- =========================================================
-
-create extension if not exists pgcrypto;
-
--- ---------------------------------------------------------
--- 1) Completar colunas que o front usa e hoje faltam em patients
--- ---------------------------------------------------------
-do $$
-begin
- if not exists (
- select 1 from information_schema.columns
- where table_schema='public' and table_name='patients' and column_name='email_alt'
- ) then
- alter table public.patients add column email_alt text;
- end if;
-
- if not exists (
- select 1 from information_schema.columns
- where table_schema='public' and table_name='patients' and column_name='phones'
- ) then
- -- array de textos (Postgres). No JS você manda ["...","..."] normalmente.
- alter table public.patients add column phones text[];
- end if;
-
- if not exists (
- select 1 from information_schema.columns
- where table_schema='public' and table_name='patients' and column_name='gender'
- ) then
- alter table public.patients add column gender text;
- end if;
-
- if not exists (
- select 1 from information_schema.columns
- where table_schema='public' and table_name='patients' and column_name='marital_status'
- ) then
- alter table public.patients add column marital_status text;
- end if;
-end $$;
-
--- (opcional) índices úteis pra busca/filtro por nome/email
-create index if not exists idx_patients_owner_name on public.patients(owner_id, name);
-create index if not exists idx_patients_owner_email on public.patients(owner_id, email);
-
--- ---------------------------------------------------------
--- 2) patient_groups
--- ---------------------------------------------------------
-create table if not exists public.patient_groups (
- id uuid primary key default gen_random_uuid(),
- owner_id uuid not null references auth.users(id) on delete cascade,
- name text not null,
- color text,
- is_system boolean not null default false,
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now()
-);
-
--- nome único por owner
-do $$
-begin
- if not exists (
- select 1 from pg_constraint
- where conname = 'patient_groups_owner_name_uniq'
- and conrelid = 'public.patient_groups'::regclass
- ) then
- alter table public.patient_groups
- add constraint patient_groups_owner_name_uniq unique(owner_id, name);
- end if;
-end $$;
-
-drop trigger if exists trg_patient_groups_set_updated_at on public.patient_groups;
-create trigger trg_patient_groups_set_updated_at
-before update on public.patient_groups
-for each row execute function public.set_updated_at();
-
-create index if not exists idx_patient_groups_owner on public.patient_groups(owner_id);
-
-alter table public.patient_groups enable row level security;
-
-drop policy if exists "patient_groups_select_own" on public.patient_groups;
-create policy "patient_groups_select_own"
-on public.patient_groups for select
-to authenticated
-using (owner_id = auth.uid());
-
-drop policy if exists "patient_groups_insert_own" on public.patient_groups;
-create policy "patient_groups_insert_own"
-on public.patient_groups for insert
-to authenticated
-with check (owner_id = auth.uid());
-
-drop policy if exists "patient_groups_update_own" on public.patient_groups;
-create policy "patient_groups_update_own"
-on public.patient_groups for update
-to authenticated
-using (owner_id = auth.uid())
-with check (owner_id = auth.uid());
-
-drop policy if exists "patient_groups_delete_own" on public.patient_groups;
-create policy "patient_groups_delete_own"
-on public.patient_groups for delete
-to authenticated
-using (owner_id = auth.uid());
-
-grant select, insert, update, delete on public.patient_groups to authenticated;
-
--- ---------------------------------------------------------
--- 3) patient_tags
--- ---------------------------------------------------------
-create table if not exists public.patient_tags (
- id uuid primary key default gen_random_uuid(),
- owner_id uuid not null references auth.users(id) on delete cascade,
- name text not null,
- color text,
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now()
-);
-
-do $$
-begin
- if not exists (
- select 1 from pg_constraint
- where conname = 'patient_tags_owner_name_uniq'
- and conrelid = 'public.patient_tags'::regclass
- ) then
- alter table public.patient_tags
- add constraint patient_tags_owner_name_uniq unique(owner_id, name);
- end if;
-end $$;
-
-drop trigger if exists trg_patient_tags_set_updated_at on public.patient_tags;
-create trigger trg_patient_tags_set_updated_at
-before update on public.patient_tags
-for each row execute function public.set_updated_at();
-
-create index if not exists idx_patient_tags_owner on public.patient_tags(owner_id);
-
-alter table public.patient_tags enable row level security;
-
-drop policy if exists "patient_tags_select_own" on public.patient_tags;
-create policy "patient_tags_select_own"
-on public.patient_tags for select
-to authenticated
-using (owner_id = auth.uid());
-
-drop policy if exists "patient_tags_insert_own" on public.patient_tags;
-create policy "patient_tags_insert_own"
-on public.patient_tags for insert
-to authenticated
-with check (owner_id = auth.uid());
-
-drop policy if exists "patient_tags_update_own" on public.patient_tags;
-create policy "patient_tags_update_own"
-on public.patient_tags for update
-to authenticated
-using (owner_id = auth.uid())
-with check (owner_id = auth.uid());
-
-drop policy if exists "patient_tags_delete_own" on public.patient_tags;
-create policy "patient_tags_delete_own"
-on public.patient_tags for delete
-to authenticated
-using (owner_id = auth.uid());
-
-grant select, insert, update, delete on public.patient_tags to authenticated;
-
--- ---------------------------------------------------------
--- 4) pivôs (patient_group_patient / patient_patient_tag)
--- ---------------------------------------------------------
-create table if not exists public.patient_group_patient (
- patient_id uuid not null references public.patients(id) on delete cascade,
- patient_group_id uuid not null references public.patient_groups(id) on delete cascade,
- created_at timestamptz not null default now(),
- primary key (patient_id, patient_group_id)
-);
-
-create index if not exists idx_pgp_patient on public.patient_group_patient(patient_id);
-create index if not exists idx_pgp_group on public.patient_group_patient(patient_group_id);
-
-alter table public.patient_group_patient enable row level security;
-
--- a pivot “herda” tenant via join; policy usando exists pra validar owner do patient
-drop policy if exists "pgp_select_own" on public.patient_group_patient;
-create policy "pgp_select_own"
-on public.patient_group_patient for select
-to authenticated
-using (
- exists (
- select 1 from public.patients p
- where p.id = patient_group_patient.patient_id
- and p.owner_id = auth.uid()
- )
-);
-
-drop policy if exists "pgp_write_own" on public.patient_group_patient;
-create policy "pgp_write_own"
-on public.patient_group_patient for all
-to authenticated
-using (
- exists (
- select 1 from public.patients p
- where p.id = patient_group_patient.patient_id
- and p.owner_id = auth.uid()
- )
-)
-with check (
- exists (
- select 1 from public.patients p
- where p.id = patient_group_patient.patient_id
- and p.owner_id = auth.uid()
- )
-);
-
-grant select, insert, update, delete on public.patient_group_patient to authenticated;
-
--- tags pivot (ATENÇÃO: coluna é tag_id, como teu Vue usa!)
-create table if not exists public.patient_patient_tag (
- patient_id uuid not null references public.patients(id) on delete cascade,
- tag_id uuid not null references public.patient_tags(id) on delete cascade,
- created_at timestamptz not null default now(),
- primary key (patient_id, tag_id)
-);
-
-create index if not exists idx_ppt_patient on public.patient_patient_tag(patient_id);
-create index if not exists idx_ppt_tag on public.patient_patient_tag(tag_id);
-
-alter table public.patient_patient_tag enable row level security;
-
-drop policy if exists "ppt_select_own" on public.patient_patient_tag;
-create policy "ppt_select_own"
-on public.patient_patient_tag for select
-to authenticated
-using (
- exists (
- select 1 from public.patients p
- where p.id = patient_patient_tag.patient_id
- and p.owner_id = auth.uid()
- )
-);
-
-drop policy if exists "ppt_write_own" on public.patient_patient_tag;
-create policy "ppt_write_own"
-on public.patient_patient_tag for all
-to authenticated
-using (
- exists (
- select 1 from public.patients p
- where p.id = patient_patient_tag.patient_id
- and p.owner_id = auth.uid()
- )
-)
-with check (
- exists (
- select 1 from public.patients p
- where p.id = patient_patient_tag.patient_id
- and p.owner_id = auth.uid()
- )
-);
-
-grant select, insert, update, delete on public.patient_patient_tag to authenticated;
-
--- =========================================================
--- FIM PATCH
--- =========================================================
diff --git a/DBS/2026-03-11/src-sql-arquivos/supabase_cadastros_recebidos(intakes).sql b/DBS/2026-03-11/src-sql-arquivos/supabase_cadastros_recebidos(intakes).sql
deleted file mode 100644
index 3e43d42..0000000
--- a/DBS/2026-03-11/src-sql-arquivos/supabase_cadastros_recebidos(intakes).sql
+++ /dev/null
@@ -1,105 +0,0 @@
--- =========================================================
--- INTakes / Cadastros Recebidos - Supabase Local
--- =========================================================
-
--- 0) Extensões úteis (geralmente já existem no Supabase, mas é seguro)
-create extension if not exists pgcrypto;
-
--- 1) Função padrão para updated_at
-create or replace function public.set_updated_at()
-returns trigger
-language plpgsql
-as $$
-begin
- new.updated_at = now();
- return new;
-end;
-$$;
-
--- 2) Tabela patient_intake_requests (espelhando nuvem)
-create table if not exists public.patient_intake_requests (
- id uuid primary key default gen_random_uuid(),
- owner_id uuid not null,
- token text,
- name text,
- email text,
- phone text,
- notes text,
- consent boolean not null default false,
- status text not null default 'new',
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now(),
- payload jsonb
-);
-
--- 3) Índices (performance em listagem e filtros)
-create index if not exists idx_intakes_owner_created
- on public.patient_intake_requests (owner_id, created_at desc);
-
-create index if not exists idx_intakes_owner_status_created
- on public.patient_intake_requests (owner_id, status, created_at desc);
-
-create index if not exists idx_intakes_status_created
- on public.patient_intake_requests (status, created_at desc);
-
--- 4) Trigger updated_at
-drop trigger if exists trg_patient_intake_requests_updated_at on public.patient_intake_requests;
-
-create trigger trg_patient_intake_requests_updated_at
-before update on public.patient_intake_requests
-for each row execute function public.set_updated_at();
-
--- 5) RLS
-alter table public.patient_intake_requests enable row level security;
-
--- 6) Policies (iguais às que você mostrou na nuvem)
-drop policy if exists intake_select_own on public.patient_intake_requests;
-create policy intake_select_own
-on public.patient_intake_requests
-for select
-to authenticated
-using (owner_id = auth.uid());
-
-drop policy if exists intake_update_own on public.patient_intake_requests;
-create policy intake_update_own
-on public.patient_intake_requests
-for update
-to authenticated
-using (owner_id = auth.uid())
-with check (owner_id = auth.uid());
-
-drop policy if exists "delete own intake requests" on public.patient_intake_requests;
-create policy "delete own intake requests"
-on public.patient_intake_requests
-for delete
-to authenticated
-using (owner_id = auth.uid());
-
--- =========================================================
--- OPCIONAL (RECOMENDADO): registrar conversão
--- =========================================================
--- Se você pretende marcar intake como convertido e guardar o patient_id:
-alter table public.patient_intake_requests
- add column if not exists converted_patient_id uuid;
-
-create index if not exists idx_intakes_converted_patient_id
- on public.patient_intake_requests (converted_patient_id);
-
--- Opcional: impedir delete de intakes convertidos (melhor para auditoria)
--- (Se quiser manter delete liberado como na nuvem, comente este bloco.)
-drop policy if exists "delete own intake requests" on public.patient_intake_requests;
-create policy "delete_own_intakes_not_converted"
-on public.patient_intake_requests
-for delete
-to authenticated
-using (owner_id = auth.uid() and status <> 'converted');
-
--- =========================================================
--- OPCIONAL: check de status (evita status inválido)
--- =========================================================
-alter table public.patient_intake_requests
- drop constraint if exists chk_intakes_status;
-
-alter table public.patient_intake_requests
- add constraint chk_intakes_status
- check (status in ('new', 'converted', 'rejected'));
diff --git a/DBS/2026-03-11/src-sql-arquivos/supabase_patient_groups.sql b/DBS/2026-03-11/src-sql-arquivos/supabase_patient_groups.sql
deleted file mode 100644
index 08070b4..0000000
--- a/DBS/2026-03-11/src-sql-arquivos/supabase_patient_groups.sql
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- patient_groups_setup.sql
- Setup completo para:
- - public.patient_groups
- - public.patient_group_patient (tabela ponte)
- - view public.v_patient_groups_with_counts
- - índice único por owner + nome (case-insensitive)
- - 3 grupos padrão do sistema (Crianças, Adolescentes, Idosos) NÃO editáveis / NÃO removíveis
- - triggers de proteção
-
- Observação (importante):
- - Os grupos padrão são criados com owner_id = '00000000-0000-0000-0000-000000000000' (SYSTEM_OWNER),
- para ficarem "globais" e não dependerem de auth.uid() em migrations.
- - Se você quiser que os grupos padrão pertençam a um owner específico (tenant),
- basta trocar o SYSTEM_OWNER abaixo por esse UUID.
-*/
-
-begin;
-
--- ===========================
--- 0) Constante de "dono do sistema"
--- ===========================
--- Troque aqui se você quiser que os grupos padrão pertençam a um owner específico.
--- Ex.: '816b24fe-a0c3-4409-b79b-c6c0a6935d03'
-do $$
-begin
- -- só para documentar; não cria nada
-end $$;
-
--- ===========================
--- 1) Tabela principal: patient_groups
--- ===========================
-create table if not exists public.patient_groups (
- id uuid primary key default gen_random_uuid(),
- name text not null,
- description text,
- color text,
- is_active boolean not null default true,
- is_system boolean not null default false,
- owner_id uuid not null,
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now()
-);
-
--- (Opcional, mas recomendado) Garante que name não seja só espaços
--- e evita nomes vazios.
-alter table public.patient_groups
- drop constraint if exists patient_groups_name_not_blank_check;
-
-alter table public.patient_groups
- add constraint patient_groups_name_not_blank_check
- check (length(btrim(name)) > 0);
-
--- ===========================
--- 2) Tabela ponte: patient_group_patient
--- ===========================
--- Se você já tiver essa tabela com FKs, ajuste aqui conforme seu schema.
-create table if not exists public.patient_group_patient (
- patient_group_id uuid not null references public.patient_groups(id) on delete cascade,
- patient_id uuid not null references public.patients(id) on delete cascade,
- created_at timestamptz not null default now()
-);
-
--- Evita duplicar vínculo paciente<->grupo
-create unique index if not exists patient_group_patient_unique
-on public.patient_group_patient (patient_group_id, patient_id);
-
--- ===========================
--- 3) View com contagem
--- ===========================
-create or replace view public.v_patient_groups_with_counts as
-select
- g.*,
- coalesce(count(distinct pgp.patient_id), 0)::int as patients_count
-from public.patient_groups g
-left join public.patient_group_patient pgp
- on pgp.patient_group_id = g.id
-group by g.id;
-
--- ===========================
--- 4) Índice único: não permitir mesmo nome por owner (case-insensitive)
--- ===========================
--- Atenção: se já existirem duplicados, este índice pode falhar ao criar.
-create unique index if not exists patient_groups_owner_name_unique
-on public.patient_groups (owner_id, (lower(name)));
-
--- ===========================
--- 5) Triggers de proteção: system não edita / não remove
--- ===========================
-create or replace function public.prevent_system_group_changes()
-returns trigger
-language plpgsql
-as $$
-begin
- if old.is_system = true then
- raise exception 'Grupos padrão do sistema não podem ser alterados ou excluídos.';
- end if;
-
- if tg_op = 'DELETE' then
- return old;
- end if;
-
- return new;
-end;
-$$;
-
-drop trigger if exists trg_prevent_system_group_changes on public.patient_groups;
-
-create trigger trg_prevent_system_group_changes
-before update or delete on public.patient_groups
-for each row
-execute function public.prevent_system_group_changes();
-
--- Impede "promover" um grupo comum para system
-create or replace function public.prevent_promoting_to_system()
-returns trigger
-language plpgsql
-as $$
-begin
- if new.is_system = true and old.is_system is distinct from true then
- raise exception 'Não é permitido transformar um grupo comum em grupo do sistema.';
- end if;
- return new;
-end;
-$$;
-
-drop trigger if exists trg_prevent_promoting_to_system on public.patient_groups;
-
-create trigger trg_prevent_promoting_to_system
-before update on public.patient_groups
-for each row
-execute function public.prevent_promoting_to_system();
-
--- ===========================
--- 6) Inserir 3 grupos padrão (imutáveis)
--- ===========================
--- Dono "global" do sistema (mude se quiser):
--- 00000000-0000-0000-0000-000000000000
-with sys_owner as (
- select '00000000-0000-0000-0000-000000000000'::uuid as owner_id
-)
-insert into public.patient_groups (name, description, color, is_active, is_system, owner_id)
-select v.name, v.description, v.color, v.is_active, v.is_system, s.owner_id
-from sys_owner s
-join (values
- ('Crianças', 'Grupo padrão do sistema', null, true, true),
- ('Adolescentes', 'Grupo padrão do sistema', null, true, true),
- ('Idosos', 'Grupo padrão do sistema', null, true, true)
-) as v(name, description, color, is_active, is_system)
-on true
-where not exists (
- select 1
- from public.patient_groups g
- where g.owner_id = s.owner_id
- and lower(g.name) = lower(v.name)
-);
-
-commit;
-
-/*
- Testes rápidos:
- 1) Ver tudo:
- select * from public.v_patient_groups_with_counts order by is_system desc, name;
-
- 2) Tentar editar um system (deve falhar):
- update public.patient_groups set name='X' where name='Crianças';
-
- 3) Tentar deletar um system (deve falhar):
- delete from public.patient_groups where name='Crianças';
-
- 4) Tentar duplicar nome no mesmo owner (deve falhar por índice único):
- insert into public.patient_groups (name, is_active, is_system, owner_id)
- values ('teste22', true, false, '816b24fe-a0c3-4409-b79b-c6c0a6935d03');
-*/
diff --git a/DBS/2026-03-11/src-sql-arquivos/supabase_patient_index_page.sql b/DBS/2026-03-11/src-sql-arquivos/supabase_patient_index_page.sql
deleted file mode 100644
index 6a6dbd5..0000000
--- a/DBS/2026-03-11/src-sql-arquivos/supabase_patient_index_page.sql
+++ /dev/null
@@ -1,147 +0,0 @@
--- =========================================================
--- pacientesIndexPage.sql
--- Views + índices para a tela PatientsListPage
--- =========================================================
-
--- 0) Extensões úteis
-create extension if not exists pg_trgm;
-
--- 1) updated_at automático (se você quiser manter updated_at sempre correto)
-create or replace function public.set_updated_at()
-returns trigger
-language plpgsql
-as $$
-begin
- new.updated_at = now();
- return new;
-end;
-$$;
-
-drop trigger if exists trg_patients_set_updated_at on public.patients;
-create trigger trg_patients_set_updated_at
-before update on public.patients
-for each row execute function public.set_updated_at();
-
-
--- =========================================================
--- 2) Views de contagem (usadas em KPIs e telas auxiliares)
--- =========================================================
-
--- 2.1) Grupos com contagem de pacientes
-create or replace view public.v_patient_groups_with_counts as
-select
- g.id,
- g.name,
- g.color,
- coalesce(count(pgp.patient_id), 0)::int as patients_count
-from public.patient_groups g
-left join public.patient_group_patient pgp
- on pgp.patient_group_id = g.id
-group by g.id, g.name, g.color;
-
--- 2.2) Tags com contagem de pacientes
-create or replace view public.v_tag_patient_counts as
-select
- t.id,
- t.name,
- t.color,
- coalesce(count(ppt.patient_id), 0)::int as patients_count
-from public.patient_tags t
-left join public.patient_patient_tag ppt
- on ppt.tag_id = t.id
-group by t.id, t.name, t.color;
-
-
--- =========================================================
--- 3) View principal da Index (pacientes + grupos/tags agregados)
--- =========================================================
-
-create or replace view public.v_patients_index as
-select
- p.*,
-
- -- array JSON com os grupos do paciente
- coalesce(gx.groups, '[]'::jsonb) as groups,
-
- -- array JSON com as tags do paciente
- coalesce(tx.tags, '[]'::jsonb) as tags,
-
- -- contagens para UI/KPIs
- coalesce(gx.groups_count, 0)::int as groups_count,
- coalesce(tx.tags_count, 0)::int as tags_count
-
-from public.patients p
-
-left join lateral (
- select
- jsonb_agg(
- distinct jsonb_build_object(
- 'id', g.id,
- 'name', g.name,
- 'color', g.color
- )
- ) filter (where g.id is not null) as groups,
- count(distinct g.id) as groups_count
- from public.patient_group_patient pgp
- join public.patient_groups g
- on g.id = pgp.patient_group_id
- where pgp.patient_id = p.id
-) gx on true
-
-left join lateral (
- select
- jsonb_agg(
- distinct jsonb_build_object(
- 'id', t.id,
- 'name', t.name,
- 'color', t.color
- )
- ) filter (where t.id is not null) as tags,
- count(distinct t.id) as tags_count
- from public.patient_patient_tag ppt
- join public.patient_tags t
- on t.id = ppt.tag_id
- where ppt.patient_id = p.id
-) tx on true;
-
-
--- =========================================================
--- 4) Índices recomendados (performance real na listagem/filtros)
--- =========================================================
-
--- Patients
-create index if not exists idx_patients_owner_id
- on public.patients (owner_id);
-
-create index if not exists idx_patients_created_at
- on public.patients (created_at desc);
-
-create index if not exists idx_patients_status
- on public.patients (status);
-
-create index if not exists idx_patients_last_attended_at
- on public.patients (last_attended_at desc);
-
--- Busca rápida (name/email/phone)
-create index if not exists idx_patients_name_trgm
- on public.patients using gin (name gin_trgm_ops);
-
-create index if not exists idx_patients_email_trgm
- on public.patients using gin (email gin_trgm_ops);
-
-create index if not exists idx_patients_phone_trgm
- on public.patients using gin (phone gin_trgm_ops);
-
--- Pivot: grupos
-create index if not exists idx_pgp_patient_id
- on public.patient_group_patient (patient_id);
-
-create index if not exists idx_pgp_group_id
- on public.patient_group_patient (patient_group_id);
-
--- Pivot: tags
-create index if not exists idx_ppt_patient_id
- on public.patient_patient_tag (patient_id);
-
-create index if not exists idx_ppt_tag_id
- on public.patient_patient_tag (tag_id);
diff --git a/DBS/2026-03-11/src-sql-arquivos/supabase_patients_populate.sql b/DBS/2026-03-11/src-sql-arquivos/supabase_patients_populate.sql
deleted file mode 100644
index e69de29..0000000
diff --git a/DBS/2026-03-11/src-sql-arquivos/supabase_tags.sql b/DBS/2026-03-11/src-sql-arquivos/supabase_tags.sql
deleted file mode 100644
index 42668af..0000000
--- a/DBS/2026-03-11/src-sql-arquivos/supabase_tags.sql
+++ /dev/null
@@ -1,134 +0,0 @@
-create extension if not exists pgcrypto;
-
--- ===============================
--- TABELA: patient_tags
--- ===============================
-create table if not exists public.patient_tags (
- id uuid primary key default gen_random_uuid(),
- owner_id uuid not null,
- name text not null,
- color text,
- is_native boolean not null default false,
- created_at timestamptz not null default now(),
- updated_at timestamptz
-);
-
-create unique index if not exists patient_tags_owner_name_uq
- on public.patient_tags (owner_id, lower(name));
-
--- ===============================
--- TABELA: patient_patient_tag (pivot)
--- ===============================
-create table if not exists public.patient_patient_tag (
- owner_id uuid not null,
- patient_id uuid not null,
- tag_id uuid not null,
- created_at timestamptz not null default now(),
- primary key (patient_id, tag_id)
-);
-
-create index if not exists ppt_owner_idx on public.patient_patient_tag(owner_id);
-create index if not exists ppt_tag_idx on public.patient_patient_tag(tag_id);
-create index if not exists ppt_patient_idx on public.patient_patient_tag(patient_id);
-
--- ===============================
--- FOREIGN KEYS (com checagem)
--- ===============================
-do $$
-begin
- if not exists (
- select 1 from pg_constraint
- where conname = 'ppt_tag_fk'
- and conrelid = 'public.patient_patient_tag'::regclass
- ) then
- alter table public.patient_patient_tag
- add constraint ppt_tag_fk
- foreign key (tag_id)
- references public.patient_tags(id)
- on delete cascade;
- end if;
-end $$;
-
-do $$
-begin
- if not exists (
- select 1 from pg_constraint
- where conname = 'ppt_patient_fk'
- and conrelid = 'public.patient_patient_tag'::regclass
- ) then
- alter table public.patient_patient_tag
- add constraint ppt_patient_fk
- foreign key (patient_id)
- references public.patients(id)
- on delete cascade;
- end if;
-end $$;
-
--- ===============================
--- VIEW: contagem por tag
--- ===============================
-create or replace view public.v_tag_patient_counts as
-select
- t.id,
- t.owner_id,
- t.name,
- t.color,
- t.is_native,
- t.created_at,
- t.updated_at,
- coalesce(count(ppt.patient_id), 0)::int as patient_count
-from public.patient_tags t
-left join public.patient_patient_tag ppt
- on ppt.tag_id = t.id
- and ppt.owner_id = t.owner_id
-group by
- t.id, t.owner_id, t.name, t.color, t.is_native, t.created_at, t.updated_at;
-
--- ===============================
--- RLS
--- ===============================
-alter table public.patient_tags enable row level security;
-alter table public.patient_patient_tag enable row level security;
-
-drop policy if exists tags_select_own on public.patient_tags;
-create policy tags_select_own
-on public.patient_tags
-for select
-using (owner_id = auth.uid());
-
-drop policy if exists tags_insert_own on public.patient_tags;
-create policy tags_insert_own
-on public.patient_tags
-for insert
-with check (owner_id = auth.uid());
-
-drop policy if exists tags_update_own on public.patient_tags;
-create policy tags_update_own
-on public.patient_tags
-for update
-using (owner_id = auth.uid())
-with check (owner_id = auth.uid());
-
-drop policy if exists tags_delete_own on public.patient_tags;
-create policy tags_delete_own
-on public.patient_tags
-for delete
-using (owner_id = auth.uid());
-
-drop policy if exists ppt_select_own on public.patient_patient_tag;
-create policy ppt_select_own
-on public.patient_patient_tag
-for select
-using (owner_id = auth.uid());
-
-drop policy if exists ppt_insert_own on public.patient_patient_tag;
-create policy ppt_insert_own
-on public.patient_patient_tag
-for insert
-with check (owner_id = auth.uid());
-
-drop policy if exists ppt_delete_own on public.patient_patient_tag;
-create policy ppt_delete_own
-on public.patient_patient_tag
-for delete
-using (owner_id = auth.uid());
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 116.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 116.sql
deleted file mode 100644
index a623ce1..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 116.sql
+++ /dev/null
@@ -1,2 +0,0 @@
- ALTER TABLE public.agenda_configuracoes DROP COLUMN IF EXISTS
- session_start_offset_min;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 130.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 130.sql
deleted file mode 100644
index 9262341..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 130.sql
+++ /dev/null
@@ -1 +0,0 @@
-select pg_get_functiondef('public.NOME_DA_FUNCAO(args_aqui)'::regprocedure);
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 132.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 132.sql
deleted file mode 100644
index 4e31c77..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 132.sql
+++ /dev/null
@@ -1,45 +0,0 @@
--- 1) Tabela profiles
-create table if not exists public.profiles (
- id uuid primary key references auth.users(id) on delete cascade,
- role text not null default 'patient' check (role in ('admin','therapist','patient')),
- full_name text,
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now()
-);
-
--- 2) updated_at automático
-create or replace function public.set_updated_at()
-returns trigger
-language plpgsql
-as $$
-begin
- new.updated_at = now();
- return new;
-end;
-$$;
-
-drop trigger if exists trg_profiles_updated_at on public.profiles;
-create trigger trg_profiles_updated_at
-before update on public.profiles
-for each row execute function public.set_updated_at();
-
--- 3) Trigger: cria profile automaticamente quando usuário nasce no auth
-create or replace function public.handle_new_user()
-returns trigger
-language plpgsql
-security definer
-set search_path = public
-as $$
-begin
- insert into public.profiles (id, role)
- values (new.id, 'patient')
- on conflict (id) do nothing;
-
- return new;
-end;
-$$;
-
-drop trigger if exists on_auth_user_created on auth.users;
-create trigger on_auth_user_created
-after insert on auth.users
-for each row execute function public.handle_new_user();
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 157.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 157.sql
deleted file mode 100644
index e6e3802..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 157.sql
+++ /dev/null
@@ -1,20 +0,0 @@
-do $$
-begin
- if exists (
- select 1
- from information_schema.columns
- where table_schema = 'public'
- and table_name = 'patient_patient_tag'
- and column_name = 'patient_tag_id'
- )
- and not exists (
- select 1
- from information_schema.columns
- where table_schema = 'public'
- and table_name = 'patient_patient_tag'
- and column_name = 'tag_id'
- ) then
- alter table public.patient_patient_tag
- rename column patient_tag_id to tag_id;
- end if;
-end $$;
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 159.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 159.sql
deleted file mode 100644
index 6ca2eb5..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 159.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-insert into public.profiles (id, role)
-select u.id, 'patient'
-from auth.users u
-left join public.profiles p on p.id = u.id
-where p.id is null;
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 174.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 174.sql
deleted file mode 100644
index d6098a6..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 174.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-select
- id, name, email, phone,
- birth_date, cpf, rg, gender,
- marital_status, profession,
- place_of_birth, education_level,
- cep, address_street, address_number,
- address_neighborhood, address_city, address_state,
- phone_alt,
- notes, consent, created_at
-from public.patient_intake_requests
-order by created_at desc
-limit 1;
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 209.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 209.sql
deleted file mode 100644
index 24e9855..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 209.sql
+++ /dev/null
@@ -1,23 +0,0 @@
-create or replace function public.agenda_cfg_sync()
-returns trigger
-language plpgsql
-as $$
-begin
- if new.agenda_view_mode = 'custom' then
- new.usar_horario_admin_custom := true;
- new.admin_inicio_visualizacao := new.agenda_custom_start;
- new.admin_fim_visualizacao := new.agenda_custom_end;
- else
- new.usar_horario_admin_custom := false;
- end if;
-
- return new;
-end;
-$$;
-
-drop trigger if exists trg_agenda_cfg_sync on public.agenda_configuracoes;
-
-create trigger trg_agenda_cfg_sync
-before insert or update on public.agenda_configuracoes
-for each row
-execute function public.agenda_cfg_sync();
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 216.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 216.sql
deleted file mode 100644
index 090476f..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 216.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-drop index if exists public.uq_subscriptions_tenant;
-drop index if exists public.uq_subscriptions_personal_user;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 219.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 219.sql
deleted file mode 100644
index 610a5b1..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 219.sql
+++ /dev/null
@@ -1,6 +0,0 @@
--- Limpa TUDO da agenda (eventos, regras, exceções)
--- Execute no Supabase Studio — não tem volta!
-
-DELETE FROM recurrence_exceptions;
-DELETE FROM recurrence_rules;
-DELETE FROM agenda_eventos;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 221.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 221.sql
deleted file mode 100644
index f80fe77..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 221.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-select
- t.tgname as trigger_name,
- pg_get_triggerdef(t.oid) as trigger_def,
- p.proname as function_name,
- n.nspname as function_schema
-from pg_trigger t
-join pg_proc p on p.oid = t.tgfoid
-join pg_namespace n on n.oid = p.pronamespace
-join pg_class c on c.oid = t.tgrelid
-where not t.tgisinternal
- and c.relname = 'patient_intake_requests'
-order by t.tgname;
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 235.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 235.sql
deleted file mode 100644
index d99d5cf..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 235.sql
+++ /dev/null
@@ -1,46 +0,0 @@
--- ============================================================
- -- LIMPEZA DE DADOS DE TESTE — filtra por tenant/owner
- -- Execute no Supabase Studio com cuidado -- ============================================================
- DO $$ DECLARE
- v_tenant_id uuid := 'bbbbbbbb-0002-0002-0002-000000000002';
- v_owner_id uuid := 'aaaaaaaa-0002-0002-0002-000000000002';
- n_exc int;
- n_ev int;
- n_rule int;
- n_sol int;
- BEGIN
-
- -- 1. Exceções (filha de recurrence_rules — apagar primeiro)
- DELETE FROM public.recurrence_exceptions
- WHERE recurrence_id IN (
- SELECT id FROM public.recurrence_rules
- WHERE (v_tenant_id IS NULL OR tenant_id = v_tenant_id)
- AND (v_owner_id IS NULL OR owner_id = v_owner_id)
- );
- GET DIAGNOSTICS n_exc = ROW_COUNT;
-
- -- 2. Regras de recorrência
- DELETE FROM public.recurrence_rules
- WHERE (v_tenant_id IS NULL OR tenant_id = v_tenant_id)
- AND (v_owner_id IS NULL OR owner_id = v_owner_id);
- GET DIAGNOSTICS n_rule = ROW_COUNT;
-
- -- 3. Eventos da agenda
- DELETE FROM public.agenda_eventos
- WHERE (v_tenant_id IS NULL OR tenant_id = v_tenant_id)
- AND (v_owner_id IS NULL OR owner_id = v_owner_id);
- GET DIAGNOSTICS n_ev = ROW_COUNT;
-
- -- 4. Solicitações públicas (agendador online)
- DELETE FROM public.agendador_solicitacoes
- WHERE (v_tenant_id IS NULL OR tenant_id = v_tenant_id)
- AND (v_owner_id IS NULL OR owner_id = v_owner_id);
- GET DIAGNOSTICS n_sol = ROW_COUNT;
-
- RAISE NOTICE '✅ Limpeza concluída:';
- RAISE NOTICE ' recurrence_exceptions : %', n_exc;
- RAISE NOTICE ' recurrence_rules : %', n_rule;
- RAISE NOTICE ' agenda_eventos : %', n_ev;
- RAISE NOTICE ' agendador_solicitacoes : %', n_sol;
- END;
- $$;
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 271.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 271.sql
deleted file mode 100644
index a658306..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 271.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-select
- id as tenant_member_id,
- tenant_id,
- user_id,
- role,
- status,
- created_at
-from public.tenant_members
-where user_id = '824f125c-55bb-40f5-a8c4-7a33618b91c7'
-order by created_at desc;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 277.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 277.sql
deleted file mode 100644
index 24ec0cb..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 277.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-select *
-from agenda_eventos
-order by created_at desc nulls last
-limit 10;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 319.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 319.sql
deleted file mode 100644
index 6ee16fd..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 319.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-select
- routine_name,
- routine_type
-from information_schema.routines
-where routine_schema = 'public'
- and routine_name ilike '%intake%';
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 323.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 323.sql
deleted file mode 100644
index 24bb689..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 323.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-select id as owner_id, email, created_at
-from auth.users
-where email = 'admin@agendapsi.com.br'
-limit 1;
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 324.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 324.sql
deleted file mode 100644
index 178f63a..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 324.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-select
- id,
- owner_id,
- status,
- created_at,
- converted_patient_id
-from public.patient_intake_requests
-where id = '54daa09a-b2cb-4a0b-91aa-e4cea1915efe';
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 330.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 330.sql
deleted file mode 100644
index 28ae3d2..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 330.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-select f.key as feature_key
-from public.plan_features pf
-join public.features f on f.id = pf.feature_id
-where pf.plan_id = 'fdc2813d-dfaa-4e2c-b71d-ef7b84dfd9e9'
- and pf.enabled = true
-order by f.key;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 361.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 361.sql
deleted file mode 100644
index a339a14..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 361.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-select id, key, name
-from public.plans
-order by key;
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 376.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 376.sql
deleted file mode 100644
index cbfe1ee..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 376.sql
+++ /dev/null
@@ -1 +0,0 @@
- SELECT * FROM public.agendador_solicitacoes LIMIT 5;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 431.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 431.sql
deleted file mode 100644
index 8acc511..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 431.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-select table_schema, table_name, column_name
-from information_schema.columns
-where column_name in ('owner_id', 'tenant_id')
- and table_schema = 'public'
-order by table_name;
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 437.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 437.sql
deleted file mode 100644
index 5418bb1..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 437.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-alter table public.patient_groups enable row level security;
-
-drop policy if exists patient_groups_select on public.patient_groups;
-
-create policy patient_groups_select
-on public.patient_groups
-for select
-to authenticated
-using (
- owner_id = auth.uid()
- or owner_id is null
-);
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 439.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 439.sql
deleted file mode 100644
index cfb5556..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 439.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- select *
-from public.owner_feature_entitlements
-where owner_id = '816b24fe-a0c3-4409-b79b-c6c0a6935d03'::uuid
-order by feature_key;
-
-select public.has_feature('816b24fe-a0c3-4409-b79b-c6c0a6935d03'::uuid, 'online_scheduling.manage') as can_manage;
-
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 449.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 449.sql
deleted file mode 100644
index 1fad21f..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 449.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-create index if not exists idx_patient_group_patient_group_id
- on public.patient_group_patient (patient_group_id);
-
-create index if not exists idx_patient_groups_owner_system_nome
- on public.patient_groups (owner_id, is_system, nome);
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 457.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 457.sql
deleted file mode 100644
index 721fd3c..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 457.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- 1) Marcar como SaaS master
-insert into public.saas_admins (user_id)
-values ('40a4b683-a0c9-4890-a201-20faf41fca06')
-on conflict (user_id) do nothing;
-
--- 2) Garantir profile (seu session.js busca role em profiles)
-insert into public.profiles (id, role)
-values ('40a4b683-a0c9-4890-a201-20faf41fca06', 'saas_admin')
-on conflict (id) do update set role = excluded.role;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 468.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 468.sql
deleted file mode 100644
index 5bbc486..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 468.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-select *
-from public.owner_feature_entitlements
-where owner_id = '816b24fe-a0c3-4409-b79b-c6c0a6935d03'::uuid
-order by feature_key;
-
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 476.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 476.sql
deleted file mode 100644
index 6fca30d..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 476.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-select column_name, data_type
-from information_schema.columns
-where table_schema = 'public'
- and table_name = 'patient_patient_tag'
-order by ordinal_position;
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 508.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 508.sql
deleted file mode 100644
index 5aedcee..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 508.sql
+++ /dev/null
@@ -1,18 +0,0 @@
-create or replace function public.prevent_promoting_to_system()
-returns trigger
-language plpgsql
-as $$
-begin
- if new.is_system = true and old.is_system is distinct from true then
- raise exception 'Não é permitido transformar um grupo comum em grupo do sistema.';
- end if;
- return new;
-end;
-$$;
-
-drop trigger if exists trg_prevent_promoting_to_system on public.patient_groups;
-
-create trigger trg_prevent_promoting_to_system
-before update on public.patient_groups
-for each row
-execute function public.prevent_promoting_to_system();
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 521.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 521.sql
deleted file mode 100644
index a104170..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 521.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-select id, tenant_id, user_id, role, status, created_at
-from tenant_members
-where user_id = '1715ec83-9a30-4dce-b73a-2deb66dcfb13'
-order by created_at desc;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 566.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 566.sql
deleted file mode 100644
index 22e0403..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 566.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-const { data, error } = await supabase.rpc('my_tenants')
-console.log({ data, error })
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 633.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 633.sql
deleted file mode 100644
index 7cccd7a..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 633.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-select id, tenant_id, user_id, role, status, created_at
-from tenant_members
-where tenant_id = '816b24fe-a0c3-4409-b79b-c6c0a6935d03'::uuid
-order by
- (case when role = 'clinic_admin' then 0 else 1 end),
- created_at;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 641.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 641.sql
deleted file mode 100644
index a8677bd..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 641.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- Para o tenant A:
-select id as responsible_member_id
-from public.tenant_members
-where tenant_id = '816b24fe-a0c3-4409-b79b-c6c0a6935d03'
- and user_id = '824f125c-55bb-40f5-a8c4-7a33618b91c7'
- and status = 'active'
-limit 1;
-
--- Para o tenant B:
-select id as responsible_member_id
-from public.tenant_members
-where tenant_id = 'e8b10543-fb36-4e75-9d37-6fece9745637'
- and user_id = '824f125c-55bb-40f5-a8c4-7a33618b91c7'
- and status = 'active'
-limit 1;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 649.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 649.sql
deleted file mode 100644
index b4fa608..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 649.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-select id, name, kind, created_at
-from public.tenants
-order by created_at desc
-limit 10;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 677.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 677.sql
deleted file mode 100644
index a4d6756..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 677.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-select id as member_id
-from tenant_members
-where tenant_id = '816b24fe-a0c3-4409-b79b-c6c0a6935d03'
- and user_id = '824f125c-55bb-40f5-a8c4-7a33618b91c7'
-limit 1;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 744.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 744.sql
deleted file mode 100644
index 096d873..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 744.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-insert into public.users (id, created_at)
-values ('e8b10543-fb36-4e75-9d37-6fece9745637', now());
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 781.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 781.sql
deleted file mode 100644
index e455447..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 781.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-select *
-from public.tenant_members
-where tenant_id = 'UUID_AQUI'
-order by created_at desc;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 790.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 790.sql
deleted file mode 100644
index a7c1bba..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 790.sql
+++ /dev/null
@@ -1,17 +0,0 @@
-create table if not exists public.subscriptions (
- id uuid primary key default gen_random_uuid(),
- user_id uuid not null references auth.users(id) on delete cascade,
- plan_key text not null,
- interval text not null check (interval in ('month','year')),
- status text not null check (status in ('active','canceled','past_due','trial')) default 'active',
- started_at timestamptz not null default now(),
- current_period_start timestamptz not null default now(),
- current_period_end timestamptz null,
- canceled_at timestamptz null,
- source text not null default 'manual',
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now()
-);
-
-create index if not exists subscriptions_user_id_idx on public.subscriptions(user_id);
-create index if not exists subscriptions_status_idx on public.subscriptions(status);
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 830.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 830.sql
deleted file mode 100644
index 16f2509..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 830.sql
+++ /dev/null
@@ -1,13 +0,0 @@
--- Ver todas as regras no banco
-SELECT
- id,
- owner_id,
- status,
- type,
- weekdays,
- start_date,
- end_date,
- start_time,
- created_at
-FROM recurrence_rules
-ORDER BY created_at DESC;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 843.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 843.sql
deleted file mode 100644
index 1f210fe..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 843.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-select id, name, created_at
-from public.tenants
-order by created_at desc;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 856.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 856.sql
deleted file mode 100644
index 2984797..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 856.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-alter table public.profiles enable row level security;
-
-drop policy if exists "profiles_select_own" on public.profiles;
-create policy "profiles_select_own"
-on public.profiles
-for select
-to authenticated
-using (id = auth.uid());
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 869.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 869.sql
deleted file mode 100644
index ebd1632..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 869.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- 2) Tenho membership ativa no tenant atual?
-select *
-from tenant_members
-where tenant_id = 'e8b10543-fb36-4e75-9d37-6fece9745637'
- and user_id = auth.uid()
-order by created_at desc;
-
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 880.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 880.sql
deleted file mode 100644
index 9fe1f32..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 880.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-select
- n.nspname as schema,
- p.proname as function_name,
- pg_get_functiondef(p.oid) as definition
-from pg_proc p
-join pg_namespace n on n.oid = p.pronamespace
-where n.nspname = 'public'
- and pg_get_functiondef(p.oid) ilike '%entitlements_invalidation%';
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 886.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 886.sql
deleted file mode 100644
index 4eb0d54..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 886.sql
+++ /dev/null
@@ -1,266 +0,0 @@
--- =========================================================
--- PATCH — Completar cadastro para bater com PatientsCadastroPage.vue
--- (rode DEPOIS do seu supabase_cadastro_pacientes.sql)
--- =========================================================
-
-create extension if not exists pgcrypto;
-
--- ---------------------------------------------------------
--- 1) Completar colunas que o front usa e hoje faltam em patients
--- ---------------------------------------------------------
-do $$
-begin
- if not exists (
- select 1 from information_schema.columns
- where table_schema='public' and table_name='patients' and column_name='email_alt'
- ) then
- alter table public.patients add column email_alt text;
- end if;
-
- if not exists (
- select 1 from information_schema.columns
- where table_schema='public' and table_name='patients' and column_name='phones'
- ) then
- -- array de textos (Postgres). No JS você manda ["...","..."] normalmente.
- alter table public.patients add column phones text[];
- end if;
-
- if not exists (
- select 1 from information_schema.columns
- where table_schema='public' and table_name='patients' and column_name='gender'
- ) then
- alter table public.patients add column gender text;
- end if;
-
- if not exists (
- select 1 from information_schema.columns
- where table_schema='public' and table_name='patients' and column_name='marital_status'
- ) then
- alter table public.patients add column marital_status text;
- end if;
-end $$;
-
--- (opcional) índices úteis pra busca/filtro por nome/email
-create index if not exists idx_patients_owner_name on public.patients(owner_id, name);
-create index if not exists idx_patients_owner_email on public.patients(owner_id, email);
-
--- ---------------------------------------------------------
--- 2) patient_groups
--- ---------------------------------------------------------
-create table if not exists public.patient_groups (
- id uuid primary key default gen_random_uuid(),
- owner_id uuid not null references auth.users(id) on delete cascade,
- name text not null,
- color text,
- is_system boolean not null default false,
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now()
-);
-
--- nome único por owner
-do $$
-begin
- if not exists (
- select 1 from pg_constraint
- where conname = 'patient_groups_owner_name_uniq'
- and conrelid = 'public.patient_groups'::regclass
- ) then
- alter table public.patient_groups
- add constraint patient_groups_owner_name_uniq unique(owner_id, name);
- end if;
-end $$;
-
-drop trigger if exists trg_patient_groups_set_updated_at on public.patient_groups;
-create trigger trg_patient_groups_set_updated_at
-before update on public.patient_groups
-for each row execute function public.set_updated_at();
-
-create index if not exists idx_patient_groups_owner on public.patient_groups(owner_id);
-
-alter table public.patient_groups enable row level security;
-
-drop policy if exists "patient_groups_select_own" on public.patient_groups;
-create policy "patient_groups_select_own"
-on public.patient_groups for select
-to authenticated
-using (owner_id = auth.uid());
-
-drop policy if exists "patient_groups_insert_own" on public.patient_groups;
-create policy "patient_groups_insert_own"
-on public.patient_groups for insert
-to authenticated
-with check (owner_id = auth.uid());
-
-drop policy if exists "patient_groups_update_own" on public.patient_groups;
-create policy "patient_groups_update_own"
-on public.patient_groups for update
-to authenticated
-using (owner_id = auth.uid())
-with check (owner_id = auth.uid());
-
-drop policy if exists "patient_groups_delete_own" on public.patient_groups;
-create policy "patient_groups_delete_own"
-on public.patient_groups for delete
-to authenticated
-using (owner_id = auth.uid());
-
-grant select, insert, update, delete on public.patient_groups to authenticated;
-
--- ---------------------------------------------------------
--- 3) patient_tags
--- ---------------------------------------------------------
-create table if not exists public.patient_tags (
- id uuid primary key default gen_random_uuid(),
- owner_id uuid not null references auth.users(id) on delete cascade,
- name text not null,
- color text,
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now()
-);
-
-do $$
-begin
- if not exists (
- select 1 from pg_constraint
- where conname = 'patient_tags_owner_name_uniq'
- and conrelid = 'public.patient_tags'::regclass
- ) then
- alter table public.patient_tags
- add constraint patient_tags_owner_name_uniq unique(owner_id, name);
- end if;
-end $$;
-
-drop trigger if exists trg_patient_tags_set_updated_at on public.patient_tags;
-create trigger trg_patient_tags_set_updated_at
-before update on public.patient_tags
-for each row execute function public.set_updated_at();
-
-create index if not exists idx_patient_tags_owner on public.patient_tags(owner_id);
-
-alter table public.patient_tags enable row level security;
-
-drop policy if exists "patient_tags_select_own" on public.patient_tags;
-create policy "patient_tags_select_own"
-on public.patient_tags for select
-to authenticated
-using (owner_id = auth.uid());
-
-drop policy if exists "patient_tags_insert_own" on public.patient_tags;
-create policy "patient_tags_insert_own"
-on public.patient_tags for insert
-to authenticated
-with check (owner_id = auth.uid());
-
-drop policy if exists "patient_tags_update_own" on public.patient_tags;
-create policy "patient_tags_update_own"
-on public.patient_tags for update
-to authenticated
-using (owner_id = auth.uid())
-with check (owner_id = auth.uid());
-
-drop policy if exists "patient_tags_delete_own" on public.patient_tags;
-create policy "patient_tags_delete_own"
-on public.patient_tags for delete
-to authenticated
-using (owner_id = auth.uid());
-
-grant select, insert, update, delete on public.patient_tags to authenticated;
-
--- ---------------------------------------------------------
--- 4) pivôs (patient_group_patient / patient_patient_tag)
--- ---------------------------------------------------------
-create table if not exists public.patient_group_patient (
- patient_id uuid not null references public.patients(id) on delete cascade,
- patient_group_id uuid not null references public.patient_groups(id) on delete cascade,
- created_at timestamptz not null default now(),
- primary key (patient_id, patient_group_id)
-);
-
-create index if not exists idx_pgp_patient on public.patient_group_patient(patient_id);
-create index if not exists idx_pgp_group on public.patient_group_patient(patient_group_id);
-
-alter table public.patient_group_patient enable row level security;
-
--- a pivot “herda” tenant via join; policy usando exists pra validar owner do patient
-drop policy if exists "pgp_select_own" on public.patient_group_patient;
-create policy "pgp_select_own"
-on public.patient_group_patient for select
-to authenticated
-using (
- exists (
- select 1 from public.patients p
- where p.id = patient_group_patient.patient_id
- and p.owner_id = auth.uid()
- )
-);
-
-drop policy if exists "pgp_write_own" on public.patient_group_patient;
-create policy "pgp_write_own"
-on public.patient_group_patient for all
-to authenticated
-using (
- exists (
- select 1 from public.patients p
- where p.id = patient_group_patient.patient_id
- and p.owner_id = auth.uid()
- )
-)
-with check (
- exists (
- select 1 from public.patients p
- where p.id = patient_group_patient.patient_id
- and p.owner_id = auth.uid()
- )
-);
-
-grant select, insert, update, delete on public.patient_group_patient to authenticated;
-
--- tags pivot (ATENÇÃO: coluna é tag_id, como teu Vue usa!)
-create table if not exists public.patient_patient_tag (
- patient_id uuid not null references public.patients(id) on delete cascade,
- tag_id uuid not null references public.patient_tags(id) on delete cascade,
- created_at timestamptz not null default now(),
- primary key (patient_id, tag_id)
-);
-
-create index if not exists idx_ppt_patient on public.patient_patient_tag(patient_id);
-create index if not exists idx_ppt_tag on public.patient_patient_tag(tag_id);
-
-alter table public.patient_patient_tag enable row level security;
-
-drop policy if exists "ppt_select_own" on public.patient_patient_tag;
-create policy "ppt_select_own"
-on public.patient_patient_tag for select
-to authenticated
-using (
- exists (
- select 1 from public.patients p
- where p.id = patient_patient_tag.patient_id
- and p.owner_id = auth.uid()
- )
-);
-
-drop policy if exists "ppt_write_own" on public.patient_patient_tag;
-create policy "ppt_write_own"
-on public.patient_patient_tag for all
-to authenticated
-using (
- exists (
- select 1 from public.patients p
- where p.id = patient_patient_tag.patient_id
- and p.owner_id = auth.uid()
- )
-)
-with check (
- exists (
- select 1 from public.patients p
- where p.id = patient_patient_tag.patient_id
- and p.owner_id = auth.uid()
- )
-);
-
-grant select, insert, update, delete on public.patient_patient_tag to authenticated;
-
--- =========================================================
--- FIM PATCH
--- =========================================================
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 899.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 899.sql
deleted file mode 100644
index 6bcb015..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 899.sql
+++ /dev/null
@@ -1,42 +0,0 @@
--- BUCKET avatars: RLS por pasta do usuário "/..."
--- Requer que seu path seja: `${auth.uid()}/...` (no seu código já é)
-
-drop policy if exists "avatars_select_own" on storage.objects;
-create policy "avatars_select_own"
-on storage.objects for select
-to authenticated
-using (
- bucket_id = 'avatars'
- and name like auth.uid()::text || '/%'
-);
-
-drop policy if exists "avatars_insert_own" on storage.objects;
-create policy "avatars_insert_own"
-on storage.objects for insert
-to authenticated
-with check (
- bucket_id = 'avatars'
- and name like auth.uid()::text || '/%'
-);
-
-drop policy if exists "avatars_update_own" on storage.objects;
-create policy "avatars_update_own"
-on storage.objects for update
-to authenticated
-using (
- bucket_id = 'avatars'
- and name like auth.uid()::text || '/%'
-)
-with check (
- bucket_id = 'avatars'
- and name like auth.uid()::text || '/%'
-);
-
-drop policy if exists "avatars_delete_own" on storage.objects;
-create policy "avatars_delete_own"
-on storage.objects for delete
-to authenticated
-using (
- bucket_id = 'avatars'
- and name like auth.uid()::text || '/%'
-);
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 934.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 934.sql
deleted file mode 100644
index 5be15f1..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 934.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-select *
-from tenant_members
-where user_id = 'SEU_USER_ID';
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 938.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 938.sql
deleted file mode 100644
index a4d2f11..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 938.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-select
- tm.id as responsible_member_id,
- tm.tenant_id,
- tm.user_id,
- tm.role,
- tm.status,
- tm.created_at
-from public.tenant_members tm
-where tm.tenant_id = (
- select owner_id from public.patient_intake_requests
- where id = '54daa09a-b2cb-4a0b-91aa-e4cea1915efe'
-)
-and tm.user_id = '824f125c-55bb-40f5-a8c4-7a33618b91c7'
-limit 10;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/Untitled query 975.sql b/DBS/2026-03-11/supabase-snippets/Untitled query 975.sql
deleted file mode 100644
index ce7959e..0000000
--- a/DBS/2026-03-11/supabase-snippets/Untitled query 975.sql
+++ /dev/null
@@ -1,17 +0,0 @@
--- 1) Qual é meu uid?
-select auth.uid() as my_uid;
-
--- 2) Tenho membership ativa no tenant atual?
-select *
-from tenant_members
-where tenant_id = 'e8b10543-fb36-4e75-9d37-6fece9745637'
- and user_id = auth.uid()
-order by created_at desc;
-
--- 3) Se você usa status:
-select *
-from tenant_members
-where tenant_id = 'e8b10543-fb36-4e75-9d37-6fece9745637'
- and user_id = auth.uid()
- and status = 'active'
-order by created_at desc;
\ No newline at end of file
diff --git a/DBS/2026-03-11/supabase-snippets/saas_docs.sql b/DBS/2026-03-11/supabase-snippets/saas_docs.sql
deleted file mode 100644
index d12c728..0000000
--- a/DBS/2026-03-11/supabase-snippets/saas_docs.sql
+++ /dev/null
@@ -1,123 +0,0 @@
--- ============================================================
--- saas_docs — Documentação dinâmica do sistema
--- Exibida nas páginas do frontend via botão "Ajuda"
--- ============================================================
-
--- ------------------------------------------------------------
--- 1. TABELA
--- ------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS public.saas_docs (
- id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
- titulo text NOT NULL,
- conteudo text NOT NULL DEFAULT '',
- medias jsonb NOT NULL DEFAULT '[]'::jsonb,
- -- formato: [{ "tipo": "imagem"|"video", "url": "..." }, ...]
-
- tipo_acesso text NOT NULL DEFAULT 'usuario'
- CHECK (tipo_acesso IN ('usuario', 'admin')),
- -- 'usuario' → todos os autenticados
- -- 'admin' → clinic_admin, tenant_admin, saas_admin
-
- pagina_path text NOT NULL,
- -- path da rota do frontend, ex: '/therapist/agenda'
-
- pagina_label text,
- -- label amigável (informativo, não usado no match)
-
- docs_relacionados uuid[] NOT NULL DEFAULT '{}',
- -- IDs de outros saas_docs exibidos como "Veja também"
-
- ativo boolean NOT NULL DEFAULT true,
- ordem int NOT NULL DEFAULT 0,
- created_at timestamptz NOT NULL DEFAULT now(),
- updated_at timestamptz NOT NULL DEFAULT now()
-);
-
--- ------------------------------------------------------------
--- 2. ÍNDICE
--- ------------------------------------------------------------
--- Query principal do frontend: filtra por path + ativo
-CREATE INDEX IF NOT EXISTS saas_docs_path_ativo_idx
- ON public.saas_docs (pagina_path, ativo);
-
--- ------------------------------------------------------------
--- 3. RLS
--- ------------------------------------------------------------
-ALTER TABLE public.saas_docs ENABLE ROW LEVEL SECURITY;
-
--- SaaS admin: acesso total (SELECT, INSERT, UPDATE, DELETE)
--- Verificado via tabela saas_admins
-CREATE POLICY "saas_admin_full_access" ON public.saas_docs
- FOR ALL
- TO authenticated
- USING (
- EXISTS (
- SELECT 1 FROM public.saas_admins
- WHERE saas_admins.user_id = auth.uid()
- )
- )
- WITH CHECK (
- EXISTS (
- SELECT 1 FROM public.saas_admins
- WHERE saas_admins.user_id = auth.uid()
- )
- );
-
--- Admins de clínica: leem todos os docs ativos (usuario + admin)
-CREATE POLICY "clinic_admin_read_all_docs" ON public.saas_docs
- FOR SELECT
- TO authenticated
- USING (
- ativo = true
- AND EXISTS (
- SELECT 1 FROM public.profiles
- WHERE profiles.id = auth.uid()
- AND profiles.role IN ('clinic_admin', 'tenant_admin')
- )
- );
-
--- Demais usuários autenticados: leem apenas docs do tipo 'usuario'
-CREATE POLICY "users_read_usuario_docs" ON public.saas_docs
- FOR SELECT
- TO authenticated
- USING (
- ativo = true
- AND tipo_acesso = 'usuario'
- );
-
--- ------------------------------------------------------------
--- 4. STORAGE — bucket saas-docs (imagens dos documentos)
--- ------------------------------------------------------------
-INSERT INTO storage.buckets (id, name, public)
-VALUES ('saas-docs', 'saas-docs', true)
-ON CONFLICT (id) DO NOTHING;
-
--- SaaS admin: pode fazer upload
-CREATE POLICY "saas_admin_storage_upload" ON storage.objects
- FOR INSERT
- TO authenticated
- WITH CHECK (
- bucket_id = 'saas-docs'
- AND EXISTS (
- SELECT 1 FROM public.saas_admins
- WHERE saas_admins.user_id = auth.uid()
- )
- );
-
--- SaaS admin: pode deletar
-CREATE POLICY "saas_admin_storage_delete" ON storage.objects
- FOR DELETE
- TO authenticated
- USING (
- bucket_id = 'saas-docs'
- AND EXISTS (
- SELECT 1 FROM public.saas_admins
- WHERE saas_admins.user_id = auth.uid()
- )
- );
-
--- Leitura pública (bucket é público, mas policy explícita para clareza)
-CREATE POLICY "saas_docs_public_read" ON storage.objects
- FOR SELECT
- TO public
- USING (bucket_id = 'saas-docs');
diff --git a/DBS/2026-03-12/schema.sql b/DBS/2026-03-12/schema.sql
deleted file mode 100644
index 69f5974..0000000
--- a/DBS/2026-03-12/schema.sql
+++ /dev/null
@@ -1,20960 +0,0 @@
---
--- PostgreSQL database dump
---
-
-\restrict 9bHVG2mCJlFIsM9VG52U52tbNZAgdYvv06RBgjMuM391ZzgcAGwa0O040leLtAl
-
--- Dumped from database version 17.6
--- Dumped by pg_dump version 17.6
-
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET idle_in_transaction_session_timeout = 0;
-SET transaction_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = on;
-SELECT pg_catalog.set_config('search_path', '', false);
-SET check_function_bodies = false;
-SET xmloption = content;
-SET client_min_messages = warning;
-SET row_security = off;
-
---
--- Name: _realtime; Type: SCHEMA; Schema: -; Owner: postgres
---
-
-CREATE SCHEMA _realtime;
-
-
-ALTER SCHEMA _realtime OWNER TO postgres;
-
---
--- Name: auth; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA auth;
-
-
-ALTER SCHEMA auth OWNER TO supabase_admin;
-
---
--- Name: extensions; Type: SCHEMA; Schema: -; Owner: postgres
---
-
-CREATE SCHEMA extensions;
-
-
-ALTER SCHEMA extensions OWNER TO postgres;
-
---
--- Name: graphql; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA graphql;
-
-
-ALTER SCHEMA graphql OWNER TO supabase_admin;
-
---
--- Name: graphql_public; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA graphql_public;
-
-
-ALTER SCHEMA graphql_public OWNER TO supabase_admin;
-
---
--- Name: pg_net; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_net WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION pg_net; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_net IS 'Async HTTP';
-
-
---
--- Name: pgbouncer; Type: SCHEMA; Schema: -; Owner: pgbouncer
---
-
-CREATE SCHEMA pgbouncer;
-
-
-ALTER SCHEMA pgbouncer OWNER TO pgbouncer;
-
---
--- Name: realtime; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA realtime;
-
-
-ALTER SCHEMA realtime OWNER TO supabase_admin;
-
---
--- Name: storage; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA storage;
-
-
-ALTER SCHEMA storage OWNER TO supabase_admin;
-
---
--- Name: supabase_functions; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA supabase_functions;
-
-
-ALTER SCHEMA supabase_functions OWNER TO supabase_admin;
-
---
--- Name: vault; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA vault;
-
-
-ALTER SCHEMA vault OWNER TO supabase_admin;
-
---
--- Name: btree_gist; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS btree_gist WITH SCHEMA public;
-
-
---
--- Name: EXTENSION btree_gist; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION btree_gist IS 'support for indexing common datatypes in GiST';
-
-
---
--- Name: citext; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;
-
-
---
--- Name: EXTENSION citext; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION citext IS 'data type for case-insensitive character strings';
-
-
---
--- Name: pg_graphql; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_graphql WITH SCHEMA graphql;
-
-
---
--- Name: EXTENSION pg_graphql; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_graphql IS 'pg_graphql: GraphQL support';
-
-
---
--- Name: pg_stat_statements; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION pg_stat_statements; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_stat_statements IS 'track planning and execution statistics of all SQL statements executed';
-
-
---
--- Name: pg_trgm; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA public;
-
-
---
--- Name: EXTENSION pg_trgm; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_trgm IS 'text similarity measurement and index searching based on trigrams';
-
-
---
--- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';
-
-
---
--- Name: supabase_vault; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS supabase_vault WITH SCHEMA vault;
-
-
---
--- Name: EXTENSION supabase_vault; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION supabase_vault IS 'Supabase Vault Extension';
-
-
---
--- Name: uuid-ossp; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION "uuid-ossp"; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)';
-
-
---
--- Name: aal_level; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.aal_level AS ENUM (
- 'aal1',
- 'aal2',
- 'aal3'
-);
-
-
-ALTER TYPE auth.aal_level OWNER TO supabase_auth_admin;
-
---
--- Name: code_challenge_method; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.code_challenge_method AS ENUM (
- 's256',
- 'plain'
-);
-
-
-ALTER TYPE auth.code_challenge_method OWNER TO supabase_auth_admin;
-
---
--- Name: factor_status; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.factor_status AS ENUM (
- 'unverified',
- 'verified'
-);
-
-
-ALTER TYPE auth.factor_status OWNER TO supabase_auth_admin;
-
---
--- Name: factor_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.factor_type AS ENUM (
- 'totp',
- 'webauthn',
- 'phone'
-);
-
-
-ALTER TYPE auth.factor_type OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_authorization_status; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_authorization_status AS ENUM (
- 'pending',
- 'approved',
- 'denied',
- 'expired'
-);
-
-
-ALTER TYPE auth.oauth_authorization_status OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_client_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_client_type AS ENUM (
- 'public',
- 'confidential'
-);
-
-
-ALTER TYPE auth.oauth_client_type OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_registration_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_registration_type AS ENUM (
- 'dynamic',
- 'manual'
-);
-
-
-ALTER TYPE auth.oauth_registration_type OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_response_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_response_type AS ENUM (
- 'code'
-);
-
-
-ALTER TYPE auth.oauth_response_type OWNER TO supabase_auth_admin;
-
---
--- Name: one_time_token_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.one_time_token_type AS ENUM (
- 'confirmation_token',
- 'reauthentication_token',
- 'recovery_token',
- 'email_change_token_new',
- 'email_change_token_current',
- 'phone_change_token'
-);
-
-
-ALTER TYPE auth.one_time_token_type OWNER TO supabase_auth_admin;
-
---
--- Name: commitment_log_source; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.commitment_log_source AS ENUM (
- 'manual',
- 'auto'
-);
-
-
-ALTER TYPE public.commitment_log_source OWNER TO supabase_admin;
-
---
--- Name: determined_field_type; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.determined_field_type AS ENUM (
- 'text',
- 'textarea',
- 'number',
- 'date',
- 'select',
- 'boolean'
-);
-
-
-ALTER TYPE public.determined_field_type OWNER TO supabase_admin;
-
---
--- Name: recurrence_exception_type; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.recurrence_exception_type AS ENUM (
- 'cancel_session',
- 'reschedule_session',
- 'patient_missed',
- 'therapist_canceled',
- 'holiday_block'
-);
-
-
-ALTER TYPE public.recurrence_exception_type OWNER TO supabase_admin;
-
---
--- Name: recurrence_type; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.recurrence_type AS ENUM (
- 'weekly',
- 'biweekly',
- 'monthly',
- 'yearly',
- 'custom_weekdays'
-);
-
-
-ALTER TYPE public.recurrence_type OWNER TO supabase_admin;
-
---
--- Name: status_agenda_serie; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.status_agenda_serie AS ENUM (
- 'ativo',
- 'pausado',
- 'cancelado'
-);
-
-
-ALTER TYPE public.status_agenda_serie OWNER TO supabase_admin;
-
---
--- Name: status_evento_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.status_evento_agenda AS ENUM (
- 'agendado',
- 'realizado',
- 'faltou',
- 'cancelado',
- 'remarcar'
-);
-
-
-ALTER TYPE public.status_evento_agenda OWNER TO supabase_admin;
-
---
--- Name: status_excecao_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.status_excecao_agenda AS ENUM (
- 'pendente',
- 'ativo',
- 'arquivado'
-);
-
-
-ALTER TYPE public.status_excecao_agenda OWNER TO supabase_admin;
-
---
--- Name: tipo_evento_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.tipo_evento_agenda AS ENUM (
- 'sessao',
- 'bloqueio'
-);
-
-
-ALTER TYPE public.tipo_evento_agenda OWNER TO supabase_admin;
-
---
--- Name: tipo_excecao_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.tipo_excecao_agenda AS ENUM (
- 'bloqueio',
- 'horario_extra'
-);
-
-
-ALTER TYPE public.tipo_excecao_agenda OWNER TO supabase_admin;
-
---
--- Name: action; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.action AS ENUM (
- 'INSERT',
- 'UPDATE',
- 'DELETE',
- 'TRUNCATE',
- 'ERROR'
-);
-
-
-ALTER TYPE realtime.action OWNER TO supabase_admin;
-
---
--- Name: equality_op; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.equality_op AS ENUM (
- 'eq',
- 'neq',
- 'lt',
- 'lte',
- 'gt',
- 'gte',
- 'in'
-);
-
-
-ALTER TYPE realtime.equality_op OWNER TO supabase_admin;
-
---
--- Name: user_defined_filter; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.user_defined_filter AS (
- column_name text,
- op realtime.equality_op,
- value text
-);
-
-
-ALTER TYPE realtime.user_defined_filter OWNER TO supabase_admin;
-
---
--- Name: wal_column; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.wal_column AS (
- name text,
- type_name text,
- type_oid oid,
- value jsonb,
- is_pkey boolean,
- is_selectable boolean
-);
-
-
-ALTER TYPE realtime.wal_column OWNER TO supabase_admin;
-
---
--- Name: wal_rls; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.wal_rls AS (
- wal jsonb,
- is_rls_enabled boolean,
- subscription_ids uuid[],
- errors text[]
-);
-
-
-ALTER TYPE realtime.wal_rls OWNER TO supabase_admin;
-
---
--- Name: buckettype; Type: TYPE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TYPE storage.buckettype AS ENUM (
- 'STANDARD',
- 'ANALYTICS',
- 'VECTOR'
-);
-
-
-ALTER TYPE storage.buckettype OWNER TO supabase_storage_admin;
-
---
--- Name: email(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.email() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim.email', true), ''),
- (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'email')
- )::text
-$$;
-
-
-ALTER FUNCTION auth.email() OWNER TO supabase_auth_admin;
-
---
--- Name: FUNCTION email(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON FUNCTION auth.email() IS 'Deprecated. Use auth.jwt() -> ''email'' instead.';
-
-
---
--- Name: jwt(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.jwt() RETURNS jsonb
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim', true), ''),
- nullif(current_setting('request.jwt.claims', true), '')
- )::jsonb
-$$;
-
-
-ALTER FUNCTION auth.jwt() OWNER TO supabase_auth_admin;
-
---
--- Name: role(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.role() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim.role', true), ''),
- (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'role')
- )::text
-$$;
-
-
-ALTER FUNCTION auth.role() OWNER TO supabase_auth_admin;
-
---
--- Name: FUNCTION role(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON FUNCTION auth.role() IS 'Deprecated. Use auth.jwt() -> ''role'' instead.';
-
-
---
--- Name: uid(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.uid() RETURNS uuid
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim.sub', true), ''),
- (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'sub')
- )::uuid
-$$;
-
-
-ALTER FUNCTION auth.uid() OWNER TO supabase_auth_admin;
-
---
--- Name: FUNCTION uid(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON FUNCTION auth.uid() IS 'Deprecated. Use auth.jwt() -> ''sub'' instead.';
-
-
---
--- Name: grant_pg_cron_access(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.grant_pg_cron_access() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF EXISTS (
- SELECT
- FROM pg_event_trigger_ddl_commands() AS ev
- JOIN pg_extension AS ext
- ON ev.objid = ext.oid
- WHERE ext.extname = 'pg_cron'
- )
- THEN
- grant usage on schema cron to postgres with grant option;
-
- alter default privileges in schema cron grant all on tables to postgres with grant option;
- alter default privileges in schema cron grant all on functions to postgres with grant option;
- alter default privileges in schema cron grant all on sequences to postgres with grant option;
-
- alter default privileges for user supabase_admin in schema cron grant all
- on sequences to postgres with grant option;
- alter default privileges for user supabase_admin in schema cron grant all
- on tables to postgres with grant option;
- alter default privileges for user supabase_admin in schema cron grant all
- on functions to postgres with grant option;
-
- grant all privileges on all tables in schema cron to postgres with grant option;
- revoke all on table cron.job from postgres;
- grant select on table cron.job to postgres with grant option;
- END IF;
-END;
-$$;
-
-
-ALTER FUNCTION extensions.grant_pg_cron_access() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION grant_pg_cron_access(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.grant_pg_cron_access() IS 'Grants access to pg_cron';
-
-
---
--- Name: grant_pg_graphql_access(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.grant_pg_graphql_access() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $_$
-DECLARE
- func_is_graphql_resolve bool;
-BEGIN
- func_is_graphql_resolve = (
- SELECT n.proname = 'resolve'
- FROM pg_event_trigger_ddl_commands() AS ev
- LEFT JOIN pg_catalog.pg_proc AS n
- ON ev.objid = n.oid
- );
-
- IF func_is_graphql_resolve
- THEN
- -- Update public wrapper to pass all arguments through to the pg_graphql resolve func
- DROP FUNCTION IF EXISTS graphql_public.graphql;
- create or replace function graphql_public.graphql(
- "operationName" text default null,
- query text default null,
- variables jsonb default null,
- extensions jsonb default null
- )
- returns jsonb
- language sql
- as $$
- select graphql.resolve(
- query := query,
- variables := coalesce(variables, '{}'),
- "operationName" := "operationName",
- extensions := extensions
- );
- $$;
-
- -- This hook executes when `graphql.resolve` is created. That is not necessarily the last
- -- function in the extension so we need to grant permissions on existing entities AND
- -- update default permissions to any others that are created after `graphql.resolve`
- grant usage on schema graphql to postgres, anon, authenticated, service_role;
- grant select on all tables in schema graphql to postgres, anon, authenticated, service_role;
- grant execute on all functions in schema graphql to postgres, anon, authenticated, service_role;
- grant all on all sequences in schema graphql to postgres, anon, authenticated, service_role;
- alter default privileges in schema graphql grant all on tables to postgres, anon, authenticated, service_role;
- alter default privileges in schema graphql grant all on functions to postgres, anon, authenticated, service_role;
- alter default privileges in schema graphql grant all on sequences to postgres, anon, authenticated, service_role;
-
- -- Allow postgres role to allow granting usage on graphql and graphql_public schemas to custom roles
- grant usage on schema graphql_public to postgres with grant option;
- grant usage on schema graphql to postgres with grant option;
- END IF;
-
-END;
-$_$;
-
-
-ALTER FUNCTION extensions.grant_pg_graphql_access() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION grant_pg_graphql_access(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.grant_pg_graphql_access() IS 'Grants access to pg_graphql';
-
-
---
--- Name: grant_pg_net_access(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.grant_pg_net_access() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF EXISTS (
- SELECT 1
- FROM pg_event_trigger_ddl_commands() AS ev
- JOIN pg_extension AS ext
- ON ev.objid = ext.oid
- WHERE ext.extname = 'pg_net'
- )
- THEN
- GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role;
-
- ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
- ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
-
- ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
- ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
-
- REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
- REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
-
- GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
- GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
- END IF;
-END;
-$$;
-
-
-ALTER FUNCTION extensions.grant_pg_net_access() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION grant_pg_net_access(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.grant_pg_net_access() IS 'Grants access to pg_net';
-
-
---
--- Name: pgrst_ddl_watch(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.pgrst_ddl_watch() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- cmd record;
-BEGIN
- FOR cmd IN SELECT * FROM pg_event_trigger_ddl_commands()
- LOOP
- IF cmd.command_tag IN (
- 'CREATE SCHEMA', 'ALTER SCHEMA'
- , 'CREATE TABLE', 'CREATE TABLE AS', 'SELECT INTO', 'ALTER TABLE'
- , 'CREATE FOREIGN TABLE', 'ALTER FOREIGN TABLE'
- , 'CREATE VIEW', 'ALTER VIEW'
- , 'CREATE MATERIALIZED VIEW', 'ALTER MATERIALIZED VIEW'
- , 'CREATE FUNCTION', 'ALTER FUNCTION'
- , 'CREATE TRIGGER'
- , 'CREATE TYPE', 'ALTER TYPE'
- , 'CREATE RULE'
- , 'COMMENT'
- )
- -- don't notify in case of CREATE TEMP table or other objects created on pg_temp
- AND cmd.schema_name is distinct from 'pg_temp'
- THEN
- NOTIFY pgrst, 'reload schema';
- END IF;
- END LOOP;
-END; $$;
-
-
-ALTER FUNCTION extensions.pgrst_ddl_watch() OWNER TO supabase_admin;
-
---
--- Name: pgrst_drop_watch(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.pgrst_drop_watch() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- obj record;
-BEGIN
- FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects()
- LOOP
- IF obj.object_type IN (
- 'schema'
- , 'table'
- , 'foreign table'
- , 'view'
- , 'materialized view'
- , 'function'
- , 'trigger'
- , 'type'
- , 'rule'
- )
- AND obj.is_temporary IS false -- no pg_temp objects
- THEN
- NOTIFY pgrst, 'reload schema';
- END IF;
- END LOOP;
-END; $$;
-
-
-ALTER FUNCTION extensions.pgrst_drop_watch() OWNER TO supabase_admin;
-
---
--- Name: set_graphql_placeholder(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.set_graphql_placeholder() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $_$
- DECLARE
- graphql_is_dropped bool;
- BEGIN
- graphql_is_dropped = (
- SELECT ev.schema_name = 'graphql_public'
- FROM pg_event_trigger_dropped_objects() AS ev
- WHERE ev.schema_name = 'graphql_public'
- );
-
- IF graphql_is_dropped
- THEN
- create or replace function graphql_public.graphql(
- "operationName" text default null,
- query text default null,
- variables jsonb default null,
- extensions jsonb default null
- )
- returns jsonb
- language plpgsql
- as $$
- DECLARE
- server_version float;
- BEGIN
- server_version = (SELECT (SPLIT_PART((select version()), ' ', 2))::float);
-
- IF server_version >= 14 THEN
- RETURN jsonb_build_object(
- 'errors', jsonb_build_array(
- jsonb_build_object(
- 'message', 'pg_graphql extension is not enabled.'
- )
- )
- );
- ELSE
- RETURN jsonb_build_object(
- 'errors', jsonb_build_array(
- jsonb_build_object(
- 'message', 'pg_graphql is only available on projects running Postgres 14 onwards.'
- )
- )
- );
- END IF;
- END;
- $$;
- END IF;
-
- END;
-$_$;
-
-
-ALTER FUNCTION extensions.set_graphql_placeholder() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION set_graphql_placeholder(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.set_graphql_placeholder() IS 'Reintroduces placeholder function for graphql_public.graphql';
-
-
---
--- Name: get_auth(text); Type: FUNCTION; Schema: pgbouncer; Owner: supabase_admin
---
-
-CREATE FUNCTION pgbouncer.get_auth(p_usename text) RETURNS TABLE(username text, password text)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO ''
- AS $_$
-begin
- raise debug 'PgBouncer auth request: %', p_usename;
-
- return query
- select
- rolname::text,
- case when rolvaliduntil < now()
- then null
- else rolpassword::text
- end
- from pg_authid
- where rolname=$1 and rolcanlogin;
-end;
-$_$;
-
-
-ALTER FUNCTION pgbouncer.get_auth(p_usename text) OWNER TO supabase_admin;
-
---
--- Name: __rls_ping(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.__rls_ping() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select 'ok'::text;
-$$;
-
-
-ALTER FUNCTION public.__rls_ping() OWNER TO supabase_admin;
-
-SET default_tablespace = '';
-
-SET default_table_access_method = heap;
-
---
--- Name: subscriptions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscriptions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid,
- plan_id uuid NOT NULL,
- status text DEFAULT 'active'::text NOT NULL,
- current_period_start timestamp with time zone,
- current_period_end timestamp with time zone,
- cancel_at_period_end boolean DEFAULT false NOT NULL,
- provider text DEFAULT 'manual'::text NOT NULL,
- provider_customer_id text,
- provider_subscription_id text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid,
- plan_key text,
- "interval" text,
- source text DEFAULT 'manual'::text NOT NULL,
- started_at timestamp with time zone DEFAULT now() NOT NULL,
- canceled_at timestamp with time zone,
- activated_at timestamp with time zone,
- past_due_since timestamp with time zone,
- suspended_at timestamp with time zone,
- suspended_reason text,
- cancelled_at timestamp with time zone,
- cancel_reason text,
- expired_at timestamp with time zone,
- CONSTRAINT subscriptions_interval_check CHECK (("interval" = ANY (ARRAY['month'::text, 'year'::text]))),
- CONSTRAINT subscriptions_owner_xor CHECK ((((tenant_id IS NOT NULL) AND (user_id IS NULL)) OR ((tenant_id IS NULL) AND (user_id IS NOT NULL)))),
- CONSTRAINT subscriptions_status_check CHECK ((status = ANY (ARRAY['pending'::text, 'active'::text, 'past_due'::text, 'suspended'::text, 'cancelled'::text, 'expired'::text])))
-);
-
-
-ALTER TABLE public.subscriptions OWNER TO supabase_admin;
-
---
--- Name: activate_subscription_from_intent(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_intent record;
- v_sub public.subscriptions;
- v_days int;
- v_user_id uuid;
- v_plan_id uuid;
- v_target text;
-begin
- -- lê pela VIEW unificada
- select * into v_intent
- from public.subscription_intents
- where id = p_intent_id;
-
- if not found then
- raise exception 'Intent não encontrado: %', p_intent_id;
- end if;
-
- if v_intent.status <> 'paid' then
- raise exception 'Intent precisa estar paid para ativar assinatura';
- end if;
-
- -- resolve target e plan_id via plans.key
- select p.id, p.target
- into v_plan_id, v_target
- from public.plans p
- where p.key = v_intent.plan_key
- limit 1;
-
- if v_plan_id is null then
- raise exception 'Plano não encontrado em plans.key = %', v_intent.plan_key;
- end if;
-
- v_target := lower(coalesce(v_target, ''));
-
- -- ✅ supervisor adicionado
- if v_target not in ('clinic', 'therapist', 'supervisor') then
- raise exception 'Target inválido em plans.target: %', v_target;
- end if;
-
- -- regra por target
- if v_target = 'clinic' then
- if v_intent.tenant_id is null then
- raise exception 'Intent sem tenant_id';
- end if;
- else
- -- therapist ou supervisor: vinculado ao user
- v_user_id := v_intent.user_id;
- if v_user_id is null then
- v_user_id := v_intent.created_by_user_id;
- end if;
- end if;
-
- if v_target in ('therapist', 'supervisor') and v_user_id is null then
- raise exception 'Não foi possível determinar user_id para assinatura %.', v_target;
- end if;
-
- -- cancela assinatura ativa anterior
- if v_target = 'clinic' then
- update public.subscriptions
- set status = 'cancelled',
- cancelled_at = now()
- where tenant_id = v_intent.tenant_id
- and plan_id = v_plan_id
- and status = 'active';
- else
- -- therapist ou supervisor
- update public.subscriptions
- set status = 'cancelled',
- cancelled_at = now()
- where user_id = v_user_id
- and plan_id = v_plan_id
- and status = 'active'
- and tenant_id is null;
- end if;
-
- -- duração do plano (30 dias para mensal)
- v_days := case
- when lower(coalesce(v_intent.interval, 'month')) = 'year' then 365
- else 30
- end;
-
- -- cria nova assinatura
- insert into public.subscriptions (
- user_id,
- plan_id,
- status,
- started_at,
- expires_at,
- cancelled_at,
- activated_at,
- tenant_id,
- plan_key,
- interval,
- source,
- created_at,
- updated_at
- )
- values (
- case when v_target = 'clinic' then null else v_user_id end,
- v_plan_id,
- 'active',
- now(),
- now() + make_interval(days => v_days),
- null,
- now(),
- case when v_target = 'clinic' then v_intent.tenant_id else null end,
- v_intent.plan_key,
- v_intent.interval,
- 'manual',
- now(),
- now()
- )
- returning * into v_sub;
-
- -- grava vínculo intent → subscription
- if v_target = 'clinic' then
- update public.subscription_intents_tenant
- set subscription_id = v_sub.id
- where id = p_intent_id;
- else
- update public.subscription_intents_personal
- set subscription_id = v_sub.id
- where id = p_intent_id;
- end if;
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) OWNER TO supabase_admin;
-
---
--- Name: admin_fix_plan_target(text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_plan_id uuid;
-begin
- -- (opcional) restringe targets válidos
- if p_new_target not in ('clinic','therapist') then
- raise exception 'Target inválido: %', p_new_target using errcode='P0001';
- end if;
-
- -- trava o plano
- select id into v_plan_id
- from public.plans
- where key = p_plan_key
- for update;
-
- if v_plan_id is null then
- raise exception 'Plano não encontrado: %', p_plan_key using errcode='P0001';
- end if;
-
- -- segurança: não mexer se existe subscription
- if exists (select 1 from public.subscriptions s where s.plan_id = v_plan_id) then
- raise exception 'Plano % possui subscriptions. Migração bloqueada.', p_plan_key using errcode='P0001';
- end if;
-
- -- liga bypass SOMENTE nesta transação
- perform set_config('app.plan_migration_bypass', '1', true);
-
- update public.plans
- set target = p_new_target
- where id = v_plan_id;
-
-end
-$$;
-
-
-ALTER FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) OWNER TO supabase_admin;
-
---
--- Name: agenda_cfg_sync(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agenda_cfg_sync() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if new.agenda_view_mode = 'custom' then
- new.usar_horario_admin_custom := true;
- new.admin_inicio_visualizacao := new.agenda_custom_start;
- new.admin_fim_visualizacao := new.agenda_custom_end;
- else
- new.usar_horario_admin_custom := false;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.agenda_cfg_sync() OWNER TO supabase_admin;
-
---
--- Name: agendador_dias_disponiveis(text, integer, integer); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) RETURNS TABLE(data date, tem_slots boolean)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_owner_id uuid;
- v_antecedencia int;
- v_agora timestamptz;
- v_data date;
- v_data_inicio date;
- v_data_fim date;
- v_db_dow int;
- v_tem_slot boolean;
-BEGIN
- SELECT c.owner_id, c.antecedencia_minima_horas
- INTO v_owner_id, v_antecedencia
- FROM public.agendador_configuracoes c
- WHERE c.link_slug = p_slug AND c.ativo = true
- LIMIT 1;
-
- IF v_owner_id IS NULL THEN RETURN; END IF;
-
- v_agora := now();
- v_data_inicio := make_date(p_ano, p_mes, 1);
- v_data_fim := (v_data_inicio + interval '1 month' - interval '1 day')::date;
-
- v_data := v_data_inicio;
- WHILE v_data <= v_data_fim LOOP
- v_db_dow := extract(dow from v_data::timestamp)::int;
-
- SELECT EXISTS (
- SELECT 1 FROM public.agenda_online_slots s
- WHERE s.owner_id = v_owner_id
- AND s.weekday = v_db_dow
- AND s.enabled = true
- AND (v_data::text || ' ' || s.time::text)::timestamp
- AT TIME ZONE 'America/Sao_Paulo'
- >= v_agora + (v_antecedencia || ' hours')::interval
- ) INTO v_tem_slot;
-
- IF v_tem_slot THEN
- data := v_data;
- tem_slots := true;
- RETURN NEXT;
- END IF;
-
- v_data := v_data + 1;
- END LOOP;
-END;
-$$;
-
-
-ALTER FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) OWNER TO supabase_admin;
-
---
--- Name: agendador_gerar_slug(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agendador_gerar_slug() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_slug text;
- v_exists boolean;
-BEGIN
- -- só gera se ativou e não tem slug ainda
- IF NEW.ativo = true AND (NEW.link_slug IS NULL OR NEW.link_slug = '') THEN
- LOOP
- v_slug := lower(substring(replace(gen_random_uuid()::text, '-', ''), 1, 8));
- SELECT EXISTS (
- SELECT 1 FROM public.agendador_configuracoes
- WHERE link_slug = v_slug AND owner_id <> NEW.owner_id
- ) INTO v_exists;
- EXIT WHEN NOT v_exists;
- END LOOP;
- NEW.link_slug := v_slug;
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.agendador_gerar_slug() OWNER TO supabase_admin;
-
---
--- Name: agendador_slots_disponiveis(text, date); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) RETURNS TABLE(hora time without time zone, disponivel boolean)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_owner_id uuid;
- v_duracao int;
- v_antecedencia int;
- v_agora timestamptz;
- v_db_dow int;
- v_slot time;
- v_slot_fim time;
- v_slot_ts timestamptz;
- v_ocupado boolean;
- -- loop de recorrências
- v_rule RECORD;
- v_rule_start_dow int;
- v_first_occ date;
- v_day_diff int;
- v_ex_type text;
-BEGIN
- SELECT c.owner_id, c.duracao_sessao_min, c.antecedencia_minima_horas
- INTO v_owner_id, v_duracao, v_antecedencia
- FROM public.agendador_configuracoes c
- WHERE c.link_slug = p_slug AND c.ativo = true
- LIMIT 1;
-
- IF v_owner_id IS NULL THEN RETURN; END IF;
-
- v_agora := now();
- v_db_dow := extract(dow from p_data::timestamp)::int;
-
- FOR v_slot IN
- SELECT s.time
- FROM public.agenda_online_slots s
- WHERE s.owner_id = v_owner_id
- AND s.weekday = v_db_dow
- AND s.enabled = true
- ORDER BY s.time
- LOOP
- v_slot_fim := v_slot + (v_duracao || ' minutes')::interval;
- v_ocupado := false;
-
- -- ── Antecedência mínima ──────────────────────────────────────────────────
- v_slot_ts := (p_data::text || ' ' || v_slot::text)::timestamp
- AT TIME ZONE 'America/Sao_Paulo';
- IF v_slot_ts < v_agora + (v_antecedencia || ' hours')::interval THEN
- v_ocupado := true;
- END IF;
-
- -- ── Eventos avulsos internos (agenda_eventos) ────────────────────────────
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1 FROM public.agenda_eventos e
- WHERE e.owner_id = v_owner_id
- AND e.status::text NOT IN ('cancelado', 'faltou')
- AND (e.inicio_em AT TIME ZONE 'America/Sao_Paulo')::date = p_data
- AND (e.inicio_em AT TIME ZONE 'America/Sao_Paulo')::time < v_slot_fim
- AND (e.fim_em AT TIME ZONE 'America/Sao_Paulo')::time > v_slot
- ) INTO v_ocupado;
- END IF;
-
- -- ── Recorrências ativas (recurrence_rules) ───────────────────────────────
- -- Loop explícito para evitar erros de tipo no cálculo do ciclo semanal
- IF NOT v_ocupado THEN
- FOR v_rule IN
- SELECT
- r.id,
- r.start_date::date AS start_date,
- r.end_date::date AS end_date,
- r.start_time::time AS start_time,
- r.end_time::time AS end_time,
- COALESCE(r.interval, 1)::int AS interval
- FROM public.recurrence_rules r
- WHERE r.owner_id = v_owner_id
- AND r.status = 'ativo'
- AND p_data >= r.start_date::date
- AND (r.end_date IS NULL OR p_data <= r.end_date::date)
- AND v_db_dow = ANY(r.weekdays)
- AND r.start_time::time < v_slot_fim
- AND r.end_time::time > v_slot
- LOOP
- -- Calcula a primeira ocorrência do dia-da-semana a partir do start_date
- v_rule_start_dow := extract(dow from v_rule.start_date)::int;
- v_first_occ := v_rule.start_date
- + (((v_db_dow - v_rule_start_dow + 7) % 7))::int;
- v_day_diff := (p_data - v_first_occ)::int;
-
- -- Ocorrência válida: diff >= 0 e divisível pelo ciclo semanal
- IF v_day_diff >= 0 AND v_day_diff % (7 * v_rule.interval) = 0 THEN
-
- -- Verifica se há exceção para esta data
- v_ex_type := NULL;
- SELECT ex.type INTO v_ex_type
- FROM public.recurrence_exceptions ex
- WHERE ex.recurrence_id = v_rule.id
- AND ex.original_date = p_data
- LIMIT 1;
-
- -- Sem exceção, ou exceção que não cancela → bloqueia o slot
- IF v_ex_type IS NULL OR v_ex_type NOT IN (
- 'cancel_session', 'patient_missed',
- 'therapist_canceled', 'holiday_block',
- 'reschedule_session'
- ) THEN
- v_ocupado := true;
- EXIT; -- já basta uma regra que conflite
- END IF;
-
- END IF;
- END LOOP;
- END IF;
-
- -- ── Recorrências remarcadas para este dia (reschedule → new_date = p_data) ─
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1
- FROM public.recurrence_exceptions ex
- JOIN public.recurrence_rules r ON r.id = ex.recurrence_id
- WHERE r.owner_id = v_owner_id
- AND r.status = 'ativo'
- AND ex.type = 'reschedule_session'
- AND ex.new_date = p_data
- AND COALESCE(ex.new_start_time, r.start_time)::time < v_slot_fim
- AND COALESCE(ex.new_end_time, r.end_time)::time > v_slot
- ) INTO v_ocupado;
- END IF;
-
- -- ── Solicitações públicas pendentes ──────────────────────────────────────
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1 FROM public.agendador_solicitacoes sol
- WHERE sol.owner_id = v_owner_id
- AND sol.status = 'pendente'
- AND sol.data_solicitada = p_data
- AND sol.hora_solicitada = v_slot
- AND (sol.reservado_ate IS NULL OR sol.reservado_ate > v_agora)
- ) INTO v_ocupado;
- END IF;
-
- hora := v_slot;
- disponivel := NOT v_ocupado;
- RETURN NEXT;
- END LOOP;
-END;
-$$;
-
-
-ALTER FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) OWNER TO supabase_admin;
-
---
--- Name: cancel_recurrence_from(uuid, date); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-BEGIN
- UPDATE public.recurrence_rules
- SET
- end_date = p_from_date - INTERVAL '1 day',
- open_ended = false,
- status = CASE
- WHEN p_from_date <= start_date THEN 'cancelado'
- ELSE status
- END,
- updated_at = now()
- WHERE id = p_recurrence_id;
-END;
-$$;
-
-
-ALTER FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) OWNER TO supabase_admin;
-
---
--- Name: cancel_subscription(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.cancel_subscription(p_subscription_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_owner_type text;
- v_owner_ref uuid;
-begin
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- if v_sub.status = 'canceled' then
- return v_sub;
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set status = 'canceled',
- cancel_at_period_end = false,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'canceled',
- v_sub.plan_id,
- v_sub.plan_id,
- auth.uid(),
- 'Cancelamento manual via admin',
- 'admin_panel',
- jsonb_build_object('previous_status', 'active')
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation(owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-
-end;
-$$;
-
-
-ALTER FUNCTION public.cancel_subscription(p_subscription_id uuid) OWNER TO supabase_admin;
-
---
--- Name: cancelar_eventos_serie(uuid, timestamp with time zone); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone DEFAULT now()) RETURNS integer
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-DECLARE
- v_count integer;
-BEGIN
- UPDATE public.agenda_eventos
- SET status = 'cancelado',
- updated_at = now()
- WHERE serie_id = p_serie_id
- AND inicio_em >= p_a_partir_de
- AND status NOT IN ('realizado', 'cancelado');
-
- GET DIAGNOSTICS v_count = ROW_COUNT;
- RETURN v_count;
-END;
-$$;
-
-
-ALTER FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) OWNER TO supabase_admin;
-
---
--- Name: FUNCTION cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone); Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) IS 'Cancela todos os eventos futuros de uma série a partir de p_a_partir_de (inclusive).
- Não cancela eventos já realizados.';
-
-
---
--- Name: change_subscription_plan(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_old_plan uuid;
- v_new_key text;
-
- v_owner_type text;
- v_owner_ref uuid;
-
- v_new_target text;
- v_sub_target text;
-begin
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- v_old_plan := v_sub.plan_id;
-
- if v_old_plan = p_new_plan_id then
- return v_sub;
- end if;
-
- select key, target
- into v_new_key, v_new_target
- from public.plans
- where id = p_new_plan_id;
-
- if v_new_key is null then
- raise exception 'Plano não encontrado';
- end if;
-
- v_new_target := lower(coalesce(v_new_target, ''));
-
- v_sub_target := case
- when v_sub.tenant_id is not null then 'clinic'
- else 'therapist'
- end;
-
- if v_new_target <> v_sub_target then
- raise exception 'Plano inválido para este tipo de assinatura. Assinatura é % e o plano é %.',
- v_sub_target, v_new_target
- using errcode = 'P0001';
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set plan_id = p_new_plan_id,
- plan_key = v_new_key,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'plan_changed',
- v_old_plan,
- p_new_plan_id,
- auth.uid(),
- 'Plan change via DEV menu',
- 'dev_menu',
- jsonb_build_object(
- 'previous_plan', v_old_plan,
- 'new_plan', p_new_plan_id,
- 'new_plan_key', v_new_key,
- 'new_plan_target', v_new_target
- )
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation (owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) OWNER TO supabase_admin;
-
---
--- Name: create_clinic_tenant(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_clinic_tenant(p_name text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_uid uuid;
- v_tenant uuid;
- v_name text;
-begin
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'Not authenticated';
- end if;
-
- v_name := nullif(trim(coalesce(p_name, '')), '');
- if v_name is null then
- v_name := 'Clínica';
- end if;
-
- insert into public.tenants (name, kind, created_at)
- values (v_name, 'clinic', now())
- returning id into v_tenant;
-
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_tenant, v_uid, 'tenant_admin', 'active', now());
-
- return v_tenant;
-end;
-$$;
-
-
-ALTER FUNCTION public.create_clinic_tenant(p_name text) OWNER TO supabase_admin;
-
---
--- Name: create_patient_intake_request(text, text, text, text, text, boolean); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text DEFAULT NULL::text, p_phone text DEFAULT NULL::text, p_notes text DEFAULT NULL::text, p_consent boolean DEFAULT false) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_owner uuid;
- v_active boolean;
- v_expires timestamptz;
- v_max_uses int;
- v_uses int;
- v_id uuid;
-begin
- select owner_id, active, expires_at, max_uses, uses
- into v_owner, v_active, v_expires, v_max_uses, v_uses
- from public.patient_invites
- where token = p_token
- limit 1;
-
- if v_owner is null then
- raise exception 'Token inválido';
- end if;
-
- if v_active is not true then
- raise exception 'Link desativado';
- end if;
-
- if v_expires is not null and now() > v_expires then
- raise exception 'Link expirado';
- end if;
-
- if v_max_uses is not null and v_uses >= v_max_uses then
- raise exception 'Limite de uso atingido';
- end if;
-
- if p_name is null or length(trim(p_name)) = 0 then
- raise exception 'Nome é obrigatório';
- end if;
-
- insert into public.patient_intake_requests
- (owner_id, token, name, email, phone, notes, consent, status)
- values
- (v_owner, p_token, trim(p_name),
- nullif(lower(trim(p_email)), ''),
- nullif(trim(p_phone), ''),
- nullif(trim(p_notes), ''),
- coalesce(p_consent, false),
- 'new')
- returning id into v_id;
-
- update public.patient_invites
- set uses = uses + 1
- where token = p_token;
-
- return v_id;
-end;
-$$;
-
-
-ALTER FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) OWNER TO supabase_admin;
-
---
--- Name: create_patient_intake_request_v2(text, jsonb); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $_$
-declare
- v_owner_id uuid;
- v_intake_id uuid;
- v_birth_raw text;
- v_birth date;
-begin
- select owner_id
- into v_owner_id
- from public.patient_invites
- where token = p_token;
-
- if v_owner_id is null then
- raise exception 'Token inválido ou expirado';
- end if;
-
- v_birth_raw := nullif(trim(coalesce(
- p_payload->>'data_nascimento',
- ''
- )), '');
-
- v_birth := case
- when v_birth_raw is null then null
- when v_birth_raw ~ '^\d{4}-\d{2}-\d{2}$' then v_birth_raw::date
- when v_birth_raw ~ '^\d{2}-\d{2}-\d{4}$' then to_date(v_birth_raw, 'DD-MM-YYYY')
- else null
- end;
-
- insert into public.patient_intake_requests (
- owner_id,
- token,
- status,
- consent,
-
- nome_completo,
- email_principal,
- telefone,
-
- avatar_url, -- 🔥 AQUI
-
- data_nascimento,
- cpf,
- rg,
- genero,
- estado_civil,
- profissao,
- escolaridade,
- nacionalidade,
- naturalidade,
-
- cep,
- pais,
- cidade,
- estado,
- endereco,
- numero,
- complemento,
- bairro,
-
- observacoes,
- notas_internas,
-
- encaminhado_por,
- onde_nos_conheceu
- )
- values (
- v_owner_id,
- p_token,
- 'new',
- coalesce((p_payload->>'consent')::boolean, false),
-
- nullif(trim(p_payload->>'nome_completo'), ''),
- nullif(trim(p_payload->>'email_principal'), ''),
- nullif(regexp_replace(coalesce(p_payload->>'telefone',''), '\D', '', 'g'), ''),
-
- nullif(trim(p_payload->>'avatar_url'), ''), -- 🔥 AQUI
-
- v_birth,
- nullif(regexp_replace(coalesce(p_payload->>'cpf',''), '\D', '', 'g'), ''),
- nullif(trim(p_payload->>'rg'), ''),
- nullif(trim(p_payload->>'genero'), ''),
- nullif(trim(p_payload->>'estado_civil'), ''),
- nullif(trim(p_payload->>'profissao'), ''),
- nullif(trim(p_payload->>'escolaridade'), ''),
- nullif(trim(p_payload->>'nacionalidade'), ''),
- nullif(trim(p_payload->>'naturalidade'), ''),
-
- nullif(regexp_replace(coalesce(p_payload->>'cep',''), '\D', '', 'g'), ''),
- nullif(trim(p_payload->>'pais'), ''),
- nullif(trim(p_payload->>'cidade'), ''),
- nullif(trim(p_payload->>'estado'), ''),
- nullif(trim(p_payload->>'endereco'), ''),
- nullif(trim(p_payload->>'numero'), ''),
- nullif(trim(p_payload->>'complemento'), ''),
- nullif(trim(p_payload->>'bairro'), ''),
-
- nullif(trim(p_payload->>'observacoes'), ''),
- nullif(trim(p_payload->>'notas_internas'), ''),
-
- nullif(trim(p_payload->>'encaminhado_por'), ''),
- nullif(trim(p_payload->>'onde_nos_conheceu'), '')
- )
- returning id into v_intake_id;
-
- return v_intake_id;
-end;
-$_$;
-
-
-ALTER FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) OWNER TO supabase_admin;
-
---
--- Name: create_support_session(uuid, integer); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer DEFAULT 60) RETURNS json
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_admin_id uuid;
- v_role text;
- v_token text;
- v_expires timestamp with time zone;
- v_session support_sessions;
-BEGIN
- -- Verifica autenticação
- v_admin_id := auth.uid();
- IF v_admin_id IS NULL THEN
- RAISE EXCEPTION 'Não autenticado.' USING ERRCODE = 'P0001';
- END IF;
-
- -- Verifica role saas_admin
- SELECT role INTO v_role
- FROM public.profiles
- WHERE id = v_admin_id;
-
- IF v_role <> 'saas_admin' THEN
- RAISE EXCEPTION 'Acesso negado. Somente saas_admin pode criar sessões de suporte.'
- USING ERRCODE = 'P0002';
- END IF;
-
- -- Valida TTL (1 a 120 minutos)
- IF p_ttl_minutes < 1 OR p_ttl_minutes > 120 THEN
- RAISE EXCEPTION 'TTL inválido. Use entre 1 e 120 minutos.'
- USING ERRCODE = 'P0003';
- END IF;
-
- -- Valida tenant
- IF NOT EXISTS (SELECT 1 FROM public.tenants WHERE id = p_tenant_id) THEN
- RAISE EXCEPTION 'Tenant não encontrado.'
- USING ERRCODE = 'P0004';
- END IF;
-
- -- Gera token único (64 chars hex, sem pgcrypto)
- v_token := replace(gen_random_uuid()::text, '-', '') || replace(gen_random_uuid()::text, '-', '');
- v_expires := now() + (p_ttl_minutes || ' minutes')::interval;
-
- -- Insere sessão
- INSERT INTO public.support_sessions (tenant_id, admin_id, token, expires_at)
- VALUES (p_tenant_id, v_admin_id, v_token, v_expires)
- RETURNING * INTO v_session;
-
- RETURN json_build_object(
- 'token', v_session.token,
- 'expires_at', v_session.expires_at,
- 'session_id', v_session.id
- );
-END;
-$$;
-
-
-ALTER FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) OWNER TO supabase_admin;
-
---
--- Name: current_member_id(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.current_member_id(p_tenant_id uuid) RETURNS uuid
- LANGUAGE sql STABLE
- AS $$
- select tm.id
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- limit 1
-$$;
-
-
-ALTER FUNCTION public.current_member_id(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: current_member_role(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.current_member_role(p_tenant_id uuid) RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select tm.role
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- limit 1
-$$;
-
-
-ALTER FUNCTION public.current_member_role(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: delete_commitment_full(uuid, uuid); Type: FUNCTION; Schema: public; Owner: postgres
---
-
-CREATE FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_is_native boolean;
- v_fields int := 0;
- v_logs int := 0;
- v_parent int := 0;
-begin
- if auth.uid() is null then
- raise exception 'Not authenticated';
- end if;
-
- if not exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.status = 'active'
- ) then
- raise exception 'Not allowed';
- end if;
-
- select dc.is_native
- into v_is_native
- from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
-
- if v_is_native is null then
- raise exception 'Commitment not found';
- end if;
-
- if v_is_native = true then
- raise exception 'Cannot delete native commitment';
- end if;
-
- delete from public.determined_commitment_fields
- where tenant_id = p_tenant_id
- and commitment_id = p_commitment_id;
- get diagnostics v_fields = row_count;
-
- delete from public.commitment_time_logs
- where tenant_id = p_tenant_id
- and commitment_id = p_commitment_id;
- get diagnostics v_logs = row_count;
-
- delete from public.determined_commitments
- where tenant_id = p_tenant_id
- and id = p_commitment_id;
- get diagnostics v_parent = row_count;
-
- if v_parent <> 1 then
- raise exception 'Parent not deleted (RLS/owner issue).';
- end if;
-
- return jsonb_build_object(
- 'ok', true,
- 'deleted', jsonb_build_object(
- 'fields', v_fields,
- 'logs', v_logs,
- 'commitment', v_parent
- )
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) OWNER TO postgres;
-
---
--- Name: delete_determined_commitment(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_is_native boolean;
- v_fields_deleted int := 0;
- v_logs_deleted int := 0;
- v_commitment_deleted int := 0;
-begin
- if auth.uid() is null then
- raise exception 'Not authenticated';
- end if;
-
- if not exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.status = 'active'
- ) then
- raise exception 'Not allowed';
- end if;
-
- select dc.is_native
- into v_is_native
- from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
-
- if v_is_native is null then
- raise exception 'Commitment not found for tenant';
- end if;
-
- if v_is_native = true then
- raise exception 'Cannot delete native commitment';
- end if;
-
- delete from public.determined_commitment_fields f
- where f.tenant_id = p_tenant_id
- and f.commitment_id = p_commitment_id;
- get diagnostics v_fields_deleted = row_count;
-
- delete from public.commitment_time_logs l
- where l.tenant_id = p_tenant_id
- and l.commitment_id = p_commitment_id;
- get diagnostics v_logs_deleted = row_count;
-
- delete from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
- get diagnostics v_commitment_deleted = row_count;
-
- if v_commitment_deleted <> 1 then
- raise exception 'Delete did not remove the commitment (tenant mismatch?)';
- end if;
-
- return jsonb_build_object(
- 'ok', true,
- 'tenant_id', p_tenant_id,
- 'commitment_id', p_commitment_id,
- 'deleted', jsonb_build_object(
- 'fields', v_fields_deleted,
- 'logs', v_logs_deleted,
- 'commitment', v_commitment_deleted
- )
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) OWNER TO supabase_admin;
-
---
--- Name: dev_list_auth_users(integer); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_list_auth_users(p_limit integer DEFAULT 50) RETURNS TABLE(id uuid, email text, created_at timestamp with time zone)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-begin
- -- só saas_admin pode ver
- if not exists (
- select 1
- from public.profiles p
- where p.id = auth.uid()
- and p.role = 'saas_admin'
- ) then
- return;
- end if;
-
- return query
- select
- u.id,
- u.email,
- u.created_at
- from auth.users u
- order by u.created_at desc
- limit greatest(1, least(coalesce(p_limit, 50), 500));
-end;
-$$;
-
-
-ALTER FUNCTION public.dev_list_auth_users(p_limit integer) OWNER TO supabase_admin;
-
---
--- Name: dev_list_custom_users(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_list_custom_users() RETURNS TABLE(user_id uuid, email text, created_at timestamp with time zone, global_role text, tenant_role text, tenant_id uuid, password_dev text, kind text)
- LANGUAGE sql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
- with base as (
- select
- u.id as user_id,
- lower(u.email) as email,
- u.created_at
- from auth.users u
- where lower(u.email) not in (
- 'clinic@agenciapsi.com.br',
- 'therapist@agenciapsi.com.br',
- 'patient@agenciapsi.com.br',
- 'saas@agenciapsi.com.br'
- )
- ),
- prof as (
- select p.id, p.role as global_role
- from public.profiles p
- ),
- last_membership as (
- select distinct on (tm.user_id)
- tm.user_id,
- tm.tenant_id,
- tm.role as tenant_role,
- tm.created_at
- from public.tenant_members tm
- where tm.status = 'active'
- order by tm.user_id, tm.created_at desc
- )
- select
- b.user_id,
- b.email,
- b.created_at,
- pr.global_role,
- lm.tenant_role,
- lm.tenant_id,
- dc.password_dev,
- dc.kind
- from base b
- left join prof pr on pr.id = b.user_id
- left join last_membership lm on lm.user_id = b.user_id
- left join public.dev_user_credentials dc on lower(dc.email) = b.email
- order by b.created_at desc;
-$$;
-
-
-ALTER FUNCTION public.dev_list_custom_users() OWNER TO supabase_admin;
-
---
--- Name: dev_list_intent_leads(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_list_intent_leads() RETURNS TABLE(email text, last_intent_at timestamp with time zone, plan_key text, billing_interval text, status text, tenant_id uuid)
- LANGUAGE sql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
- select
- lower(si.email) as email,
- max(si.created_at) as last_intent_at,
- (array_agg(si.plan_key order by si.created_at desc))[1] as plan_key,
- (array_agg(si.interval order by si.created_at desc))[1] as billing_interval,
- (array_agg(si.status order by si.created_at desc))[1] as status,
- (array_agg(si.tenant_id order by si.created_at desc))[1] as tenant_id
- from public.subscription_intents si
- where si.email is not null
- and not exists (
- select 1
- from auth.users au
- where lower(au.email) = lower(si.email)
- )
- group by lower(si.email)
- order by max(si.created_at) desc;
-$$;
-
-
-ALTER FUNCTION public.dev_list_intent_leads() OWNER TO supabase_admin;
-
---
--- Name: dev_public_debug_snapshot(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_public_debug_snapshot() RETURNS TABLE(users_total integer, tenants_total integer, intents_new_total integer, latest_intents jsonb)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $_$
-declare
- v_latest jsonb;
-begin
- select jsonb_agg(
- jsonb_build_object(
- 'created_at', si.created_at,
- 'email_masked',
- regexp_replace(lower(si.email), '(^.).*(@.*$)', '\1***\2'),
- 'plan_key', si.plan_key,
- 'status', si.status
- )
- order by si.created_at desc
- )
- into v_latest
- from (
- select si.*
- from public.subscription_intents si
- where si.email is not null
- order by si.created_at desc
- limit 5
- ) si;
-
- return query
- select
- (select count(*)::int from auth.users) as users_total,
- (select count(*)::int from public.tenants) as tenants_total,
- (select count(*)::int from public.subscription_intents where status = 'new') as intents_new_total,
- coalesce(v_latest, '[]'::jsonb) as latest_intents;
-end;
-$_$;
-
-
-ALTER FUNCTION public.dev_public_debug_snapshot() OWNER TO supabase_admin;
-
---
--- Name: ensure_personal_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.ensure_personal_tenant() RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-DECLARE
- v_uid uuid;
- v_existing uuid;
-BEGIN
- v_uid := auth.uid();
- IF v_uid IS NULL THEN
- RAISE EXCEPTION 'Not authenticated';
- END IF;
-
- SELECT tm.tenant_id INTO v_existing
- FROM public.tenant_members tm
- JOIN public.tenants t ON t.id = tm.tenant_id
- WHERE tm.user_id = v_uid
- AND tm.status = 'active'
- AND t.kind IN ('therapist', 'saas')
- ORDER BY tm.created_at DESC
- LIMIT 1;
-
- IF v_existing IS NOT NULL THEN
- RETURN v_existing;
- END IF;
-
- RETURN public.provision_account_tenant(v_uid, 'therapist');
-END;
-$$;
-
-
-ALTER FUNCTION public.ensure_personal_tenant() OWNER TO supabase_admin;
-
---
--- Name: ensure_personal_tenant_for_user(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_uid uuid;
- v_existing uuid;
- v_tenant uuid;
- v_email text;
- v_name text;
-begin
- v_uid := p_user_id;
- if v_uid is null then
- raise exception 'Missing user id';
- end if;
-
- -- só considera tenant pessoal (kind='saas')
- select tm.tenant_id
- into v_existing
- from public.tenant_members tm
- join public.tenants t on t.id = tm.tenant_id
- where tm.user_id = v_uid
- and tm.status = 'active'
- and t.kind = 'saas'
- order by tm.created_at desc
- limit 1;
-
- if v_existing is not null then
- return v_existing;
- end if;
-
- select email into v_email
- from auth.users
- where id = v_uid;
-
- v_name := coalesce(split_part(v_email, '@', 1), 'Conta');
-
- insert into public.tenants (name, kind, created_at)
- values (v_name || ' (Pessoal)', 'saas', now())
- returning id into v_tenant;
-
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_tenant, v_uid, 'tenant_admin', 'active', now());
-
- return v_tenant;
-end;
-$$;
-
-
-ALTER FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: faq_votar(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.faq_votar(faq_id uuid) RETURNS void
- LANGUAGE sql SECURITY DEFINER
- AS $$
- update public.saas_faq
- set votos = votos + 1,
- updated_at = now()
- where id = faq_id
- and ativo = true;
-$$;
-
-
-ALTER FUNCTION public.faq_votar(faq_id uuid) OWNER TO supabase_admin;
-
---
--- Name: fix_all_subscription_mismatches(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.fix_all_subscription_mismatches() RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- r record;
-begin
- for r in
- select distinct s.user_id as owner_id
- from public.subscriptions s
- where s.status = 'active'
- and s.user_id is not null
- loop
- perform public.rebuild_owner_entitlements(r.owner_id);
- end loop;
-end;
-$$;
-
-
-ALTER FUNCTION public.fix_all_subscription_mismatches() OWNER TO supabase_admin;
-
---
--- Name: fn_agenda_regras_semanais_no_overlap(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.fn_agenda_regras_semanais_no_overlap() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- v_count int;
-begin
- if new.ativo is false then
- return new;
- end if;
-
- select count(*) into v_count
- from public.agenda_regras_semanais r
- where r.owner_id = new.owner_id
- and r.dia_semana = new.dia_semana
- and r.ativo is true
- and (tg_op = 'INSERT' or r.id <> new.id)
- and (new.hora_inicio < r.hora_fim and new.hora_fim > r.hora_inicio);
-
- if v_count > 0 then
- raise exception 'Janela sobreposta: já existe uma regra ativa nesse intervalo.';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.fn_agenda_regras_semanais_no_overlap() OWNER TO supabase_admin;
-
---
--- Name: get_my_email(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.get_my_email() RETURNS text
- LANGUAGE sql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
- select lower(email)
- from auth.users
- where id = auth.uid();
-$$;
-
-
-ALTER FUNCTION public.get_my_email() OWNER TO supabase_admin;
-
---
--- Name: guard_account_type_immutable(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_account_type_immutable() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF OLD.account_type <> 'free' AND NEW.account_type IS DISTINCT FROM OLD.account_type THEN
- RAISE EXCEPTION 'account_type é imutável após escolha (atual: "%" para tentativa: "%"). Para mudar de perfil, crie uma nova conta.', OLD.account_type, NEW.account_type
- USING ERRCODE = 'P0001';
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.guard_account_type_immutable() OWNER TO supabase_admin;
-
---
--- Name: guard_locked_commitment(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_locked_commitment() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if (old.is_locked = true) then
- if (tg_op = 'DELETE') then
- raise exception 'Compromisso bloqueado não pode ser excluído.';
- end if;
-
- if (tg_op = 'UPDATE') then
- if (new.active = false) then
- raise exception 'Compromisso bloqueado não pode ser desativado.';
- end if;
-
- -- trava renomear (mantém o "Sessão" sempre igual)
- if (new.name is distinct from old.name) then
- raise exception 'Compromisso bloqueado não pode ser renomeado.';
- end if;
-
- -- se quiser travar descrição também, descomente:
- -- if (new.description is distinct from old.description) then
- -- raise exception 'Compromisso bloqueado não pode alterar descrição.';
- -- end if;
- end if;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.guard_locked_commitment() OWNER TO supabase_admin;
-
---
--- Name: guard_no_change_core_plan_key(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_no_change_core_plan_key() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if old.key in ('clinic_free','clinic_pro','therapist_free','therapist_pro')
- and new.key is distinct from old.key then
- raise exception 'Não é permitido alterar a key do plano padrão (%).', old.key
- using errcode = 'P0001';
- end if;
-
- return new;
-end $$;
-
-
-ALTER FUNCTION public.guard_no_change_core_plan_key() OWNER TO supabase_admin;
-
---
--- Name: guard_no_change_plan_target(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_no_change_plan_target() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- v_bypass text;
-begin
- -- bypass controlado por sessão/transação:
- -- só passa se app.plan_migration_bypass = '1'
- v_bypass := current_setting('app.plan_migration_bypass', true);
-
- if v_bypass = '1' then
- return new;
- end if;
-
- -- comportamento original (bloqueia qualquer mudança)
- if new.target is distinct from old.target then
- raise exception 'Não é permitido alterar target do plano (%) de % para %.',
- old.key, old.target, new.target
- using errcode = 'P0001';
- end if;
-
- return new;
-end
-$$;
-
-
-ALTER FUNCTION public.guard_no_change_plan_target() OWNER TO supabase_admin;
-
---
--- Name: guard_no_delete_core_plans(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_no_delete_core_plans() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if old.key in ('clinic_free','clinic_pro','therapist_free','therapist_pro') then
- raise exception 'Plano padrão (%) não pode ser removido.', old.key
- using errcode = 'P0001';
- end if;
-
- return old;
-end $$;
-
-
-ALTER FUNCTION public.guard_no_delete_core_plans() OWNER TO supabase_admin;
-
---
--- Name: guard_patient_cannot_own_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_patient_cannot_own_tenant() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_account_type text;
-BEGIN
- SELECT account_type INTO v_account_type
- FROM public.profiles
- WHERE id = NEW.user_id;
-
- IF v_account_type = 'patient' AND NEW.role IN ('tenant_admin', 'therapist') THEN
- RAISE EXCEPTION 'Usuário com perfil "patient" não pode ser proprietário ou terapeuta de um tenant. Se tornou profissional? Crie uma nova conta.'
- USING ERRCODE = 'P0001';
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.guard_patient_cannot_own_tenant() OWNER TO supabase_admin;
-
---
--- Name: guard_tenant_kind_immutable(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_tenant_kind_immutable() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF NEW.kind IS DISTINCT FROM OLD.kind THEN
- RAISE EXCEPTION 'tenants.kind é imutável após criação. Tentativa de alterar "%" para "%".', OLD.kind, NEW.kind
- USING ERRCODE = 'P0001';
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.guard_tenant_kind_immutable() OWNER TO supabase_admin;
-
---
--- Name: handle_new_user(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.handle_new_user() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-BEGIN
- INSERT INTO public.profiles (id, role, account_type)
- VALUES (NEW.id, 'portal_user', 'free')
- ON CONFLICT (id) DO NOTHING;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.handle_new_user() OWNER TO supabase_admin;
-
---
--- Name: handle_new_user_create_personal_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.handle_new_user_create_personal_tenant() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-BEGIN
- -- Desabilitado. Tenant criado no onboarding via provision_account_tenant().
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.handle_new_user_create_personal_tenant() OWNER TO supabase_admin;
-
---
--- Name: has_feature(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.owner_feature_entitlements e
- where e.owner_id = p_owner_id
- and e.feature_key = p_feature_key
- );
-$$;
-
-
-ALTER FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) OWNER TO supabase_admin;
-
---
--- Name: is_clinic_tenant(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_clinic_tenant(_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- SELECT EXISTS (
- SELECT 1 FROM public.tenants t
- WHERE t.id = _tenant_id
- AND t.kind IN ('clinic', 'clinic_coworking', 'clinic_reception', 'clinic_full')
- );
-$$;
-
-
-ALTER FUNCTION public.is_clinic_tenant(_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: is_saas_admin(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_saas_admin() RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1 from public.saas_admins sa
- where sa.user_id = auth.uid()
- );
-$$;
-
-
-ALTER FUNCTION public.is_saas_admin() OWNER TO supabase_admin;
-
---
--- Name: is_tenant_admin(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_tenant_admin(p_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
- select exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.role = 'tenant_admin'
- and tm.status = 'active'
- );
-$$;
-
-
-ALTER FUNCTION public.is_tenant_admin(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: is_tenant_member(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_tenant_member(_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.tenant_members m
- where m.tenant_id = _tenant_id
- and m.user_id = auth.uid()
- and m.status = 'active'
- );
-$$;
-
-
-ALTER FUNCTION public.is_tenant_member(_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: is_therapist_tenant(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_therapist_tenant(_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- SELECT EXISTS (
- SELECT 1 FROM public.tenants t
- WHERE t.id = _tenant_id AND t.kind = 'therapist'
- );
-$$;
-
-
-ALTER FUNCTION public.is_therapist_tenant(_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: jwt_email(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.jwt_email() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select nullif(lower(current_setting('request.jwt.claim.email', true)), '');
-$$;
-
-
-ALTER FUNCTION public.jwt_email() OWNER TO supabase_admin;
-
---
--- Name: my_tenants(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.my_tenants() RETURNS TABLE(tenant_id uuid, role text, status text, kind text)
- LANGUAGE sql STABLE
- AS $$
- select
- tm.tenant_id,
- tm.role,
- tm.status,
- t.kind
- from public.tenant_members tm
- join public.tenants t on t.id = tm.tenant_id
- where tm.user_id = auth.uid();
-$$;
-
-
-ALTER FUNCTION public.my_tenants() OWNER TO supabase_admin;
-
---
--- Name: on_new_user_seed_patient_groups(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.on_new_user_seed_patient_groups() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
- BEGIN
- PERFORM public.seed_default_patient_groups(NEW.id);
- RETURN NEW;
- END;
- $$;
-
-
-ALTER FUNCTION public.on_new_user_seed_patient_groups() OWNER TO supabase_admin;
-
---
--- Name: patients_validate_member_consistency(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.patients_validate_member_consistency() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_tenant_responsible uuid;
- v_tenant_therapist uuid;
-BEGIN
- -- responsible_member sempre deve existir e ser do tenant
- SELECT tenant_id INTO v_tenant_responsible
- FROM public.tenant_members
- WHERE id = NEW.responsible_member_id;
-
- IF v_tenant_responsible IS NULL THEN
- RAISE EXCEPTION 'Responsible member not found';
- END IF;
-
- IF NEW.tenant_id IS NULL THEN
- RAISE EXCEPTION 'tenant_id is required';
- END IF;
-
- IF v_tenant_responsible <> NEW.tenant_id THEN
- RAISE EXCEPTION 'Responsible member must belong to the same tenant';
- END IF;
-
- -- therapist scope: therapist_member_id deve existir e ser do mesmo tenant
- IF NEW.patient_scope = 'therapist' THEN
- IF NEW.therapist_member_id IS NULL THEN
- RAISE EXCEPTION 'therapist_member_id is required when patient_scope=therapist';
- END IF;
-
- SELECT tenant_id INTO v_tenant_therapist
- FROM public.tenant_members
- WHERE id = NEW.therapist_member_id;
-
- IF v_tenant_therapist IS NULL THEN
- RAISE EXCEPTION 'Therapist member not found';
- END IF;
-
- IF v_tenant_therapist <> NEW.tenant_id THEN
- RAISE EXCEPTION 'Therapist member must belong to the same tenant';
- END IF;
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.patients_validate_member_consistency() OWNER TO supabase_admin;
-
---
--- Name: patients_validate_responsible_member_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.patients_validate_responsible_member_tenant() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- m_tenant uuid;
-begin
- select tenant_id into m_tenant
- from public.tenant_members
- where id = new.responsible_member_id;
-
- if m_tenant is null then
- raise exception 'Responsible member not found';
- end if;
-
- if new.tenant_id is null then
- raise exception 'tenant_id is required';
- end if;
-
- if m_tenant <> new.tenant_id then
- raise exception 'Responsible member must belong to the same tenant';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.patients_validate_responsible_member_tenant() OWNER TO supabase_admin;
-
---
--- Name: prevent_promoting_to_system(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.prevent_promoting_to_system() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if new.is_system = true and old.is_system is distinct from true then
- raise exception 'Não é permitido transformar um grupo comum em grupo do sistema.';
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.prevent_promoting_to_system() OWNER TO supabase_admin;
-
---
--- Name: prevent_saas_membership(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.prevent_saas_membership() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF EXISTS (
- SELECT 1
- FROM public.profiles
- WHERE id = NEW.user_id
- AND role = 'saas_admin'
- ) THEN
- RAISE EXCEPTION 'SaaS admin cannot belong to tenant';
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.prevent_saas_membership() OWNER TO supabase_admin;
-
---
--- Name: prevent_system_group_changes(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.prevent_system_group_changes() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- -- Se for grupo do sistema, regras rígidas:
- if old.is_system = true then
-
- -- nunca pode deletar
- if tg_op = 'DELETE' then
- raise exception 'Grupos padrão do sistema não podem ser alterados ou excluídos.';
- end if;
-
- if tg_op = 'UPDATE' then
- -- permite SOMENTE mudar tenant_id e/ou updated_at
- -- qualquer mudança de conteúdo permanece proibida
- if
- new.nome is distinct from old.nome or
- new.descricao is distinct from old.descricao or
- new.cor is distinct from old.cor or
- new.is_active is distinct from old.is_active or
- new.is_system is distinct from old.is_system or
- new.owner_id is distinct from old.owner_id or
- new.therapist_id is distinct from old.therapist_id or
- new.created_at is distinct from old.created_at
- then
- raise exception 'Grupos padrão do sistema não podem ser alterados ou excluídos.';
- end if;
-
- -- chegou aqui: só tenant_id/updated_at mudaram -> ok
- return new;
- end if;
-
- end if;
-
- -- não-system: deixa passar
- if tg_op = 'DELETE' then
- return old;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.prevent_system_group_changes() OWNER TO supabase_admin;
-
---
--- Name: provision_account_tenant(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text DEFAULT NULL::text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-DECLARE
- v_tenant_id uuid;
- v_account_type text;
- v_name text;
-BEGIN
- IF p_kind NOT IN ('therapist', 'clinic_coworking', 'clinic_reception', 'clinic_full') THEN
- RAISE EXCEPTION 'kind inválido: "%". Use: therapist, clinic_coworking, clinic_reception, clinic_full.', p_kind
- USING ERRCODE = 'P0001';
- END IF;
-
- v_account_type := CASE WHEN p_kind = 'therapist' THEN 'therapist' ELSE 'clinic' END;
-
- IF EXISTS (
- SELECT 1
- FROM public.tenant_members tm
- JOIN public.tenants t ON t.id = tm.tenant_id
- WHERE tm.user_id = p_user_id
- AND tm.role = 'tenant_admin'
- AND tm.status = 'active'
- AND t.kind = p_kind
- ) THEN
- RAISE EXCEPTION 'Usuário já possui um tenant do tipo "%".', p_kind
- USING ERRCODE = 'P0001';
- END IF;
-
- v_name := COALESCE(
- NULLIF(TRIM(p_name), ''),
- (
- SELECT COALESCE(NULLIF(TRIM(pr.full_name), ''), SPLIT_PART(au.email, '@', 1))
- FROM public.profiles pr
- JOIN auth.users au ON au.id = pr.id
- WHERE pr.id = p_user_id
- ),
- 'Conta'
- );
-
- INSERT INTO public.tenants (name, kind, created_at)
- VALUES (v_name, p_kind, now())
- RETURNING id INTO v_tenant_id;
-
- INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
- VALUES (v_tenant_id, p_user_id, 'tenant_admin', 'active', now());
-
- UPDATE public.profiles
- SET account_type = v_account_type
- WHERE id = p_user_id;
-
- PERFORM public.seed_determined_commitments(v_tenant_id);
-
- RETURN v_tenant_id;
-END;
-$$;
-
-
-ALTER FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) OWNER TO supabase_admin;
-
---
--- Name: FUNCTION provision_account_tenant(p_user_id uuid, p_kind text, p_name text); Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) IS 'Cria o tenant do tipo correto e atualiza account_type no profile. Chamar no onboarding após escolha/pagamento de plano therapist ou clinic. p_kind: therapist | clinic_coworking | clinic_reception | clinic_full';
-
-
---
--- Name: reactivate_subscription(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.reactivate_subscription(p_subscription_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_owner_type text;
- v_owner_ref uuid;
-begin
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- if v_sub.status = 'active' then
- return v_sub;
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set status = 'active',
- cancel_at_period_end = false,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'reactivated',
- v_sub.plan_id,
- v_sub.plan_id,
- auth.uid(),
- 'Reativação manual via admin',
- 'admin_panel',
- jsonb_build_object('previous_status', 'canceled')
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation(owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-
-end;
-$$;
-
-
-ALTER FUNCTION public.reactivate_subscription(p_subscription_id uuid) OWNER TO supabase_admin;
-
---
--- Name: rebuild_owner_entitlements(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_plan_id uuid;
-begin
- -- Plano ativo do owner (owner = subscriptions.user_id)
- select s.plan_id
- into v_plan_id
- from public.subscriptions s
- where s.user_id = p_owner_id
- and s.status = 'active'
- order by s.created_at desc
- limit 1;
-
- -- Sempre zera entitlements do owner (rebuild)
- delete from public.owner_feature_entitlements e
- where e.owner_id = p_owner_id;
-
- -- Se não tem assinatura ativa, acabou
- if v_plan_id is null then
- return;
- end if;
-
- -- Recria entitlements esperados pelo plano
- insert into public.owner_feature_entitlements (owner_id, feature_key, sources, limits_list)
- select
- p_owner_id as owner_id,
- f.key as feature_key,
- array['plan'::text] as sources,
- '{}'::jsonb as limits_list
- from public.plan_features pf
- join public.features f on f.id = pf.feature_id
- where pf.plan_id = v_plan_id;
-
-end;
-$$;
-
-
-ALTER FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) OWNER TO supabase_admin;
-
---
--- Name: revoke_support_session(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.revoke_support_session(p_token text) RETURNS boolean
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_admin_id uuid;
- v_role text;
-BEGIN
- v_admin_id := auth.uid();
- IF v_admin_id IS NULL THEN
- RAISE EXCEPTION 'Não autenticado.' USING ERRCODE = 'P0001';
- END IF;
-
- SELECT role INTO v_role FROM public.profiles WHERE id = v_admin_id;
- IF v_role <> 'saas_admin' THEN
- RAISE EXCEPTION 'Acesso negado.' USING ERRCODE = 'P0002';
- END IF;
-
- DELETE FROM public.support_sessions
- WHERE token = p_token
- AND admin_id = v_admin_id;
-
- RETURN FOUND;
-END;
-$$;
-
-
-ALTER FUNCTION public.revoke_support_session(p_token text) OWNER TO supabase_admin;
-
---
--- Name: rotate_patient_invite_token(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.rotate_patient_invite_token(p_new_token text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_uid uuid;
- v_id uuid;
-begin
- -- pega o usuário logado
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'Usuário não autenticado';
- end if;
-
- -- desativa tokens antigos ativos do usuário
- update public.patient_invites
- set active = false
- where owner_id = v_uid
- and active = true;
-
- -- cria novo token
- insert into public.patient_invites (owner_id, token, active)
- values (v_uid, p_new_token, true)
- returning id into v_id;
-
- return v_id;
-end;
-$$;
-
-
-ALTER FUNCTION public.rotate_patient_invite_token(p_new_token text) OWNER TO supabase_admin;
-
---
--- Name: saas_votar_doc(uuid, boolean); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_uid uuid := auth.uid();
- v_voto_antigo boolean;
-begin
- if v_uid is null then
- raise exception 'Não autenticado';
- end if;
-
- -- Verifica se já votou
- select util into v_voto_antigo
- from public.saas_doc_votos
- where doc_id = p_doc_id and user_id = v_uid;
-
- if found then
- -- Já votou igual → cancela o voto (toggle)
- if v_voto_antigo = p_util then
- delete from public.saas_doc_votos
- where doc_id = p_doc_id and user_id = v_uid;
-
- update public.saas_docs set
- votos_util = greatest(0, votos_util - (case when p_util then 1 else 0 end)),
- votos_nao_util = greatest(0, votos_nao_util - (case when not p_util then 1 else 0 end)),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'removido', 'util', null);
- else
- -- Mudou de voto
- update public.saas_doc_votos set util = p_util, updated_at = now()
- where doc_id = p_doc_id and user_id = v_uid;
-
- update public.saas_docs set
- votos_util = greatest(0, votos_util + (case when p_util then 1 else -1 end)),
- votos_nao_util = greatest(0, votos_nao_util + (case when not p_util then 1 else -1 end)),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'atualizado', 'util', p_util);
- end if;
- else
- -- Primeiro voto
- insert into public.saas_doc_votos (doc_id, user_id, util)
- values (p_doc_id, v_uid, p_util);
-
- update public.saas_docs set
- votos_util = votos_util + (case when p_util then 1 else 0 end),
- votos_nao_util = votos_nao_util + (case when not p_util then 1 else 0 end),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'registrado', 'util', p_util);
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) OWNER TO supabase_admin;
-
---
--- Name: seed_determined_commitments(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.seed_determined_commitments(p_tenant_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_id uuid;
-begin
- -- Sessão (locked + sempre ativa)
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'session'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'session', true, true, 'Sessão', 'Sessão com paciente');
- end if;
-
- -- Leitura
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'reading'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'reading', false, true, 'Leitura', 'Praticar leitura');
- end if;
-
- -- Supervisão
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'supervision'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'supervision', false, true, 'Supervisão', 'Supervisão');
- end if;
-
- -- Aula ✅ (corrigido)
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'class'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'class', false, false, 'Aula', 'Dar aula');
- end if;
-
- -- Análise pessoal
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'analysis'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'analysis', false, true, 'Análise Pessoal', 'Minha análise pessoal');
- end if;
-
- -- -------------------------------------------------------
- -- Campos padrão (idempotentes por (commitment_id, key))
- -- -------------------------------------------------------
-
- -- Leitura
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'reading'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'book') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'book', 'Livro', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'author') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'author', 'Autor', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Supervisão
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'supervision'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'supervisor') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'supervisor', 'Supervisor', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'topic') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'topic', 'Assunto', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Aula
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'class'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'theme') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'theme', 'Tema', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'group') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'group', 'Turma', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Análise
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'analysis'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'analyst') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'analyst', 'Analista', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'focus') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'focus', 'Foco', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.seed_determined_commitments(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: set_owner_id(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_owner_id() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if new.owner_id is null then
- new.owner_id := auth.uid();
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.set_owner_id() OWNER TO supabase_admin;
-
---
--- Name: set_tenant_feature_exception(uuid, text, boolean, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text DEFAULT NULL::text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-begin
- -- ✅ Só owner ou admin do tenant podem alterar features
- if not exists (
- select 1 from public.tenant_members
- where tenant_id = p_tenant_id
- and user_id = auth.uid()
- and role in ('owner', 'admin')
- and status = 'active'
- ) then
- raise exception 'Acesso negado: apenas owner/admin pode alterar features do tenant.';
- end if;
-
- insert into public.tenant_features (tenant_id, feature_key, enabled)
- values (p_tenant_id, p_feature_key, p_enabled)
- on conflict (tenant_id, feature_key)
- do update set enabled = excluded.enabled;
-
- insert into public.tenant_feature_exceptions_log (
- tenant_id, feature_key, enabled, reason, created_by
- ) values (
- p_tenant_id, p_feature_key, p_enabled, p_reason, auth.uid()
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) OWNER TO supabase_admin;
-
---
--- Name: set_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- new.updated_at = now();
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.set_updated_at() OWNER TO supabase_admin;
-
---
--- Name: set_updated_at_recurrence(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_updated_at_recurrence() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN NEW.updated_at = now(); RETURN NEW; END;
-$$;
-
-
-ALTER FUNCTION public.set_updated_at_recurrence() OWNER TO supabase_admin;
-
---
--- Name: split_recurrence_at(uuid, date); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_old public.recurrence_rules;
- v_new_id uuid;
-BEGIN
- -- busca a regra original
- SELECT * INTO v_old
- FROM public.recurrence_rules
- WHERE id = p_recurrence_id;
-
- IF NOT FOUND THEN
- RAISE EXCEPTION 'recurrence_rule % não encontrada', p_recurrence_id;
- END IF;
-
- -- encerra a regra antiga na data anterior
- UPDATE public.recurrence_rules
- SET
- end_date = p_from_date - INTERVAL '1 day',
- open_ended = false,
- updated_at = now()
- WHERE id = p_recurrence_id;
-
- -- cria nova regra a partir de p_from_date
- INSERT INTO public.recurrence_rules (
- tenant_id, owner_id, therapist_id, patient_id,
- determined_commitment_id, type, interval, weekdays,
- start_time, end_time, timezone, duration_min,
- start_date, end_date, max_occurrences, open_ended,
- modalidade, titulo_custom, observacoes, extra_fields, status
- )
- SELECT
- tenant_id, owner_id, therapist_id, patient_id,
- determined_commitment_id, type, interval, weekdays,
- start_time, end_time, timezone, duration_min,
- p_from_date, v_old.end_date, v_old.max_occurrences, v_old.open_ended,
- modalidade, titulo_custom, observacoes, extra_fields, status
- FROM public.recurrence_rules
- WHERE id = p_recurrence_id
- RETURNING id INTO v_new_id;
-
- RETURN v_new_id;
-END;
-$$;
-
-
-ALTER FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_view_insert(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.subscription_intents_view_insert() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_target text;
- v_plan_id uuid;
-begin
- select p.id, p.target into v_plan_id, v_target
- from public.plans p
- where p.key = new.plan_key;
-
- if v_plan_id is null then
- raise exception 'Plano inválido: plan_key=%', new.plan_key;
- end if;
-
- if lower(v_target) = 'clinic' then
- if new.tenant_id is null then
- raise exception 'Intenção clinic exige tenant_id.';
- end if;
-
- insert into public.subscription_intents_tenant (
- id, tenant_id, created_by_user_id, email,
- plan_id, plan_key, interval, amount_cents, currency,
- status, source, notes, created_at, paid_at
- ) values (
- coalesce(new.id, gen_random_uuid()),
- new.tenant_id, new.created_by_user_id, new.email,
- v_plan_id, new.plan_key, coalesce(new.interval,'month'),
- new.amount_cents, coalesce(new.currency,'BRL'),
- coalesce(new.status,'pending'), coalesce(new.source,'manual'),
- new.notes, coalesce(new.created_at, now()), new.paid_at
- );
-
- new.plan_target := 'clinic';
- return new;
- end if;
-
- -- therapist ou supervisor → tabela personal
- if lower(v_target) in ('therapist', 'supervisor') then
- insert into public.subscription_intents_personal (
- id, user_id, created_by_user_id, email,
- plan_id, plan_key, interval, amount_cents, currency,
- status, source, notes, created_at, paid_at
- ) values (
- coalesce(new.id, gen_random_uuid()),
- new.user_id, new.created_by_user_id, new.email,
- v_plan_id, new.plan_key, coalesce(new.interval,'month'),
- new.amount_cents, coalesce(new.currency,'BRL'),
- coalesce(new.status,'pending'), coalesce(new.source,'manual'),
- new.notes, coalesce(new.created_at, now()), new.paid_at
- );
-
- new.plan_target := lower(v_target); -- 'therapist' ou 'supervisor'
- return new;
- end if;
-
- raise exception 'Target de plano não suportado: %', v_target;
-end;
-$$;
-
-
-ALTER FUNCTION public.subscription_intents_view_insert() OWNER TO supabase_admin;
-
---
--- Name: subscriptions_validate_scope(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.subscriptions_validate_scope() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_target text;
-BEGIN
- SELECT lower(p.target) INTO v_target
- FROM public.plans p
- WHERE p.id = NEW.plan_id;
-
- IF v_target IS NULL THEN
- RAISE EXCEPTION 'Plano inválido (target nulo).';
- END IF;
-
- IF v_target = 'clinic' THEN
- IF NEW.tenant_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura clinic exige tenant_id.';
- END IF;
- IF NEW.user_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura clinic não pode ter user_id (XOR).';
- END IF;
-
- ELSIF v_target IN ('therapist', 'supervisor') THEN
- -- supervisor é pessoal como therapist
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura % não deve ter tenant_id.', v_target;
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura % exige user_id.', v_target;
- END IF;
-
- ELSIF v_target = 'patient' THEN
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura patient não deve ter tenant_id.';
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura patient exige user_id.';
- END IF;
-
- ELSE
- RAISE EXCEPTION 'Target de plano inválido: %', v_target;
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.subscriptions_validate_scope() OWNER TO supabase_admin;
-
---
--- Name: sync_busy_mirror_agenda_eventos(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.sync_busy_mirror_agenda_eventos() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- clinic_tenant uuid;
- is_personal boolean;
- should_mirror boolean;
-begin
- -- Anti-recursão: espelho não espelha
- if (tg_op <> 'DELETE') then
- if new.mirror_of_event_id is not null then
- return new;
- end if;
- else
- if old.mirror_of_event_id is not null then
- return old;
- end if;
- end if;
-
- -- Define se é pessoal e se deve espelhar
- if (tg_op = 'DELETE') then
- is_personal := (old.tenant_id = old.owner_id);
- should_mirror := (old.visibility_scope in ('busy_only','private'));
- else
- is_personal := (new.tenant_id = new.owner_id);
- should_mirror := (new.visibility_scope in ('busy_only','private'));
- end if;
-
- -- Se não é pessoal, não faz nada
- if not is_personal then
- if (tg_op = 'DELETE') then
- return old;
- end if;
- return new;
- end if;
-
- -- DELETE: remove espelhos existentes
- if (tg_op = 'DELETE') then
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = old.id
- and e.mirror_source = 'personal_busy_mirror';
-
- return old;
- end if;
-
- -- INSERT/UPDATE:
- -- Se não deve espelhar, remove espelhos e sai
- if not should_mirror then
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = new.id
- and e.mirror_source = 'personal_busy_mirror';
-
- return new;
- end if;
-
- -- Para cada clínica onde o usuário é therapist active, cria/atualiza o "Ocupado"
- for clinic_tenant in
- select tm.tenant_id
- from public.tenant_members tm
- where tm.user_id = new.owner_id
- and tm.role = 'therapist'
- and tm.status = 'active'
- and tm.tenant_id <> new.owner_id
- loop
- insert into public.agenda_eventos (
- tenant_id,
- owner_id,
- terapeuta_id,
- paciente_id,
- tipo,
- status,
- titulo,
- observacoes,
- inicio_em,
- fim_em,
- mirror_of_event_id,
- mirror_source,
- visibility_scope,
- created_at,
- updated_at
- ) values (
- clinic_tenant,
- new.owner_id,
- new.owner_id,
- null,
- 'bloqueio'::public.tipo_evento_agenda,
- 'agendado'::public.status_evento_agenda,
- 'Ocupado',
- null,
- new.inicio_em,
- new.fim_em,
- new.id,
- 'personal_busy_mirror',
- 'public',
- now(),
- now()
- )
- on conflict (tenant_id, mirror_of_event_id) where mirror_of_event_id is not null
- do update set
- owner_id = excluded.owner_id,
- terapeuta_id = excluded.terapeuta_id,
- tipo = excluded.tipo,
- status = excluded.status,
- titulo = excluded.titulo,
- observacoes = excluded.observacoes,
- inicio_em = excluded.inicio_em,
- fim_em = excluded.fim_em,
- updated_at = now();
- end loop;
-
- -- Limpa espelhos de clínicas onde o vínculo therapist active não existe mais
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = new.id
- and e.mirror_source = 'personal_busy_mirror'
- and not exists (
- select 1
- from public.tenant_members tm
- where tm.user_id = new.owner_id
- and tm.role = 'therapist'
- and tm.status = 'active'
- and tm.tenant_id = e.tenant_id
- );
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.sync_busy_mirror_agenda_eventos() OWNER TO supabase_admin;
-
---
--- Name: tenant_accept_invite(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_accept_invite(p_token uuid) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-declare
- v_uid uuid;
- v_email text;
- v_invite public.tenant_invites%rowtype;
-begin
- -- 1) precisa estar autenticado
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'not_authenticated' using errcode = 'P0001';
- end if;
-
- -- 2) pega email real do usuário logado sem depender do JWT claim
- select u.email
- into v_email
- from auth.users u
- where u.id = v_uid;
-
- if v_email is null or length(trim(v_email)) = 0 then
- raise exception 'missing_user_email' using errcode = 'P0001';
- end if;
-
- -- 3) carrega o invite e trava linha (evita 2 aceites concorrentes)
- select *
- into v_invite
- from public.tenant_invites i
- where i.token = p_token
- for update;
-
- if not found then
- raise exception 'invite_not_found' using errcode = 'P0001';
- end if;
-
- -- 4) validações de estado
- if v_invite.revoked_at is not null then
- raise exception 'invite_revoked' using errcode = 'P0001';
- end if;
-
- if v_invite.accepted_at is not null then
- raise exception 'invite_already_accepted' using errcode = 'P0001';
- end if;
-
- if v_invite.expires_at is not null and v_invite.expires_at <= now() then
- raise exception 'invite_expired' using errcode = 'P0001';
- end if;
-
- -- 5) valida email (case-insensitive)
- if lower(trim(v_invite.email)) <> lower(trim(v_email)) then
- raise exception 'email_mismatch' using errcode = 'P0001';
- end if;
-
- -- 6) consome o invite
- update public.tenant_invites
- set accepted_at = now(),
- accepted_by = v_uid
- where id = v_invite.id;
-
- -- 7) cria ou reativa o membership
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_invite.tenant_id, v_uid, v_invite.role, 'active', now())
- on conflict (tenant_id, user_id)
- do update set
- role = excluded.role,
- status = 'active';
-
- -- 8) retorno útil pro front (você já tenta ler tenant_id no AcceptInvitePage)
- return jsonb_build_object(
- 'ok', true,
- 'tenant_id', v_invite.tenant_id,
- 'role', v_invite.role
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_accept_invite(p_token uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_members; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_members (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- user_id uuid NOT NULL,
- role text NOT NULL,
- status text DEFAULT 'active'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_members OWNER TO supabase_admin;
-
---
--- Name: tenant_add_member_by_email(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text DEFAULT 'therapist'::text) RETURNS public.tenant_members
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-declare
- v_target_uid uuid;
- v_member public.tenant_members%rowtype;
- v_is_admin boolean;
- v_email text;
-begin
- if p_tenant_id is null then
- raise exception 'tenant_id é obrigatório';
- end if;
-
- v_email := lower(trim(coalesce(p_email, '')));
- if v_email = '' then
- raise exception 'email é obrigatório';
- end if;
-
- -- valida role permitida
- if p_role not in ('tenant_admin','therapist','secretary','patient') then
- raise exception 'role inválida: %', p_role;
- end if;
-
- -- apenas admin do tenant (role real no banco)
- select exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.role = 'tenant_admin'
- and coalesce(tm.status,'active') = 'active'
- ) into v_is_admin;
-
- if not v_is_admin then
- raise exception 'sem permissão: apenas admin da clínica pode adicionar membros';
- end if;
-
- -- acha usuário pelo e-mail no Supabase Auth
- select u.id
- into v_target_uid
- from auth.users u
- where lower(u.email) = v_email
- limit 1;
-
- if v_target_uid is null then
- raise exception 'nenhum usuário encontrado com este e-mail';
- end if;
-
- -- cria ou reativa membro
- insert into public.tenant_members (tenant_id, user_id, role, status)
- values (p_tenant_id, v_target_uid, p_role, 'active')
- on conflict (tenant_id, user_id)
- do update set
- role = excluded.role,
- status = 'active'
- returning * into v_member;
-
- return v_member;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) OWNER TO supabase_admin;
-
---
--- Name: tenant_feature_allowed(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.v_tenant_entitlements v
- where v.tenant_id = p_tenant_id
- and v.feature_key = p_feature_key
- and coalesce(v.allowed, false) = true
- );
-$$;
-
-
-ALTER FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) OWNER TO supabase_admin;
-
---
--- Name: tenant_feature_enabled(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select coalesce(
- (select tf.enabled
- from public.tenant_features tf
- where tf.tenant_id = p_tenant_id and tf.feature_key = p_feature_key),
- false
- );
-$$;
-
-
-ALTER FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) OWNER TO supabase_admin;
-
---
--- Name: tenant_features_guard_with_plan(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_features_guard_with_plan() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- v_allowed boolean;
-begin
- -- só valida quando está habilitando
- if new.enabled is distinct from true then
- return new;
- end if;
-
- -- permitido pelo plano do tenant?
- select exists (
- select 1
- from public.v_tenant_entitlements_full v
- where v.tenant_id = new.tenant_id
- and v.feature_key = new.feature_key
- and v.allowed = true
- )
- into v_allowed;
-
- if not v_allowed then
- raise exception 'Feature % não permitida pelo plano atual do tenant %.',
- new.feature_key, new.tenant_id
- using errcode = 'P0001';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_features_guard_with_plan() OWNER TO supabase_admin;
-
---
--- Name: tenant_has_feature(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select
- exists (
- select 1
- from public.v_tenant_entitlements e
- where e.tenant_id = _tenant_id
- and e.feature_key = _feature
- and e.allowed = true
- )
- or exists (
- select 1
- from public.tenant_features tf
- where tf.tenant_id = _tenant_id
- and tf.feature_key = _feature
- and tf.enabled = true
- );
-$$;
-
-
-ALTER FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) OWNER TO supabase_admin;
-
---
--- Name: tenant_invite_member_by_email(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-declare
- v_email text;
- v_my_email text;
- v_token uuid;
- v_updated int;
-begin
- -- validações básicas
- if p_tenant_id is null then
- raise exception 'tenant_id inválido' using errcode = 'P0001';
- end if;
-
- v_email := lower(trim(coalesce(p_email, '')));
- if v_email = '' then
- raise exception 'Informe um email' using errcode = 'P0001';
- end if;
-
- -- role permitido (ajuste se quiser)
- if p_role is null or p_role not in ('therapist', 'secretary') then
- raise exception 'Role inválido (use therapist/secretary)' using errcode = 'P0001';
- end if;
-
- -- ✅ bloqueio: auto-convite
- v_my_email := public.get_my_email();
- if v_my_email is not null and v_email = v_my_email then
- raise exception 'Você não pode convidar o seu próprio email.' using errcode = 'P0001';
- end if;
-
- -- ✅ bloqueio: já é membro ativo do tenant
- if exists (
- select 1
- from tenant_members tm
- join auth.users au on au.id = tm.user_id
- where tm.tenant_id = p_tenant_id
- and tm.status = 'active'
- and lower(au.email) = v_email
- ) then
- raise exception 'Este email já está vinculado a esta clínica.' using errcode = 'P0001';
- end if;
-
- -- ✅ permissão: só admin do tenant pode convidar
- if not exists (
- select 1
- from tenant_members me
- where me.tenant_id = p_tenant_id
- and me.user_id = auth.uid()
- and me.status = 'active'
- and me.role in ('tenant_admin','clinic_admin')
- ) then
- raise exception 'Sem permissão para convidar membros.' using errcode = 'P0001';
- end if;
-
- -- Gera token (reenvio simples / regeneração)
- v_token := gen_random_uuid();
-
- -- 1) tenta "regerar" um convite pendente existente (mesmo email)
- update tenant_invites
- set token = v_token,
- role = p_role,
- created_at = now(),
- expires_at = now() + interval '7 days',
- accepted_at = null,
- revoked_at = null
- where tenant_id = p_tenant_id
- and lower(email) = v_email
- and accepted_at is null
- and revoked_at is null;
-
- get diagnostics v_updated = row_count;
-
- -- 2) se não atualizou nada, cria convite novo
- if v_updated = 0 then
- insert into tenant_invites (tenant_id, email, role, token, created_at, expires_at)
- values (p_tenant_id, v_email, p_role, v_token, now(), now() + interval '7 days');
- end if;
-
- return v_token;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) OWNER TO supabase_admin;
-
---
--- Name: tenant_reactivate_member(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- update public.tenant_members
- set status = 'active'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_remove_member(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-declare
- v_role text;
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- if p_member_user_id = auth.uid() then
- raise exception 'cannot_remove_self';
- end if;
-
- -- pega role atual do membro (se não existir, erro)
- select role into v_role
- from public.tenant_members
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if v_role is null then
- raise exception 'membership_not_found';
- end if;
-
- -- trava: se for therapist, não pode remover com eventos futuros
- if v_role = 'therapist' then
- if exists (
- select 1
- from public.agenda_eventos e
- where e.owner_id = p_tenant_id
- and e.terapeuta_id = p_member_user_id
- and e.inicio_em >= now()
- and e.status::text not in ('cancelado','cancelled','canceled')
- limit 1
- ) then
- raise exception 'cannot_remove_therapist_with_future_events';
- end if;
- end if;
-
- update public.tenant_members
- set status = 'inactive'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_remove_member_soft(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- if p_member_user_id = auth.uid() then
- raise exception 'cannot_remove_self';
- end if;
-
- update public.tenant_members
- set status = 'inactive'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_revoke_invite(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-declare
- v_email text;
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- v_email := lower(trim(p_email));
-
- update public.tenant_invites
- set revoked_at = now(),
- revoked_by = auth.uid()
- where tenant_id = p_tenant_id
- and lower(email) = v_email
- and role = p_role
- and accepted_at is null
- and revoked_at is null;
-
- if not found then
- raise exception 'invite_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) OWNER TO supabase_admin;
-
---
--- Name: tenant_set_member_status(uuid, uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- -- valida status (adapte aos seus valores reais)
- if p_new_status not in ('active','inactive','suspended','invited') then
- raise exception 'invalid_status: %', p_new_status;
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- -- evita desativar a si mesmo (opcional)
- if p_member_user_id = auth.uid() and p_new_status <> 'active' then
- raise exception 'cannot_disable_self';
- end if;
-
- update public.tenant_members
- set status = p_new_status
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) OWNER TO supabase_admin;
-
---
--- Name: tenant_update_member_role(uuid, uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- -- exige auth
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- -- valida role
- if p_new_role not in ('tenant_admin','therapist','secretary','patient') then
- raise exception 'invalid_role: %', p_new_role;
- end if;
-
- -- somente tenant_admin ativo pode alterar role
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- -- evita o admin remover o próprio admin sem querer (opcional mas recomendado)
- if p_member_user_id = auth.uid() and p_new_role <> 'tenant_admin' then
- raise exception 'cannot_demote_self';
- end if;
-
- update public.tenant_members
- set role = p_new_role
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) OWNER TO supabase_admin;
-
---
--- Name: toggle_plan(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.toggle_plan(owner uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- current_key text;
- new_key text;
-begin
- select p.key into current_key
- from subscriptions s
- join plans p on p.id = s.plan_id
- where s.owner_id = owner
- and s.status = 'active';
-
- new_key := case
- when current_key = 'pro' then 'free'
- else 'pro'
- end;
-
- update subscriptions s
- set plan_id = p.id
- from plans p
- where p.key = new_key
- and s.owner_id = owner
- and s.status = 'active';
-end;
-$$;
-
-
-ALTER FUNCTION public.toggle_plan(owner uuid) OWNER TO supabase_admin;
-
---
--- Name: transition_subscription(uuid, text, text, jsonb); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text DEFAULT NULL::text, p_metadata jsonb DEFAULT NULL::jsonb) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_uid uuid;
- v_is_allowed boolean := false;
-begin
- v_uid := auth.uid();
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id;
-
- if not found then
- raise exception 'Assinatura não encontrada';
- end if;
-
- -- =====================================================
- -- 🔐 BLOCO DE AUTORIZAÇÃO
- -- =====================================================
-
- -- 1) SaaS admin pode tudo
- if is_saas_admin() then
- v_is_allowed := true;
- end if;
-
- -- 2) Assinatura pessoal (therapist)
- if not v_is_allowed
- and v_sub.tenant_id is null
- and v_sub.user_id = v_uid then
- v_is_allowed := true;
- end if;
-
- -- 3) Assinatura de clinic (tenant)
- if not v_is_allowed
- and v_sub.tenant_id is not null then
-
- if exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = v_sub.tenant_id
- and tm.user_id = v_uid
- and tm.status = 'active'
- and tm.role = 'tenant_admin'
- ) then
- v_is_allowed := true;
- end if;
-
- end if;
-
- if not v_is_allowed then
- raise exception 'Sem permissão para transicionar esta assinatura';
- end if;
-
- -- =====================================================
- -- 🧠 TRANSIÇÃO
- -- =====================================================
-
- update public.subscriptions
- set status = p_to_status,
- updated_at = now(),
- cancelled_at = case when p_to_status = 'cancelled' then now() else cancelled_at end,
- suspended_at = case when p_to_status = 'suspended' then now() else suspended_at end,
- past_due_since = case when p_to_status = 'past_due' then now() else past_due_since end,
- expired_at = case when p_to_status = 'expired' then now() else expired_at end,
- activated_at = case when p_to_status = 'active' then now() else activated_at end
- where id = p_subscription_id
- returning * into v_sub;
-
- -- =====================================================
- -- 🧾 EVENT LOG
- -- =====================================================
-
- insert into public.subscription_events (
- subscription_id,
- owner_id,
- event_type,
- created_at,
- created_by,
- source,
- reason,
- metadata,
- owner_type,
- owner_ref
- )
- values (
- v_sub.id,
- coalesce(v_sub.tenant_id, v_sub.user_id),
- 'status_changed',
- now(),
- v_uid,
- 'manual_transition',
- p_reason,
- p_metadata,
- case when v_sub.tenant_id is not null then 'tenant' else 'personal' end,
- coalesce(v_sub.tenant_id, v_sub.user_id)
- );
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) OWNER TO supabase_admin;
-
---
--- Name: update_payment_settings_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.update_payment_settings_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.update_payment_settings_updated_at() OWNER TO supabase_admin;
-
---
--- Name: update_professional_pricing_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.update_professional_pricing_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.update_professional_pricing_updated_at() OWNER TO supabase_admin;
-
---
--- Name: user_has_feature(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.user_has_feature(_user_id uuid, _feature text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.v_user_entitlements e
- where e.user_id = _user_id
- and e.feature_key = _feature
- and e.allowed = true
- );
-$$;
-
-
-ALTER FUNCTION public.user_has_feature(_user_id uuid, _feature text) OWNER TO supabase_admin;
-
---
--- Name: validate_support_session(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.validate_support_session(p_token text) RETURNS json
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_session support_sessions;
-BEGIN
- IF p_token IS NULL OR length(trim(p_token)) < 32 THEN
- RETURN json_build_object('valid', false, 'tenant_id', null);
- END IF;
-
- SELECT * INTO v_session
- FROM public.support_sessions
- WHERE token = p_token
- AND expires_at > now()
- LIMIT 1;
-
- IF NOT FOUND THEN
- RETURN json_build_object('valid', false, 'tenant_id', null);
- END IF;
-
- RETURN json_build_object(
- 'valid', true,
- 'tenant_id', v_session.tenant_id
- );
-END;
-$$;
-
-
-ALTER FUNCTION public.validate_support_session(p_token text) OWNER TO supabase_admin;
-
---
--- Name: whoami(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.whoami() RETURNS TABLE(uid uuid, role text)
- LANGUAGE sql STABLE
- AS $$
- select auth.uid() as uid, auth.role() as role;
-$$;
-
-
-ALTER FUNCTION public.whoami() OWNER TO supabase_admin;
-
---
--- Name: apply_rls(jsonb, integer); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer DEFAULT (1024 * 1024)) RETURNS SETOF realtime.wal_rls
- LANGUAGE plpgsql
- AS $$
-declare
--- Regclass of the table e.g. public.notes
-entity_ regclass = (quote_ident(wal ->> 'schema') || '.' || quote_ident(wal ->> 'table'))::regclass;
-
--- I, U, D, T: insert, update ...
-action realtime.action = (
- case wal ->> 'action'
- when 'I' then 'INSERT'
- when 'U' then 'UPDATE'
- when 'D' then 'DELETE'
- else 'ERROR'
- end
-);
-
--- Is row level security enabled for the table
-is_rls_enabled bool = relrowsecurity from pg_class where oid = entity_;
-
-subscriptions realtime.subscription[] = array_agg(subs)
- from
- realtime.subscription subs
- where
- subs.entity = entity_;
-
--- Subscription vars
-roles regrole[] = array_agg(distinct us.claims_role::text)
- from
- unnest(subscriptions) us;
-
-working_role regrole;
-claimed_role regrole;
-claims jsonb;
-
-subscription_id uuid;
-subscription_has_access bool;
-visible_to_subscription_ids uuid[] = '{}';
-
--- structured info for wal's columns
-columns realtime.wal_column[];
--- previous identity values for update/delete
-old_columns realtime.wal_column[];
-
-error_record_exceeds_max_size boolean = octet_length(wal::text) > max_record_bytes;
-
--- Primary jsonb output for record
-output jsonb;
-
-begin
-perform set_config('role', null, true);
-
-columns =
- array_agg(
- (
- x->>'name',
- x->>'type',
- x->>'typeoid',
- realtime.cast(
- (x->'value') #>> '{}',
- coalesce(
- (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4
- (x->>'type')::regtype
- )
- ),
- (pks ->> 'name') is not null,
- true
- )::realtime.wal_column
- )
- from
- jsonb_array_elements(wal -> 'columns') x
- left join jsonb_array_elements(wal -> 'pk') pks
- on (x ->> 'name') = (pks ->> 'name');
-
-old_columns =
- array_agg(
- (
- x->>'name',
- x->>'type',
- x->>'typeoid',
- realtime.cast(
- (x->'value') #>> '{}',
- coalesce(
- (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4
- (x->>'type')::regtype
- )
- ),
- (pks ->> 'name') is not null,
- true
- )::realtime.wal_column
- )
- from
- jsonb_array_elements(wal -> 'identity') x
- left join jsonb_array_elements(wal -> 'pk') pks
- on (x ->> 'name') = (pks ->> 'name');
-
-for working_role in select * from unnest(roles) loop
-
- -- Update `is_selectable` for columns and old_columns
- columns =
- array_agg(
- (
- c.name,
- c.type_name,
- c.type_oid,
- c.value,
- c.is_pkey,
- pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')
- )::realtime.wal_column
- )
- from
- unnest(columns) c;
-
- old_columns =
- array_agg(
- (
- c.name,
- c.type_name,
- c.type_oid,
- c.value,
- c.is_pkey,
- pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')
- )::realtime.wal_column
- )
- from
- unnest(old_columns) c;
-
- if action <> 'DELETE' and count(1) = 0 from unnest(columns) c where c.is_pkey then
- return next (
- jsonb_build_object(
- 'schema', wal ->> 'schema',
- 'table', wal ->> 'table',
- 'type', action
- ),
- is_rls_enabled,
- -- subscriptions is already filtered by entity
- (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),
- array['Error 400: Bad Request, no primary key']
- )::realtime.wal_rls;
-
- -- The claims role does not have SELECT permission to the primary key of entity
- elsif action <> 'DELETE' and sum(c.is_selectable::int) <> count(1) from unnest(columns) c where c.is_pkey then
- return next (
- jsonb_build_object(
- 'schema', wal ->> 'schema',
- 'table', wal ->> 'table',
- 'type', action
- ),
- is_rls_enabled,
- (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),
- array['Error 401: Unauthorized']
- )::realtime.wal_rls;
-
- else
- output = jsonb_build_object(
- 'schema', wal ->> 'schema',
- 'table', wal ->> 'table',
- 'type', action,
- 'commit_timestamp', to_char(
- ((wal ->> 'timestamp')::timestamptz at time zone 'utc'),
- 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'
- ),
- 'columns', (
- select
- jsonb_agg(
- jsonb_build_object(
- 'name', pa.attname,
- 'type', pt.typname
- )
- order by pa.attnum asc
- )
- from
- pg_attribute pa
- join pg_type pt
- on pa.atttypid = pt.oid
- where
- attrelid = entity_
- and attnum > 0
- and pg_catalog.has_column_privilege(working_role, entity_, pa.attname, 'SELECT')
- )
- )
- -- Add "record" key for insert and update
- || case
- when action in ('INSERT', 'UPDATE') then
- jsonb_build_object(
- 'record',
- (
- select
- jsonb_object_agg(
- -- if unchanged toast, get column name and value from old record
- coalesce((c).name, (oc).name),
- case
- when (c).name is null then (oc).value
- else (c).value
- end
- )
- from
- unnest(columns) c
- full outer join unnest(old_columns) oc
- on (c).name = (oc).name
- where
- coalesce((c).is_selectable, (oc).is_selectable)
- and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))
- )
- )
- else '{}'::jsonb
- end
- -- Add "old_record" key for update and delete
- || case
- when action = 'UPDATE' then
- jsonb_build_object(
- 'old_record',
- (
- select jsonb_object_agg((c).name, (c).value)
- from unnest(old_columns) c
- where
- (c).is_selectable
- and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))
- )
- )
- when action = 'DELETE' then
- jsonb_build_object(
- 'old_record',
- (
- select jsonb_object_agg((c).name, (c).value)
- from unnest(old_columns) c
- where
- (c).is_selectable
- and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))
- and ( not is_rls_enabled or (c).is_pkey ) -- if RLS enabled, we can't secure deletes so filter to pkey
- )
- )
- else '{}'::jsonb
- end;
-
- -- Create the prepared statement
- if is_rls_enabled and action <> 'DELETE' then
- if (select 1 from pg_prepared_statements where name = 'walrus_rls_stmt' limit 1) > 0 then
- deallocate walrus_rls_stmt;
- end if;
- execute realtime.build_prepared_statement_sql('walrus_rls_stmt', entity_, columns);
- end if;
-
- visible_to_subscription_ids = '{}';
-
- for subscription_id, claims in (
- select
- subs.subscription_id,
- subs.claims
- from
- unnest(subscriptions) subs
- where
- subs.entity = entity_
- and subs.claims_role = working_role
- and (
- realtime.is_visible_through_filters(columns, subs.filters)
- or (
- action = 'DELETE'
- and realtime.is_visible_through_filters(old_columns, subs.filters)
- )
- )
- ) loop
-
- if not is_rls_enabled or action = 'DELETE' then
- visible_to_subscription_ids = visible_to_subscription_ids || subscription_id;
- else
- -- Check if RLS allows the role to see the record
- perform
- -- Trim leading and trailing quotes from working_role because set_config
- -- doesn't recognize the role as valid if they are included
- set_config('role', trim(both '"' from working_role::text), true),
- set_config('request.jwt.claims', claims::text, true);
-
- execute 'execute walrus_rls_stmt' into subscription_has_access;
-
- if subscription_has_access then
- visible_to_subscription_ids = visible_to_subscription_ids || subscription_id;
- end if;
- end if;
- end loop;
-
- perform set_config('role', null, true);
-
- return next (
- output,
- is_rls_enabled,
- visible_to_subscription_ids,
- case
- when error_record_exceeds_max_size then array['Error 413: Payload Too Large']
- else '{}'
- end
- )::realtime.wal_rls;
-
- end if;
-end loop;
-
-perform set_config('role', null, true);
-end;
-$$;
-
-
-ALTER FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) OWNER TO supabase_admin;
-
---
--- Name: broadcast_changes(text, text, text, text, text, record, record, text); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text DEFAULT 'ROW'::text) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- -- Declare a variable to hold the JSONB representation of the row
- row_data jsonb := '{}'::jsonb;
-BEGIN
- IF level = 'STATEMENT' THEN
- RAISE EXCEPTION 'function can only be triggered for each row, not for each statement';
- END IF;
- -- Check the operation type and handle accordingly
- IF operation = 'INSERT' OR operation = 'UPDATE' OR operation = 'DELETE' THEN
- row_data := jsonb_build_object('old_record', OLD, 'record', NEW, 'operation', operation, 'table', table_name, 'schema', table_schema);
- PERFORM realtime.send (row_data, event_name, topic_name);
- ELSE
- RAISE EXCEPTION 'Unexpected operation type: %', operation;
- END IF;
-EXCEPTION
- WHEN OTHERS THEN
- RAISE EXCEPTION 'Failed to process the row: %', SQLERRM;
-END;
-
-$$;
-
-
-ALTER FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text) OWNER TO supabase_admin;
-
---
--- Name: build_prepared_statement_sql(text, regclass, realtime.wal_column[]); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) RETURNS text
- LANGUAGE sql
- AS $$
- /*
- Builds a sql string that, if executed, creates a prepared statement to
- tests retrive a row from *entity* by its primary key columns.
- Example
- select realtime.build_prepared_statement_sql('public.notes', '{"id"}'::text[], '{"bigint"}'::text[])
- */
- select
- 'prepare ' || prepared_statement_name || ' as
- select
- exists(
- select
- 1
- from
- ' || entity || '
- where
- ' || string_agg(quote_ident(pkc.name) || '=' || quote_nullable(pkc.value #>> '{}') , ' and ') || '
- )'
- from
- unnest(columns) pkc
- where
- pkc.is_pkey
- group by
- entity
- $$;
-
-
-ALTER FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) OWNER TO supabase_admin;
-
---
--- Name: cast(text, regtype); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime."cast"(val text, type_ regtype) RETURNS jsonb
- LANGUAGE plpgsql IMMUTABLE
- AS $$
- declare
- res jsonb;
- begin
- execute format('select to_jsonb(%L::'|| type_::text || ')', val) into res;
- return res;
- end
- $$;
-
-
-ALTER FUNCTION realtime."cast"(val text, type_ regtype) OWNER TO supabase_admin;
-
---
--- Name: check_equality_op(realtime.equality_op, regtype, text, text); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) RETURNS boolean
- LANGUAGE plpgsql IMMUTABLE
- AS $$
- /*
- Casts *val_1* and *val_2* as type *type_* and check the *op* condition for truthiness
- */
- declare
- op_symbol text = (
- case
- when op = 'eq' then '='
- when op = 'neq' then '!='
- when op = 'lt' then '<'
- when op = 'lte' then '<='
- when op = 'gt' then '>'
- when op = 'gte' then '>='
- when op = 'in' then '= any'
- else 'UNKNOWN OP'
- end
- );
- res boolean;
- begin
- execute format(
- 'select %L::'|| type_::text || ' ' || op_symbol
- || ' ( %L::'
- || (
- case
- when op = 'in' then type_::text || '[]'
- else type_::text end
- )
- || ')', val_1, val_2) into res;
- return res;
- end;
- $$;
-
-
-ALTER FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) OWNER TO supabase_admin;
-
---
--- Name: is_visible_through_filters(realtime.wal_column[], realtime.user_defined_filter[]); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) RETURNS boolean
- LANGUAGE sql IMMUTABLE
- AS $_$
- /*
- Should the record be visible (true) or filtered out (false) after *filters* are applied
- */
- select
- -- Default to allowed when no filters present
- $2 is null -- no filters. this should not happen because subscriptions has a default
- or array_length($2, 1) is null -- array length of an empty array is null
- or bool_and(
- coalesce(
- realtime.check_equality_op(
- op:=f.op,
- type_:=coalesce(
- col.type_oid::regtype, -- null when wal2json version <= 2.4
- col.type_name::regtype
- ),
- -- cast jsonb to text
- val_1:=col.value #>> '{}',
- val_2:=f.value
- ),
- false -- if null, filter does not match
- )
- )
- from
- unnest(filters) f
- join unnest(columns) col
- on f.column_name = col.name;
- $_$;
-
-
-ALTER FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) OWNER TO supabase_admin;
-
---
--- Name: list_changes(name, name, integer, integer); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) RETURNS SETOF realtime.wal_rls
- LANGUAGE sql
- SET log_min_messages TO 'fatal'
- AS $$
- with pub as (
- select
- concat_ws(
- ',',
- case when bool_or(pubinsert) then 'insert' else null end,
- case when bool_or(pubupdate) then 'update' else null end,
- case when bool_or(pubdelete) then 'delete' else null end
- ) as w2j_actions,
- coalesce(
- string_agg(
- realtime.quote_wal2json(format('%I.%I', schemaname, tablename)::regclass),
- ','
- ) filter (where ppt.tablename is not null and ppt.tablename not like '% %'),
- ''
- ) w2j_add_tables
- from
- pg_publication pp
- left join pg_publication_tables ppt
- on pp.pubname = ppt.pubname
- where
- pp.pubname = publication
- group by
- pp.pubname
- limit 1
- ),
- w2j as (
- select
- x.*, pub.w2j_add_tables
- from
- pub,
- pg_logical_slot_get_changes(
- slot_name, null, max_changes,
- 'include-pk', 'true',
- 'include-transaction', 'false',
- 'include-timestamp', 'true',
- 'include-type-oids', 'true',
- 'format-version', '2',
- 'actions', pub.w2j_actions,
- 'add-tables', pub.w2j_add_tables
- ) x
- )
- select
- xyz.wal,
- xyz.is_rls_enabled,
- xyz.subscription_ids,
- xyz.errors
- from
- w2j,
- realtime.apply_rls(
- wal := w2j.data::jsonb,
- max_record_bytes := max_record_bytes
- ) xyz(wal, is_rls_enabled, subscription_ids, errors)
- where
- w2j.w2j_add_tables <> ''
- and xyz.subscription_ids[1] is not null
- $$;
-
-
-ALTER FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) OWNER TO supabase_admin;
-
---
--- Name: quote_wal2json(regclass); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.quote_wal2json(entity regclass) RETURNS text
- LANGUAGE sql IMMUTABLE STRICT
- AS $$
- select
- (
- select string_agg('' || ch,'')
- from unnest(string_to_array(nsp.nspname::text, null)) with ordinality x(ch, idx)
- where
- not (x.idx = 1 and x.ch = '"')
- and not (
- x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)
- and x.ch = '"'
- )
- )
- || '.'
- || (
- select string_agg('' || ch,'')
- from unnest(string_to_array(pc.relname::text, null)) with ordinality x(ch, idx)
- where
- not (x.idx = 1 and x.ch = '"')
- and not (
- x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)
- and x.ch = '"'
- )
- )
- from
- pg_class pc
- join pg_namespace nsp
- on pc.relnamespace = nsp.oid
- where
- pc.oid = entity
- $$;
-
-
-ALTER FUNCTION realtime.quote_wal2json(entity regclass) OWNER TO supabase_admin;
-
---
--- Name: send(jsonb, text, text, boolean); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean DEFAULT true) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- generated_id uuid;
- final_payload jsonb;
-BEGIN
- BEGIN
- -- Generate a new UUID for the id
- generated_id := gen_random_uuid();
-
- -- Check if payload has an 'id' key, if not, add the generated UUID
- IF payload ? 'id' THEN
- final_payload := payload;
- ELSE
- final_payload := jsonb_set(payload, '{id}', to_jsonb(generated_id));
- END IF;
-
- -- Set the topic configuration
- EXECUTE format('SET LOCAL realtime.topic TO %L', topic);
-
- -- Attempt to insert the message
- INSERT INTO realtime.messages (id, payload, event, topic, private, extension)
- VALUES (generated_id, final_payload, event, topic, private, 'broadcast');
- EXCEPTION
- WHEN OTHERS THEN
- -- Capture and notify the error
- RAISE WARNING 'ErrorSendingBroadcastMessage: %', SQLERRM;
- END;
-END;
-$$;
-
-
-ALTER FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean) OWNER TO supabase_admin;
-
---
--- Name: subscription_check_filters(); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.subscription_check_filters() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
- /*
- Validates that the user defined filters for a subscription:
- - refer to valid columns that the claimed role may access
- - values are coercable to the correct column type
- */
- declare
- col_names text[] = coalesce(
- array_agg(c.column_name order by c.ordinal_position),
- '{}'::text[]
- )
- from
- information_schema.columns c
- where
- format('%I.%I', c.table_schema, c.table_name)::regclass = new.entity
- and pg_catalog.has_column_privilege(
- (new.claims ->> 'role'),
- format('%I.%I', c.table_schema, c.table_name)::regclass,
- c.column_name,
- 'SELECT'
- );
- filter realtime.user_defined_filter;
- col_type regtype;
-
- in_val jsonb;
- begin
- for filter in select * from unnest(new.filters) loop
- -- Filtered column is valid
- if not filter.column_name = any(col_names) then
- raise exception 'invalid column for filter %', filter.column_name;
- end if;
-
- -- Type is sanitized and safe for string interpolation
- col_type = (
- select atttypid::regtype
- from pg_catalog.pg_attribute
- where attrelid = new.entity
- and attname = filter.column_name
- );
- if col_type is null then
- raise exception 'failed to lookup type for column %', filter.column_name;
- end if;
-
- -- Set maximum number of entries for in filter
- if filter.op = 'in'::realtime.equality_op then
- in_val = realtime.cast(filter.value, (col_type::text || '[]')::regtype);
- if coalesce(jsonb_array_length(in_val), 0) > 100 then
- raise exception 'too many values for `in` filter. Maximum 100';
- end if;
- else
- -- raises an exception if value is not coercable to type
- perform realtime.cast(filter.value, col_type);
- end if;
-
- end loop;
-
- -- Apply consistent order to filters so the unique constraint on
- -- (subscription_id, entity, filters) can't be tricked by a different filter order
- new.filters = coalesce(
- array_agg(f order by f.column_name, f.op, f.value),
- '{}'
- ) from unnest(new.filters) f;
-
- return new;
- end;
- $$;
-
-
-ALTER FUNCTION realtime.subscription_check_filters() OWNER TO supabase_admin;
-
---
--- Name: to_regrole(text); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.to_regrole(role_name text) RETURNS regrole
- LANGUAGE sql IMMUTABLE
- AS $$ select role_name::regrole $$;
-
-
-ALTER FUNCTION realtime.to_regrole(role_name text) OWNER TO supabase_admin;
-
---
--- Name: topic(); Type: FUNCTION; Schema: realtime; Owner: supabase_realtime_admin
---
-
-CREATE FUNCTION realtime.topic() RETURNS text
- LANGUAGE sql STABLE
- AS $$
-select nullif(current_setting('realtime.topic', true), '')::text;
-$$;
-
-
-ALTER FUNCTION realtime.topic() OWNER TO supabase_realtime_admin;
-
---
--- Name: can_insert_object(text, text, uuid, jsonb); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.can_insert_object(bucketid text, name text, owner uuid, metadata jsonb) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- INSERT INTO "storage"."objects" ("bucket_id", "name", "owner", "metadata") VALUES (bucketid, name, owner, metadata);
- -- hack to rollback the successful insert
- RAISE sqlstate 'PT200' using
- message = 'ROLLBACK',
- detail = 'rollback successful insert';
-END
-$$;
-
-
-ALTER FUNCTION storage.can_insert_object(bucketid text, name text, owner uuid, metadata jsonb) OWNER TO supabase_storage_admin;
-
---
--- Name: enforce_bucket_name_length(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.enforce_bucket_name_length() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if length(new.name) > 100 then
- raise exception 'bucket name "%" is too long (% characters). Max is 100.', new.name, length(new.name);
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION storage.enforce_bucket_name_length() OWNER TO supabase_storage_admin;
-
---
--- Name: extension(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.extension(name text) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
-_parts text[];
-_filename text;
-BEGIN
- select string_to_array(name, '/') into _parts;
- select _parts[array_length(_parts,1)] into _filename;
- -- @todo return the last part instead of 2
- return reverse(split_part(reverse(_filename), '.', 1));
-END
-$$;
-
-
-ALTER FUNCTION storage.extension(name text) OWNER TO supabase_storage_admin;
-
---
--- Name: filename(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.filename(name text) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
-_parts text[];
-BEGIN
- select string_to_array(name, '/') into _parts;
- return _parts[array_length(_parts,1)];
-END
-$$;
-
-
-ALTER FUNCTION storage.filename(name text) OWNER TO supabase_storage_admin;
-
---
--- Name: foldername(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.foldername(name text) RETURNS text[]
- LANGUAGE plpgsql
- AS $$
-DECLARE
-_parts text[];
-BEGIN
- select string_to_array(name, '/') into _parts;
- return _parts[1:array_length(_parts,1)-1];
-END
-$$;
-
-
-ALTER FUNCTION storage.foldername(name text) OWNER TO supabase_storage_admin;
-
---
--- Name: get_common_prefix(text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.get_common_prefix(p_key text, p_prefix text, p_delimiter text) RETURNS text
- LANGUAGE sql IMMUTABLE
- AS $$
-SELECT CASE
- WHEN position(p_delimiter IN substring(p_key FROM length(p_prefix) + 1)) > 0
- THEN left(p_key, length(p_prefix) + position(p_delimiter IN substring(p_key FROM length(p_prefix) + 1)))
- ELSE NULL
-END;
-$$;
-
-
-ALTER FUNCTION storage.get_common_prefix(p_key text, p_prefix text, p_delimiter text) OWNER TO supabase_storage_admin;
-
---
--- Name: get_size_by_bucket(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.get_size_by_bucket() RETURNS TABLE(size bigint, bucket_id text)
- LANGUAGE plpgsql
- AS $$
-BEGIN
- return query
- select sum((metadata->>'size')::int) as size, obj.bucket_id
- from "storage".objects as obj
- group by obj.bucket_id;
-END
-$$;
-
-
-ALTER FUNCTION storage.get_size_by_bucket() OWNER TO supabase_storage_admin;
-
---
--- Name: list_multipart_uploads_with_delimiter(text, text, text, integer, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.list_multipart_uploads_with_delimiter(bucket_id text, prefix_param text, delimiter_param text, max_keys integer DEFAULT 100, next_key_token text DEFAULT ''::text, next_upload_token text DEFAULT ''::text) RETURNS TABLE(key text, id text, created_at timestamp with time zone)
- LANGUAGE plpgsql
- AS $_$
-BEGIN
- RETURN QUERY EXECUTE
- 'SELECT DISTINCT ON(key COLLATE "C") * from (
- SELECT
- CASE
- WHEN position($2 IN substring(key from length($1) + 1)) > 0 THEN
- substring(key from 1 for length($1) + position($2 IN substring(key from length($1) + 1)))
- ELSE
- key
- END AS key, id, created_at
- FROM
- storage.s3_multipart_uploads
- WHERE
- bucket_id = $5 AND
- key ILIKE $1 || ''%'' AND
- CASE
- WHEN $4 != '''' AND $6 = '''' THEN
- CASE
- WHEN position($2 IN substring(key from length($1) + 1)) > 0 THEN
- substring(key from 1 for length($1) + position($2 IN substring(key from length($1) + 1))) COLLATE "C" > $4
- ELSE
- key COLLATE "C" > $4
- END
- ELSE
- true
- END AND
- CASE
- WHEN $6 != '''' THEN
- id COLLATE "C" > $6
- ELSE
- true
- END
- ORDER BY
- key COLLATE "C" ASC, created_at ASC) as e order by key COLLATE "C" LIMIT $3'
- USING prefix_param, delimiter_param, max_keys, next_key_token, bucket_id, next_upload_token;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.list_multipart_uploads_with_delimiter(bucket_id text, prefix_param text, delimiter_param text, max_keys integer, next_key_token text, next_upload_token text) OWNER TO supabase_storage_admin;
-
---
--- Name: list_objects_with_delimiter(text, text, text, integer, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.list_objects_with_delimiter(_bucket_id text, prefix_param text, delimiter_param text, max_keys integer DEFAULT 100, start_after text DEFAULT ''::text, next_token text DEFAULT ''::text, sort_order text DEFAULT 'asc'::text) RETURNS TABLE(name text, id uuid, metadata jsonb, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone)
- LANGUAGE plpgsql STABLE
- AS $_$
-DECLARE
- v_peek_name TEXT;
- v_current RECORD;
- v_common_prefix TEXT;
-
- -- Configuration
- v_is_asc BOOLEAN;
- v_prefix TEXT;
- v_start TEXT;
- v_upper_bound TEXT;
- v_file_batch_size INT;
-
- -- Seek state
- v_next_seek TEXT;
- v_count INT := 0;
-
- -- Dynamic SQL for batch query only
- v_batch_query TEXT;
-
-BEGIN
- -- ========================================================================
- -- INITIALIZATION
- -- ========================================================================
- v_is_asc := lower(coalesce(sort_order, 'asc')) = 'asc';
- v_prefix := coalesce(prefix_param, '');
- v_start := CASE WHEN coalesce(next_token, '') <> '' THEN next_token ELSE coalesce(start_after, '') END;
- v_file_batch_size := LEAST(GREATEST(max_keys * 2, 100), 1000);
-
- -- Calculate upper bound for prefix filtering (bytewise, using COLLATE "C")
- IF v_prefix = '' THEN
- v_upper_bound := NULL;
- ELSIF right(v_prefix, 1) = delimiter_param THEN
- v_upper_bound := left(v_prefix, -1) || chr(ascii(delimiter_param) + 1);
- ELSE
- v_upper_bound := left(v_prefix, -1) || chr(ascii(right(v_prefix, 1)) + 1);
- END IF;
-
- -- Build batch query (dynamic SQL - called infrequently, amortized over many rows)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" >= $2 ' ||
- 'AND o.name COLLATE "C" < $3 ORDER BY o.name COLLATE "C" ASC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" >= $2 ' ||
- 'ORDER BY o.name COLLATE "C" ASC LIMIT $4';
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" < $2 ' ||
- 'AND o.name COLLATE "C" >= $3 ORDER BY o.name COLLATE "C" DESC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" < $2 ' ||
- 'ORDER BY o.name COLLATE "C" DESC LIMIT $4';
- END IF;
- END IF;
-
- -- ========================================================================
- -- SEEK INITIALIZATION: Determine starting position
- -- ========================================================================
- IF v_start = '' THEN
- IF v_is_asc THEN
- v_next_seek := v_prefix;
- ELSE
- -- DESC without cursor: find the last item in range
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_next_seek FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_prefix AND o.name COLLATE "C" < v_upper_bound
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix <> '' THEN
- SELECT o.name INTO v_next_seek FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_prefix
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_next_seek FROM storage.objects o
- WHERE o.bucket_id = _bucket_id
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- END IF;
-
- IF v_next_seek IS NOT NULL THEN
- v_next_seek := v_next_seek || delimiter_param;
- ELSE
- RETURN;
- END IF;
- END IF;
- ELSE
- -- Cursor provided: determine if it refers to a folder or leaf
- IF EXISTS (
- SELECT 1 FROM storage.objects o
- WHERE o.bucket_id = _bucket_id
- AND o.name COLLATE "C" LIKE v_start || delimiter_param || '%'
- LIMIT 1
- ) THEN
- -- Cursor refers to a folder
- IF v_is_asc THEN
- v_next_seek := v_start || chr(ascii(delimiter_param) + 1);
- ELSE
- v_next_seek := v_start || delimiter_param;
- END IF;
- ELSE
- -- Cursor refers to a leaf object
- IF v_is_asc THEN
- v_next_seek := v_start || delimiter_param;
- ELSE
- v_next_seek := v_start;
- END IF;
- END IF;
- END IF;
-
- -- ========================================================================
- -- MAIN LOOP: Hybrid peek-then-batch algorithm
- -- Uses STATIC SQL for peek (hot path) and DYNAMIC SQL for batch
- -- ========================================================================
- LOOP
- EXIT WHEN v_count >= max_keys;
-
- -- STEP 1: PEEK using STATIC SQL (plan cached, very fast)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_next_seek AND o.name COLLATE "C" < v_upper_bound
- ORDER BY o.name COLLATE "C" ASC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_next_seek
- ORDER BY o.name COLLATE "C" ASC LIMIT 1;
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" < v_next_seek AND o.name COLLATE "C" >= v_prefix
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix <> '' THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" < v_next_seek AND o.name COLLATE "C" >= v_prefix
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" < v_next_seek
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- END IF;
- END IF;
-
- EXIT WHEN v_peek_name IS NULL;
-
- -- STEP 2: Check if this is a FOLDER or FILE
- v_common_prefix := storage.get_common_prefix(v_peek_name, v_prefix, delimiter_param);
-
- IF v_common_prefix IS NOT NULL THEN
- -- FOLDER: Emit and skip to next folder (no heap access needed)
- name := rtrim(v_common_prefix, delimiter_param);
- id := NULL;
- updated_at := NULL;
- created_at := NULL;
- last_accessed_at := NULL;
- metadata := NULL;
- RETURN NEXT;
- v_count := v_count + 1;
-
- -- Advance seek past the folder range
- IF v_is_asc THEN
- v_next_seek := left(v_common_prefix, -1) || chr(ascii(delimiter_param) + 1);
- ELSE
- v_next_seek := v_common_prefix;
- END IF;
- ELSE
- -- FILE: Batch fetch using DYNAMIC SQL (overhead amortized over many rows)
- -- For ASC: upper_bound is the exclusive upper limit (< condition)
- -- For DESC: prefix is the inclusive lower limit (>= condition)
- FOR v_current IN EXECUTE v_batch_query USING _bucket_id, v_next_seek,
- CASE WHEN v_is_asc THEN COALESCE(v_upper_bound, v_prefix) ELSE v_prefix END, v_file_batch_size
- LOOP
- v_common_prefix := storage.get_common_prefix(v_current.name, v_prefix, delimiter_param);
-
- IF v_common_prefix IS NOT NULL THEN
- -- Hit a folder: exit batch, let peek handle it
- v_next_seek := v_current.name;
- EXIT;
- END IF;
-
- -- Emit file
- name := v_current.name;
- id := v_current.id;
- updated_at := v_current.updated_at;
- created_at := v_current.created_at;
- last_accessed_at := v_current.last_accessed_at;
- metadata := v_current.metadata;
- RETURN NEXT;
- v_count := v_count + 1;
-
- -- Advance seek past this file
- IF v_is_asc THEN
- v_next_seek := v_current.name || delimiter_param;
- ELSE
- v_next_seek := v_current.name;
- END IF;
-
- EXIT WHEN v_count >= max_keys;
- END LOOP;
- END IF;
- END LOOP;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.list_objects_with_delimiter(_bucket_id text, prefix_param text, delimiter_param text, max_keys integer, start_after text, next_token text, sort_order text) OWNER TO supabase_storage_admin;
-
---
--- Name: operation(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.operation() RETURNS text
- LANGUAGE plpgsql STABLE
- AS $$
-BEGIN
- RETURN current_setting('storage.operation', true);
-END;
-$$;
-
-
-ALTER FUNCTION storage.operation() OWNER TO supabase_storage_admin;
-
---
--- Name: protect_delete(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.protect_delete() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- -- Check if storage.allow_delete_query is set to 'true'
- IF COALESCE(current_setting('storage.allow_delete_query', true), 'false') != 'true' THEN
- RAISE EXCEPTION 'Direct deletion from storage tables is not allowed. Use the Storage API instead.'
- USING HINT = 'This prevents accidental data loss from orphaned objects.',
- ERRCODE = '42501';
- END IF;
- RETURN NULL;
-END;
-$$;
-
-
-ALTER FUNCTION storage.protect_delete() OWNER TO supabase_storage_admin;
-
---
--- Name: search(text, text, integer, integer, integer, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.search(prefix text, bucketname text, limits integer DEFAULT 100, levels integer DEFAULT 1, offsets integer DEFAULT 0, search text DEFAULT ''::text, sortcolumn text DEFAULT 'name'::text, sortorder text DEFAULT 'asc'::text) RETURNS TABLE(name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb)
- LANGUAGE plpgsql STABLE
- AS $_$
-DECLARE
- v_peek_name TEXT;
- v_current RECORD;
- v_common_prefix TEXT;
- v_delimiter CONSTANT TEXT := '/';
-
- -- Configuration
- v_limit INT;
- v_prefix TEXT;
- v_prefix_lower TEXT;
- v_is_asc BOOLEAN;
- v_order_by TEXT;
- v_sort_order TEXT;
- v_upper_bound TEXT;
- v_file_batch_size INT;
-
- -- Dynamic SQL for batch query only
- v_batch_query TEXT;
-
- -- Seek state
- v_next_seek TEXT;
- v_count INT := 0;
- v_skipped INT := 0;
-BEGIN
- -- ========================================================================
- -- INITIALIZATION
- -- ========================================================================
- v_limit := LEAST(coalesce(limits, 100), 1500);
- v_prefix := coalesce(prefix, '') || coalesce(search, '');
- v_prefix_lower := lower(v_prefix);
- v_is_asc := lower(coalesce(sortorder, 'asc')) = 'asc';
- v_file_batch_size := LEAST(GREATEST(v_limit * 2, 100), 1000);
-
- -- Validate sort column
- CASE lower(coalesce(sortcolumn, 'name'))
- WHEN 'name' THEN v_order_by := 'name';
- WHEN 'updated_at' THEN v_order_by := 'updated_at';
- WHEN 'created_at' THEN v_order_by := 'created_at';
- WHEN 'last_accessed_at' THEN v_order_by := 'last_accessed_at';
- ELSE v_order_by := 'name';
- END CASE;
-
- v_sort_order := CASE WHEN v_is_asc THEN 'asc' ELSE 'desc' END;
-
- -- ========================================================================
- -- NON-NAME SORTING: Use path_tokens approach (unchanged)
- -- ========================================================================
- IF v_order_by != 'name' THEN
- RETURN QUERY EXECUTE format(
- $sql$
- WITH folders AS (
- SELECT path_tokens[$1] AS folder
- FROM storage.objects
- WHERE objects.name ILIKE $2 || '%%'
- AND bucket_id = $3
- AND array_length(objects.path_tokens, 1) <> $1
- GROUP BY folder
- ORDER BY folder %s
- )
- (SELECT folder AS "name",
- NULL::uuid AS id,
- NULL::timestamptz AS updated_at,
- NULL::timestamptz AS created_at,
- NULL::timestamptz AS last_accessed_at,
- NULL::jsonb AS metadata FROM folders)
- UNION ALL
- (SELECT path_tokens[$1] AS "name",
- id, updated_at, created_at, last_accessed_at, metadata
- FROM storage.objects
- WHERE objects.name ILIKE $2 || '%%'
- AND bucket_id = $3
- AND array_length(objects.path_tokens, 1) = $1
- ORDER BY %I %s)
- LIMIT $4 OFFSET $5
- $sql$, v_sort_order, v_order_by, v_sort_order
- ) USING levels, v_prefix, bucketname, v_limit, offsets;
- RETURN;
- END IF;
-
- -- ========================================================================
- -- NAME SORTING: Hybrid skip-scan with batch optimization
- -- ========================================================================
-
- -- Calculate upper bound for prefix filtering
- IF v_prefix_lower = '' THEN
- v_upper_bound := NULL;
- ELSIF right(v_prefix_lower, 1) = v_delimiter THEN
- v_upper_bound := left(v_prefix_lower, -1) || chr(ascii(v_delimiter) + 1);
- ELSE
- v_upper_bound := left(v_prefix_lower, -1) || chr(ascii(right(v_prefix_lower, 1)) + 1);
- END IF;
-
- -- Build batch query (dynamic SQL - called infrequently, amortized over many rows)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" >= $2 ' ||
- 'AND lower(o.name) COLLATE "C" < $3 ORDER BY lower(o.name) COLLATE "C" ASC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" >= $2 ' ||
- 'ORDER BY lower(o.name) COLLATE "C" ASC LIMIT $4';
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" < $2 ' ||
- 'AND lower(o.name) COLLATE "C" >= $3 ORDER BY lower(o.name) COLLATE "C" DESC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" < $2 ' ||
- 'ORDER BY lower(o.name) COLLATE "C" DESC LIMIT $4';
- END IF;
- END IF;
-
- -- Initialize seek position
- IF v_is_asc THEN
- v_next_seek := v_prefix_lower;
- ELSE
- -- DESC: find the last item in range first (static SQL)
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_prefix_lower AND lower(o.name) COLLATE "C" < v_upper_bound
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix_lower <> '' THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_prefix_lower
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- END IF;
-
- IF v_peek_name IS NOT NULL THEN
- v_next_seek := lower(v_peek_name) || v_delimiter;
- ELSE
- RETURN;
- END IF;
- END IF;
-
- -- ========================================================================
- -- MAIN LOOP: Hybrid peek-then-batch algorithm
- -- Uses STATIC SQL for peek (hot path) and DYNAMIC SQL for batch
- -- ========================================================================
- LOOP
- EXIT WHEN v_count >= v_limit;
-
- -- STEP 1: PEEK using STATIC SQL (plan cached, very fast)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_next_seek AND lower(o.name) COLLATE "C" < v_upper_bound
- ORDER BY lower(o.name) COLLATE "C" ASC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_next_seek
- ORDER BY lower(o.name) COLLATE "C" ASC LIMIT 1;
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" < v_next_seek AND lower(o.name) COLLATE "C" >= v_prefix_lower
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix_lower <> '' THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" < v_next_seek AND lower(o.name) COLLATE "C" >= v_prefix_lower
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" < v_next_seek
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- END IF;
- END IF;
-
- EXIT WHEN v_peek_name IS NULL;
-
- -- STEP 2: Check if this is a FOLDER or FILE
- v_common_prefix := storage.get_common_prefix(lower(v_peek_name), v_prefix_lower, v_delimiter);
-
- IF v_common_prefix IS NOT NULL THEN
- -- FOLDER: Handle offset, emit if needed, skip to next folder
- IF v_skipped < offsets THEN
- v_skipped := v_skipped + 1;
- ELSE
- name := split_part(rtrim(v_common_prefix, v_delimiter), v_delimiter, levels);
- id := NULL;
- updated_at := NULL;
- created_at := NULL;
- last_accessed_at := NULL;
- metadata := NULL;
- RETURN NEXT;
- v_count := v_count + 1;
- END IF;
-
- -- Advance seek past the folder range
- IF v_is_asc THEN
- v_next_seek := lower(left(v_common_prefix, -1)) || chr(ascii(v_delimiter) + 1);
- ELSE
- v_next_seek := lower(v_common_prefix);
- END IF;
- ELSE
- -- FILE: Batch fetch using DYNAMIC SQL (overhead amortized over many rows)
- -- For ASC: upper_bound is the exclusive upper limit (< condition)
- -- For DESC: prefix_lower is the inclusive lower limit (>= condition)
- FOR v_current IN EXECUTE v_batch_query
- USING bucketname, v_next_seek,
- CASE WHEN v_is_asc THEN COALESCE(v_upper_bound, v_prefix_lower) ELSE v_prefix_lower END, v_file_batch_size
- LOOP
- v_common_prefix := storage.get_common_prefix(lower(v_current.name), v_prefix_lower, v_delimiter);
-
- IF v_common_prefix IS NOT NULL THEN
- -- Hit a folder: exit batch, let peek handle it
- v_next_seek := lower(v_current.name);
- EXIT;
- END IF;
-
- -- Handle offset skipping
- IF v_skipped < offsets THEN
- v_skipped := v_skipped + 1;
- ELSE
- -- Emit file
- name := split_part(v_current.name, v_delimiter, levels);
- id := v_current.id;
- updated_at := v_current.updated_at;
- created_at := v_current.created_at;
- last_accessed_at := v_current.last_accessed_at;
- metadata := v_current.metadata;
- RETURN NEXT;
- v_count := v_count + 1;
- END IF;
-
- -- Advance seek past this file
- IF v_is_asc THEN
- v_next_seek := lower(v_current.name) || v_delimiter;
- ELSE
- v_next_seek := lower(v_current.name);
- END IF;
-
- EXIT WHEN v_count >= v_limit;
- END LOOP;
- END IF;
- END LOOP;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.search(prefix text, bucketname text, limits integer, levels integer, offsets integer, search text, sortcolumn text, sortorder text) OWNER TO supabase_storage_admin;
-
---
--- Name: search_by_timestamp(text, text, integer, integer, text, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.search_by_timestamp(p_prefix text, p_bucket_id text, p_limit integer, p_level integer, p_start_after text, p_sort_order text, p_sort_column text, p_sort_column_after text) RETURNS TABLE(key text, name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb)
- LANGUAGE plpgsql STABLE
- AS $_$
-DECLARE
- v_cursor_op text;
- v_query text;
- v_prefix text;
-BEGIN
- v_prefix := coalesce(p_prefix, '');
-
- IF p_sort_order = 'asc' THEN
- v_cursor_op := '>';
- ELSE
- v_cursor_op := '<';
- END IF;
-
- v_query := format($sql$
- WITH raw_objects AS (
- SELECT
- o.name AS obj_name,
- o.id AS obj_id,
- o.updated_at AS obj_updated_at,
- o.created_at AS obj_created_at,
- o.last_accessed_at AS obj_last_accessed_at,
- o.metadata AS obj_metadata,
- storage.get_common_prefix(o.name, $1, '/') AS common_prefix
- FROM storage.objects o
- WHERE o.bucket_id = $2
- AND o.name COLLATE "C" LIKE $1 || '%%'
- ),
- -- Aggregate common prefixes (folders)
- -- Both created_at and updated_at use MIN(obj_created_at) to match the old prefixes table behavior
- aggregated_prefixes AS (
- SELECT
- rtrim(common_prefix, '/') AS name,
- NULL::uuid AS id,
- MIN(obj_created_at) AS updated_at,
- MIN(obj_created_at) AS created_at,
- NULL::timestamptz AS last_accessed_at,
- NULL::jsonb AS metadata,
- TRUE AS is_prefix
- FROM raw_objects
- WHERE common_prefix IS NOT NULL
- GROUP BY common_prefix
- ),
- leaf_objects AS (
- SELECT
- obj_name AS name,
- obj_id AS id,
- obj_updated_at AS updated_at,
- obj_created_at AS created_at,
- obj_last_accessed_at AS last_accessed_at,
- obj_metadata AS metadata,
- FALSE AS is_prefix
- FROM raw_objects
- WHERE common_prefix IS NULL
- ),
- combined AS (
- SELECT * FROM aggregated_prefixes
- UNION ALL
- SELECT * FROM leaf_objects
- ),
- filtered AS (
- SELECT *
- FROM combined
- WHERE (
- $5 = ''
- OR ROW(
- date_trunc('milliseconds', %I),
- name COLLATE "C"
- ) %s ROW(
- COALESCE(NULLIF($6, '')::timestamptz, 'epoch'::timestamptz),
- $5
- )
- )
- )
- SELECT
- split_part(name, '/', $3) AS key,
- name,
- id,
- updated_at,
- created_at,
- last_accessed_at,
- metadata
- FROM filtered
- ORDER BY
- COALESCE(date_trunc('milliseconds', %I), 'epoch'::timestamptz) %s,
- name COLLATE "C" %s
- LIMIT $4
- $sql$,
- p_sort_column,
- v_cursor_op,
- p_sort_column,
- p_sort_order,
- p_sort_order
- );
-
- RETURN QUERY EXECUTE v_query
- USING v_prefix, p_bucket_id, p_level, p_limit, p_start_after, p_sort_column_after;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.search_by_timestamp(p_prefix text, p_bucket_id text, p_limit integer, p_level integer, p_start_after text, p_sort_order text, p_sort_column text, p_sort_column_after text) OWNER TO supabase_storage_admin;
-
---
--- Name: search_v2(text, text, integer, integer, text, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.search_v2(prefix text, bucket_name text, limits integer DEFAULT 100, levels integer DEFAULT 1, start_after text DEFAULT ''::text, sort_order text DEFAULT 'asc'::text, sort_column text DEFAULT 'name'::text, sort_column_after text DEFAULT ''::text) RETURNS TABLE(key text, name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb)
- LANGUAGE plpgsql STABLE
- AS $$
-DECLARE
- v_sort_col text;
- v_sort_ord text;
- v_limit int;
-BEGIN
- -- Cap limit to maximum of 1500 records
- v_limit := LEAST(coalesce(limits, 100), 1500);
-
- -- Validate and normalize sort_order
- v_sort_ord := lower(coalesce(sort_order, 'asc'));
- IF v_sort_ord NOT IN ('asc', 'desc') THEN
- v_sort_ord := 'asc';
- END IF;
-
- -- Validate and normalize sort_column
- v_sort_col := lower(coalesce(sort_column, 'name'));
- IF v_sort_col NOT IN ('name', 'updated_at', 'created_at') THEN
- v_sort_col := 'name';
- END IF;
-
- -- Route to appropriate implementation
- IF v_sort_col = 'name' THEN
- -- Use list_objects_with_delimiter for name sorting (most efficient: O(k * log n))
- RETURN QUERY
- SELECT
- split_part(l.name, '/', levels) AS key,
- l.name AS name,
- l.id,
- l.updated_at,
- l.created_at,
- l.last_accessed_at,
- l.metadata
- FROM storage.list_objects_with_delimiter(
- bucket_name,
- coalesce(prefix, ''),
- '/',
- v_limit,
- start_after,
- '',
- v_sort_ord
- ) l;
- ELSE
- -- Use aggregation approach for timestamp sorting
- -- Not efficient for large datasets but supports correct pagination
- RETURN QUERY SELECT * FROM storage.search_by_timestamp(
- prefix, bucket_name, v_limit, levels, start_after,
- v_sort_ord, v_sort_col, sort_column_after
- );
- END IF;
-END;
-$$;
-
-
-ALTER FUNCTION storage.search_v2(prefix text, bucket_name text, limits integer, levels integer, start_after text, sort_order text, sort_column text, sort_column_after text) OWNER TO supabase_storage_admin;
-
---
--- Name: update_updated_at_column(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.update_updated_at_column() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION storage.update_updated_at_column() OWNER TO supabase_storage_admin;
-
---
--- Name: http_request(); Type: FUNCTION; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE FUNCTION supabase_functions.http_request() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'supabase_functions'
- AS $$
- DECLARE
- request_id bigint;
- payload jsonb;
- url text := TG_ARGV[0]::text;
- method text := TG_ARGV[1]::text;
- headers jsonb DEFAULT '{}'::jsonb;
- params jsonb DEFAULT '{}'::jsonb;
- timeout_ms integer DEFAULT 1000;
- BEGIN
- IF url IS NULL OR url = 'null' THEN
- RAISE EXCEPTION 'url argument is missing';
- END IF;
-
- IF method IS NULL OR method = 'null' THEN
- RAISE EXCEPTION 'method argument is missing';
- END IF;
-
- IF TG_ARGV[2] IS NULL OR TG_ARGV[2] = 'null' THEN
- headers = '{"Content-Type": "application/json"}'::jsonb;
- ELSE
- headers = TG_ARGV[2]::jsonb;
- END IF;
-
- IF TG_ARGV[3] IS NULL OR TG_ARGV[3] = 'null' THEN
- params = '{}'::jsonb;
- ELSE
- params = TG_ARGV[3]::jsonb;
- END IF;
-
- IF TG_ARGV[4] IS NULL OR TG_ARGV[4] = 'null' THEN
- timeout_ms = 1000;
- ELSE
- timeout_ms = TG_ARGV[4]::integer;
- END IF;
-
- CASE
- WHEN method = 'GET' THEN
- SELECT http_get INTO request_id FROM net.http_get(
- url,
- params,
- headers,
- timeout_ms
- );
- WHEN method = 'POST' THEN
- payload = jsonb_build_object(
- 'old_record', OLD,
- 'record', NEW,
- 'type', TG_OP,
- 'table', TG_TABLE_NAME,
- 'schema', TG_TABLE_SCHEMA
- );
-
- SELECT http_post INTO request_id FROM net.http_post(
- url,
- payload,
- params,
- headers,
- timeout_ms
- );
- ELSE
- RAISE EXCEPTION 'method argument % is invalid', method;
- END CASE;
-
- INSERT INTO supabase_functions.hooks
- (hook_table_id, hook_name, request_id)
- VALUES
- (TG_RELID, TG_NAME, request_id);
-
- RETURN NEW;
- END
-$$;
-
-
-ALTER FUNCTION supabase_functions.http_request() OWNER TO supabase_functions_admin;
-
---
--- Name: extensions; Type: TABLE; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE TABLE _realtime.extensions (
- id uuid NOT NULL,
- type text,
- settings jsonb,
- tenant_external_id text,
- inserted_at timestamp(0) without time zone NOT NULL,
- updated_at timestamp(0) without time zone NOT NULL
-);
-
-
-ALTER TABLE _realtime.extensions OWNER TO supabase_admin;
-
---
--- Name: schema_migrations; Type: TABLE; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE TABLE _realtime.schema_migrations (
- version bigint NOT NULL,
- inserted_at timestamp(0) without time zone
-);
-
-
-ALTER TABLE _realtime.schema_migrations OWNER TO supabase_admin;
-
---
--- Name: tenants; Type: TABLE; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE TABLE _realtime.tenants (
- id uuid NOT NULL,
- name text,
- external_id text,
- jwt_secret text,
- max_concurrent_users integer DEFAULT 200 NOT NULL,
- inserted_at timestamp(0) without time zone NOT NULL,
- updated_at timestamp(0) without time zone NOT NULL,
- max_events_per_second integer DEFAULT 100 NOT NULL,
- postgres_cdc_default text DEFAULT 'postgres_cdc_rls'::text,
- max_bytes_per_second integer DEFAULT 100000 NOT NULL,
- max_channels_per_client integer DEFAULT 100 NOT NULL,
- max_joins_per_second integer DEFAULT 500 NOT NULL,
- suspend boolean DEFAULT false,
- jwt_jwks jsonb,
- notify_private_alpha boolean DEFAULT false,
- private_only boolean DEFAULT false NOT NULL,
- migrations_ran integer DEFAULT 0,
- broadcast_adapter character varying(255) DEFAULT 'gen_rpc'::character varying,
- max_presence_events_per_second integer DEFAULT 1000,
- max_payload_size_in_kb integer DEFAULT 3000,
- CONSTRAINT jwt_secret_or_jwt_jwks_required CHECK (((jwt_secret IS NOT NULL) OR (jwt_jwks IS NOT NULL)))
-);
-
-
-ALTER TABLE _realtime.tenants OWNER TO supabase_admin;
-
---
--- Name: audit_log_entries; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.audit_log_entries (
- instance_id uuid,
- id uuid NOT NULL,
- payload json,
- created_at timestamp with time zone,
- ip_address character varying(64) DEFAULT ''::character varying NOT NULL
-);
-
-
-ALTER TABLE auth.audit_log_entries OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE audit_log_entries; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.audit_log_entries IS 'Auth: Audit trail for user actions.';
-
-
---
--- Name: flow_state; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.flow_state (
- id uuid NOT NULL,
- user_id uuid,
- auth_code text,
- code_challenge_method auth.code_challenge_method,
- code_challenge text,
- provider_type text NOT NULL,
- provider_access_token text,
- provider_refresh_token text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- authentication_method text NOT NULL,
- auth_code_issued_at timestamp with time zone,
- invite_token text,
- referrer text,
- oauth_client_state_id uuid,
- linking_target_id uuid,
- email_optional boolean DEFAULT false NOT NULL
-);
-
-
-ALTER TABLE auth.flow_state OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE flow_state; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.flow_state IS 'Stores metadata for all OAuth/SSO login flows';
-
-
---
--- Name: identities; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.identities (
- provider_id text NOT NULL,
- user_id uuid NOT NULL,
- identity_data jsonb NOT NULL,
- provider text NOT NULL,
- last_sign_in_at timestamp with time zone,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- email text GENERATED ALWAYS AS (lower((identity_data ->> 'email'::text))) STORED,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE auth.identities OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE identities; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.identities IS 'Auth: Stores identities associated to a user.';
-
-
---
--- Name: COLUMN identities.email; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.identities.email IS 'Auth: Email is a generated column that references the optional email property in the identity_data';
-
-
---
--- Name: instances; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.instances (
- id uuid NOT NULL,
- uuid uuid,
- raw_base_config text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone
-);
-
-
-ALTER TABLE auth.instances OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE instances; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.instances IS 'Auth: Manages users across multiple sites.';
-
-
---
--- Name: mfa_amr_claims; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.mfa_amr_claims (
- session_id uuid NOT NULL,
- created_at timestamp with time zone NOT NULL,
- updated_at timestamp with time zone NOT NULL,
- authentication_method text NOT NULL,
- id uuid NOT NULL
-);
-
-
-ALTER TABLE auth.mfa_amr_claims OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE mfa_amr_claims; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.mfa_amr_claims IS 'auth: stores authenticator method reference claims for multi factor authentication';
-
-
---
--- Name: mfa_challenges; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.mfa_challenges (
- id uuid NOT NULL,
- factor_id uuid NOT NULL,
- created_at timestamp with time zone NOT NULL,
- verified_at timestamp with time zone,
- ip_address inet NOT NULL,
- otp_code text,
- web_authn_session_data jsonb
-);
-
-
-ALTER TABLE auth.mfa_challenges OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE mfa_challenges; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.mfa_challenges IS 'auth: stores metadata about challenge requests made';
-
-
---
--- Name: mfa_factors; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.mfa_factors (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- friendly_name text,
- factor_type auth.factor_type NOT NULL,
- status auth.factor_status NOT NULL,
- created_at timestamp with time zone NOT NULL,
- updated_at timestamp with time zone NOT NULL,
- secret text,
- phone text,
- last_challenged_at timestamp with time zone,
- web_authn_credential jsonb,
- web_authn_aaguid uuid,
- last_webauthn_challenge_data jsonb
-);
-
-
-ALTER TABLE auth.mfa_factors OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE mfa_factors; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.mfa_factors IS 'auth: stores metadata about factors';
-
-
---
--- Name: COLUMN mfa_factors.last_webauthn_challenge_data; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.mfa_factors.last_webauthn_challenge_data IS 'Stores the latest WebAuthn challenge data including attestation/assertion for customer verification';
-
-
---
--- Name: oauth_authorizations; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_authorizations (
- id uuid NOT NULL,
- authorization_id text NOT NULL,
- client_id uuid NOT NULL,
- user_id uuid,
- redirect_uri text NOT NULL,
- scope text NOT NULL,
- state text,
- resource text,
- code_challenge text,
- code_challenge_method auth.code_challenge_method,
- response_type auth.oauth_response_type DEFAULT 'code'::auth.oauth_response_type NOT NULL,
- status auth.oauth_authorization_status DEFAULT 'pending'::auth.oauth_authorization_status NOT NULL,
- authorization_code text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- expires_at timestamp with time zone DEFAULT (now() + '00:03:00'::interval) NOT NULL,
- approved_at timestamp with time zone,
- nonce text,
- CONSTRAINT oauth_authorizations_authorization_code_length CHECK ((char_length(authorization_code) <= 255)),
- CONSTRAINT oauth_authorizations_code_challenge_length CHECK ((char_length(code_challenge) <= 128)),
- CONSTRAINT oauth_authorizations_expires_at_future CHECK ((expires_at > created_at)),
- CONSTRAINT oauth_authorizations_nonce_length CHECK ((char_length(nonce) <= 255)),
- CONSTRAINT oauth_authorizations_redirect_uri_length CHECK ((char_length(redirect_uri) <= 2048)),
- CONSTRAINT oauth_authorizations_resource_length CHECK ((char_length(resource) <= 2048)),
- CONSTRAINT oauth_authorizations_scope_length CHECK ((char_length(scope) <= 4096)),
- CONSTRAINT oauth_authorizations_state_length CHECK ((char_length(state) <= 4096))
-);
-
-
-ALTER TABLE auth.oauth_authorizations OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_client_states; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_client_states (
- id uuid NOT NULL,
- provider_type text NOT NULL,
- code_verifier text,
- created_at timestamp with time zone NOT NULL
-);
-
-
-ALTER TABLE auth.oauth_client_states OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE oauth_client_states; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.oauth_client_states IS 'Stores OAuth states for third-party provider authentication flows where Supabase acts as the OAuth client.';
-
-
---
--- Name: oauth_clients; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_clients (
- id uuid NOT NULL,
- client_secret_hash text,
- registration_type auth.oauth_registration_type NOT NULL,
- redirect_uris text NOT NULL,
- grant_types text NOT NULL,
- client_name text,
- client_uri text,
- logo_uri text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- deleted_at timestamp with time zone,
- client_type auth.oauth_client_type DEFAULT 'confidential'::auth.oauth_client_type NOT NULL,
- token_endpoint_auth_method text NOT NULL,
- CONSTRAINT oauth_clients_client_name_length CHECK ((char_length(client_name) <= 1024)),
- CONSTRAINT oauth_clients_client_uri_length CHECK ((char_length(client_uri) <= 2048)),
- CONSTRAINT oauth_clients_logo_uri_length CHECK ((char_length(logo_uri) <= 2048)),
- CONSTRAINT oauth_clients_token_endpoint_auth_method_check CHECK ((token_endpoint_auth_method = ANY (ARRAY['client_secret_basic'::text, 'client_secret_post'::text, 'none'::text])))
-);
-
-
-ALTER TABLE auth.oauth_clients OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_consents; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_consents (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- client_id uuid NOT NULL,
- scopes text NOT NULL,
- granted_at timestamp with time zone DEFAULT now() NOT NULL,
- revoked_at timestamp with time zone,
- CONSTRAINT oauth_consents_revoked_after_granted CHECK (((revoked_at IS NULL) OR (revoked_at >= granted_at))),
- CONSTRAINT oauth_consents_scopes_length CHECK ((char_length(scopes) <= 2048)),
- CONSTRAINT oauth_consents_scopes_not_empty CHECK ((char_length(TRIM(BOTH FROM scopes)) > 0))
-);
-
-
-ALTER TABLE auth.oauth_consents OWNER TO supabase_auth_admin;
-
---
--- Name: one_time_tokens; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.one_time_tokens (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- token_type auth.one_time_token_type NOT NULL,
- token_hash text NOT NULL,
- relates_to text NOT NULL,
- created_at timestamp without time zone DEFAULT now() NOT NULL,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- CONSTRAINT one_time_tokens_token_hash_check CHECK ((char_length(token_hash) > 0))
-);
-
-
-ALTER TABLE auth.one_time_tokens OWNER TO supabase_auth_admin;
-
---
--- Name: refresh_tokens; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.refresh_tokens (
- instance_id uuid,
- id bigint NOT NULL,
- token character varying(255),
- user_id character varying(255),
- revoked boolean,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- parent character varying(255),
- session_id uuid
-);
-
-
-ALTER TABLE auth.refresh_tokens OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE refresh_tokens; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.refresh_tokens IS 'Auth: Store of tokens used to refresh JWT tokens once they expire.';
-
-
---
--- Name: refresh_tokens_id_seq; Type: SEQUENCE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE SEQUENCE auth.refresh_tokens_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER SEQUENCE auth.refresh_tokens_id_seq OWNER TO supabase_auth_admin;
-
---
--- Name: refresh_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER SEQUENCE auth.refresh_tokens_id_seq OWNED BY auth.refresh_tokens.id;
-
-
---
--- Name: saml_providers; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.saml_providers (
- id uuid NOT NULL,
- sso_provider_id uuid NOT NULL,
- entity_id text NOT NULL,
- metadata_xml text NOT NULL,
- metadata_url text,
- attribute_mapping jsonb,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- name_id_format text,
- CONSTRAINT "entity_id not empty" CHECK ((char_length(entity_id) > 0)),
- CONSTRAINT "metadata_url not empty" CHECK (((metadata_url = NULL::text) OR (char_length(metadata_url) > 0))),
- CONSTRAINT "metadata_xml not empty" CHECK ((char_length(metadata_xml) > 0))
-);
-
-
-ALTER TABLE auth.saml_providers OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE saml_providers; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.saml_providers IS 'Auth: Manages SAML Identity Provider connections.';
-
-
---
--- Name: saml_relay_states; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.saml_relay_states (
- id uuid NOT NULL,
- sso_provider_id uuid NOT NULL,
- request_id text NOT NULL,
- for_email text,
- redirect_to text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- flow_state_id uuid,
- CONSTRAINT "request_id not empty" CHECK ((char_length(request_id) > 0))
-);
-
-
-ALTER TABLE auth.saml_relay_states OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE saml_relay_states; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.saml_relay_states IS 'Auth: Contains SAML Relay State information for each Service Provider initiated login.';
-
-
---
--- Name: schema_migrations; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.schema_migrations (
- version character varying(255) NOT NULL
-);
-
-
-ALTER TABLE auth.schema_migrations OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE schema_migrations; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.schema_migrations IS 'Auth: Manages updates to the auth system.';
-
-
---
--- Name: sessions; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.sessions (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- factor_id uuid,
- aal auth.aal_level,
- not_after timestamp with time zone,
- refreshed_at timestamp without time zone,
- user_agent text,
- ip inet,
- tag text,
- oauth_client_id uuid,
- refresh_token_hmac_key text,
- refresh_token_counter bigint,
- scopes text,
- CONSTRAINT sessions_scopes_length CHECK ((char_length(scopes) <= 4096))
-);
-
-
-ALTER TABLE auth.sessions OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE sessions; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.sessions IS 'Auth: Stores session data associated to a user.';
-
-
---
--- Name: COLUMN sessions.not_after; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sessions.not_after IS 'Auth: Not after is a nullable column that contains a timestamp after which the session should be regarded as expired.';
-
-
---
--- Name: COLUMN sessions.refresh_token_hmac_key; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sessions.refresh_token_hmac_key IS 'Holds a HMAC-SHA256 key used to sign refresh tokens for this session.';
-
-
---
--- Name: COLUMN sessions.refresh_token_counter; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sessions.refresh_token_counter IS 'Holds the ID (counter) of the last issued refresh token.';
-
-
---
--- Name: sso_domains; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.sso_domains (
- id uuid NOT NULL,
- sso_provider_id uuid NOT NULL,
- domain text NOT NULL,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- CONSTRAINT "domain not empty" CHECK ((char_length(domain) > 0))
-);
-
-
-ALTER TABLE auth.sso_domains OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE sso_domains; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.sso_domains IS 'Auth: Manages SSO email address domain mapping to an SSO Identity Provider.';
-
-
---
--- Name: sso_providers; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.sso_providers (
- id uuid NOT NULL,
- resource_id text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- disabled boolean,
- CONSTRAINT "resource_id not empty" CHECK (((resource_id = NULL::text) OR (char_length(resource_id) > 0)))
-);
-
-
-ALTER TABLE auth.sso_providers OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE sso_providers; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.sso_providers IS 'Auth: Manages SSO identity provider information; see saml_providers for SAML.';
-
-
---
--- Name: COLUMN sso_providers.resource_id; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sso_providers.resource_id IS 'Auth: Uniquely identifies a SSO provider according to a user-chosen resource ID (case insensitive), useful in infrastructure as code.';
-
-
---
--- Name: users; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.users (
- instance_id uuid,
- id uuid NOT NULL,
- aud character varying(255),
- role character varying(255),
- email character varying(255),
- encrypted_password character varying(255),
- email_confirmed_at timestamp with time zone,
- invited_at timestamp with time zone,
- confirmation_token character varying(255),
- confirmation_sent_at timestamp with time zone,
- recovery_token character varying(255),
- recovery_sent_at timestamp with time zone,
- email_change_token_new character varying(255),
- email_change character varying(255),
- email_change_sent_at timestamp with time zone,
- last_sign_in_at timestamp with time zone,
- raw_app_meta_data jsonb,
- raw_user_meta_data jsonb,
- is_super_admin boolean,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- phone text DEFAULT NULL::character varying,
- phone_confirmed_at timestamp with time zone,
- phone_change text DEFAULT ''::character varying,
- phone_change_token character varying(255) DEFAULT ''::character varying,
- phone_change_sent_at timestamp with time zone,
- confirmed_at timestamp with time zone GENERATED ALWAYS AS (LEAST(email_confirmed_at, phone_confirmed_at)) STORED,
- email_change_token_current character varying(255) DEFAULT ''::character varying,
- email_change_confirm_status smallint DEFAULT 0,
- banned_until timestamp with time zone,
- reauthentication_token character varying(255) DEFAULT ''::character varying,
- reauthentication_sent_at timestamp with time zone,
- is_sso_user boolean DEFAULT false NOT NULL,
- deleted_at timestamp with time zone,
- is_anonymous boolean DEFAULT false NOT NULL,
- CONSTRAINT users_email_change_confirm_status_check CHECK (((email_change_confirm_status >= 0) AND (email_change_confirm_status <= 2)))
-);
-
-
-ALTER TABLE auth.users OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE users; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.users IS 'Auth: Stores user login data within a secure schema.';
-
-
---
--- Name: COLUMN users.is_sso_user; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.users.is_sso_user IS 'Auth: Set this column to true when the account comes from SSO. These accounts can have duplicate emails.';
-
-
---
--- Name: agenda_bloqueios; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_bloqueios (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid,
- tipo text NOT NULL,
- titulo text NOT NULL,
- data_inicio date NOT NULL,
- data_fim date,
- hora_inicio time without time zone,
- hora_fim time without time zone,
- recorrente boolean DEFAULT false NOT NULL,
- dia_semana smallint,
- observacao text,
- origem text DEFAULT 'manual'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT agenda_bloqueios_tipo_check CHECK ((tipo = ANY (ARRAY['feriado_nacional'::text, 'feriado_municipal'::text, 'bloqueio'::text])))
-);
-
-
-ALTER TABLE public.agenda_bloqueios OWNER TO supabase_admin;
-
---
--- Name: agenda_configuracoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_configuracoes (
- owner_id uuid NOT NULL,
- duracao_padrao_minutos integer DEFAULT 50 NOT NULL,
- intervalo_padrao_minutos integer DEFAULT 0 NOT NULL,
- timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL,
- usar_horario_admin_custom boolean DEFAULT false NOT NULL,
- admin_inicio_visualizacao time without time zone,
- admin_fim_visualizacao time without time zone,
- admin_slot_visual_minutos integer DEFAULT 30 NOT NULL,
- online_ativo boolean DEFAULT false NOT NULL,
- online_min_antecedencia_horas integer DEFAULT 24 NOT NULL,
- online_max_dias_futuro integer DEFAULT 60 NOT NULL,
- online_cancelar_ate_horas integer DEFAULT 12 NOT NULL,
- online_reagendar_ate_horas integer DEFAULT 12 NOT NULL,
- online_limite_agendamentos_futuros integer DEFAULT 1 NOT NULL,
- online_modo text DEFAULT 'automatico'::text NOT NULL,
- online_buffer_antes_min integer DEFAULT 0 NOT NULL,
- online_buffer_depois_min integer DEFAULT 0 NOT NULL,
- online_modalidade text DEFAULT 'ambos'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- usar_granularidade_custom boolean DEFAULT false NOT NULL,
- granularidade_min integer,
- setup_concluido boolean DEFAULT false NOT NULL,
- setup_concluido_em timestamp with time zone,
- agenda_view_mode text DEFAULT 'full_24h'::text NOT NULL,
- agenda_custom_start time without time zone,
- agenda_custom_end time without time zone,
- session_duration_min integer DEFAULT 50 NOT NULL,
- session_break_min integer DEFAULT 10 NOT NULL,
- pausas_semanais jsonb DEFAULT '[]'::jsonb NOT NULL,
- setup_clinica_concluido boolean DEFAULT false NOT NULL,
- setup_clinica_concluido_em timestamp with time zone,
- tenant_id uuid,
- jornada_igual_todos boolean DEFAULT true,
- CONSTRAINT agenda_configuracoes_admin_slot_visual_minutos_check CHECK ((admin_slot_visual_minutos = ANY (ARRAY[5, 10, 15, 20, 30, 60]))),
- CONSTRAINT agenda_configuracoes_check CHECK (((usar_horario_admin_custom = false) OR ((admin_inicio_visualizacao IS NOT NULL) AND (admin_fim_visualizacao IS NOT NULL) AND (admin_fim_visualizacao > admin_inicio_visualizacao)))),
- CONSTRAINT agenda_configuracoes_duracao_padrao_minutos_check CHECK (((duracao_padrao_minutos >= 10) AND (duracao_padrao_minutos <= 240))),
- CONSTRAINT agenda_configuracoes_granularidade_min_check CHECK (((granularidade_min IS NULL) OR (granularidade_min = ANY (ARRAY[5, 10, 15, 20, 30, 45, 50, 60])))),
- CONSTRAINT agenda_configuracoes_intervalo_padrao_minutos_check CHECK (((intervalo_padrao_minutos >= 0) AND (intervalo_padrao_minutos <= 120))),
- CONSTRAINT agenda_configuracoes_online_buffer_antes_min_check CHECK (((online_buffer_antes_min >= 0) AND (online_buffer_antes_min <= 120))),
- CONSTRAINT agenda_configuracoes_online_buffer_depois_min_check CHECK (((online_buffer_depois_min >= 0) AND (online_buffer_depois_min <= 120))),
- CONSTRAINT agenda_configuracoes_online_cancelar_ate_horas_check CHECK (((online_cancelar_ate_horas >= 0) AND (online_cancelar_ate_horas <= 720))),
- CONSTRAINT agenda_configuracoes_online_limite_agendamentos_futuros_check CHECK (((online_limite_agendamentos_futuros >= 1) AND (online_limite_agendamentos_futuros <= 10))),
- CONSTRAINT agenda_configuracoes_online_max_dias_futuro_check CHECK (((online_max_dias_futuro >= 1) AND (online_max_dias_futuro <= 365))),
- CONSTRAINT agenda_configuracoes_online_min_antecedencia_horas_check CHECK (((online_min_antecedencia_horas >= 0) AND (online_min_antecedencia_horas <= 720))),
- CONSTRAINT agenda_configuracoes_online_modalidade_check CHECK ((online_modalidade = ANY (ARRAY['online'::text, 'presencial'::text, 'ambos'::text]))),
- CONSTRAINT agenda_configuracoes_online_modo_check CHECK ((online_modo = ANY (ARRAY['automatico'::text, 'aprovacao'::text]))),
- CONSTRAINT agenda_configuracoes_online_reagendar_ate_horas_check CHECK (((online_reagendar_ate_horas >= 0) AND (online_reagendar_ate_horas <= 720))),
- CONSTRAINT session_break_min_chk CHECK (((session_break_min >= 0) AND (session_break_min <= 60))),
- CONSTRAINT session_duration_min_chk CHECK (((session_duration_min >= 10) AND (session_duration_min <= 240)))
-);
-
-
-ALTER TABLE public.agenda_configuracoes OWNER TO supabase_admin;
-
---
--- Name: agenda_eventos; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_eventos (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tipo public.tipo_evento_agenda DEFAULT 'sessao'::public.tipo_evento_agenda NOT NULL,
- status public.status_evento_agenda DEFAULT 'agendado'::public.status_evento_agenda NOT NULL,
- titulo text,
- observacoes text,
- inicio_em timestamp with time zone NOT NULL,
- fim_em timestamp with time zone NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- terapeuta_id uuid,
- tenant_id uuid NOT NULL,
- visibility_scope text DEFAULT 'public'::text NOT NULL,
- mirror_of_event_id uuid,
- mirror_source text,
- patient_id uuid,
- determined_commitment_id uuid,
- link_online text,
- titulo_custom text,
- extra_fields jsonb,
- recurrence_id uuid,
- recurrence_date date,
- modalidade text DEFAULT 'presencial'::text,
- price numeric(10,2),
- CONSTRAINT agenda_eventos_check CHECK ((fim_em > inicio_em))
-);
-
-
-ALTER TABLE public.agenda_eventos OWNER TO supabase_admin;
-
---
--- Name: COLUMN agenda_eventos.price; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.agenda_eventos.price IS 'Valor da sessão em BRL. Preenchido automaticamente pela tabela professional_pricing do profissional.';
-
-
---
--- Name: agenda_excecoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_excecoes (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- data date NOT NULL,
- hora_inicio time without time zone,
- hora_fim time without time zone,
- tipo public.tipo_excecao_agenda NOT NULL,
- motivo text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- status public.status_excecao_agenda DEFAULT 'ativo'::public.status_excecao_agenda NOT NULL,
- fonte text DEFAULT 'manual'::text NOT NULL,
- aplicavel_online boolean DEFAULT true NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_excecoes_check CHECK ((((hora_inicio IS NULL) AND (hora_fim IS NULL)) OR ((hora_inicio IS NOT NULL) AND (hora_fim IS NOT NULL) AND (hora_fim > hora_inicio)))),
- CONSTRAINT agenda_excecoes_fonte_check CHECK ((fonte = ANY (ARRAY['manual'::text, 'feriado_google'::text, 'sistema'::text])))
-);
-
-
-ALTER TABLE public.agenda_excecoes OWNER TO supabase_admin;
-
---
--- Name: agenda_online_slots; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_online_slots (
- id bigint NOT NULL,
- owner_id uuid NOT NULL,
- weekday integer NOT NULL,
- "time" time without time zone NOT NULL,
- enabled boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_online_slots_weekday_check CHECK ((weekday = ANY (ARRAY[0, 1, 2, 3, 4, 5, 6])))
-);
-
-
-ALTER TABLE public.agenda_online_slots OWNER TO supabase_admin;
-
---
--- Name: agenda_online_slots_id_seq; Type: SEQUENCE; Schema: public; Owner: supabase_admin
---
-
-CREATE SEQUENCE public.agenda_online_slots_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER SEQUENCE public.agenda_online_slots_id_seq OWNER TO supabase_admin;
-
---
--- Name: agenda_online_slots_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: supabase_admin
---
-
-ALTER SEQUENCE public.agenda_online_slots_id_seq OWNED BY public.agenda_online_slots.id;
-
-
---
--- Name: agenda_regras_semanais; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_regras_semanais (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- dia_semana smallint NOT NULL,
- hora_inicio time without time zone NOT NULL,
- hora_fim time without time zone NOT NULL,
- modalidade text DEFAULT 'ambos'::text NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_regras_semanais_check CHECK ((hora_fim > hora_inicio)),
- CONSTRAINT agenda_regras_semanais_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6))),
- CONSTRAINT agenda_regras_semanais_modalidade_check CHECK (((modalidade = ANY (ARRAY['online'::text, 'presencial'::text, 'ambos'::text])) OR (modalidade IS NULL)))
-);
-
-
-ALTER TABLE public.agenda_regras_semanais OWNER TO supabase_admin;
-
---
--- Name: agenda_slots_bloqueados_semanais; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_slots_bloqueados_semanais (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- dia_semana smallint NOT NULL,
- hora_inicio time without time zone NOT NULL,
- motivo text,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_slots_bloqueados_semanais_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6)))
-);
-
-
-ALTER TABLE public.agenda_slots_bloqueados_semanais OWNER TO supabase_admin;
-
---
--- Name: agenda_slots_regras; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_slots_regras (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- dia_semana smallint NOT NULL,
- passo_minutos integer NOT NULL,
- offset_minutos integer DEFAULT 0 NOT NULL,
- buffer_antes_min integer DEFAULT 0 NOT NULL,
- buffer_depois_min integer DEFAULT 0 NOT NULL,
- min_antecedencia_horas integer DEFAULT 0 NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_slots_regras_buffer_antes_min_check CHECK (((buffer_antes_min >= 0) AND (buffer_antes_min <= 240))),
- CONSTRAINT agenda_slots_regras_buffer_depois_min_check CHECK (((buffer_depois_min >= 0) AND (buffer_depois_min <= 240))),
- CONSTRAINT agenda_slots_regras_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6))),
- CONSTRAINT agenda_slots_regras_min_antecedencia_horas_check CHECK (((min_antecedencia_horas >= 0) AND (min_antecedencia_horas <= 720))),
- CONSTRAINT agenda_slots_regras_offset_minutos_check CHECK (((offset_minutos >= 0) AND (offset_minutos <= 55))),
- CONSTRAINT agenda_slots_regras_passo_minutos_check CHECK (((passo_minutos >= 5) AND (passo_minutos <= 240)))
-);
-
-
-ALTER TABLE public.agenda_slots_regras OWNER TO supabase_admin;
-
---
--- Name: agendador_configuracoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agendador_configuracoes (
- owner_id uuid NOT NULL,
- tenant_id uuid,
- ativo boolean DEFAULT false NOT NULL,
- link_slug text,
- imagem_fundo_url text,
- imagem_header_url text,
- logomarca_url text,
- cor_primaria text DEFAULT '#4b6bff'::text,
- nome_exibicao text,
- endereco text,
- botao_como_chegar_ativo boolean DEFAULT true NOT NULL,
- maps_url text,
- modo_aprovacao text DEFAULT 'aprovacao'::text NOT NULL,
- modalidade text DEFAULT 'presencial'::text NOT NULL,
- tipos_habilitados jsonb DEFAULT '["primeira", "retorno"]'::jsonb NOT NULL,
- duracao_sessao_min integer DEFAULT 50 NOT NULL,
- antecedencia_minima_horas integer DEFAULT 24 NOT NULL,
- prazo_resposta_horas integer DEFAULT 2 NOT NULL,
- reserva_horas integer DEFAULT 2 NOT NULL,
- pagamento_obrigatorio boolean DEFAULT false NOT NULL,
- pix_chave text,
- pix_countdown_minutos integer DEFAULT 20 NOT NULL,
- triagem_motivo boolean DEFAULT true NOT NULL,
- triagem_como_conheceu boolean DEFAULT false NOT NULL,
- verificacao_email boolean DEFAULT false NOT NULL,
- exigir_aceite_lgpd boolean DEFAULT true NOT NULL,
- mensagem_boas_vindas text,
- texto_como_se_preparar text,
- texto_termos_lgpd text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- pagamento_modo text DEFAULT 'sem_pagamento'::text NOT NULL,
- pagamento_metodos_visiveis text[] DEFAULT '{}'::text[] NOT NULL,
- CONSTRAINT agendador_configuracoes_antecedencia_check CHECK (((antecedencia_minima_horas >= 0) AND (antecedencia_minima_horas <= 720))),
- CONSTRAINT agendador_configuracoes_duracao_check CHECK (((duracao_sessao_min >= 10) AND (duracao_sessao_min <= 240))),
- CONSTRAINT agendador_configuracoes_modalidade_check CHECK ((modalidade = ANY (ARRAY['presencial'::text, 'online'::text, 'ambos'::text]))),
- CONSTRAINT agendador_configuracoes_modo_check CHECK ((modo_aprovacao = ANY (ARRAY['automatico'::text, 'aprovacao'::text]))),
- CONSTRAINT agendador_configuracoes_pix_countdown_check CHECK (((pix_countdown_minutos >= 5) AND (pix_countdown_minutos <= 120))),
- CONSTRAINT agendador_configuracoes_prazo_check CHECK (((prazo_resposta_horas >= 1) AND (prazo_resposta_horas <= 72))),
- CONSTRAINT agendador_configuracoes_reserva_check CHECK (((reserva_horas >= 1) AND (reserva_horas <= 48)))
-);
-
-
-ALTER TABLE public.agendador_configuracoes OWNER TO supabase_admin;
-
---
--- Name: COLUMN agendador_configuracoes.pagamento_modo; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.agendador_configuracoes.pagamento_modo IS 'sem_pagamento | pagar_na_hora | pix_antecipado';
-
-
---
--- Name: COLUMN agendador_configuracoes.pagamento_metodos_visiveis; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.agendador_configuracoes.pagamento_metodos_visiveis IS 'Métodos exibidos ao paciente quando pagamento_modo = pagar_na_hora. Ex: {pix, deposito, dinheiro, cartao, convenio}';
-
-
---
--- Name: agendador_solicitacoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agendador_solicitacoes (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid,
- paciente_nome text NOT NULL,
- paciente_sobrenome text,
- paciente_email text NOT NULL,
- paciente_celular text,
- paciente_cpf text,
- tipo text NOT NULL,
- modalidade text NOT NULL,
- data_solicitada date NOT NULL,
- hora_solicitada time without time zone NOT NULL,
- reservado_ate timestamp with time zone,
- motivo text,
- como_conheceu text,
- pix_status text DEFAULT 'pendente'::text,
- pix_pago_em timestamp with time zone,
- status text DEFAULT 'pendente'::text NOT NULL,
- recusado_motivo text,
- autorizado_em timestamp with time zone,
- autorizado_por uuid,
- user_id uuid,
- patient_id uuid,
- evento_id uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT agendador_sol_modalidade_check CHECK ((modalidade = ANY (ARRAY['presencial'::text, 'online'::text]))),
- CONSTRAINT agendador_sol_pix_check CHECK (((pix_status IS NULL) OR (pix_status = ANY (ARRAY['pendente'::text, 'pago'::text, 'expirado'::text])))),
- CONSTRAINT agendador_sol_status_check CHECK ((status = ANY (ARRAY['pendente'::text, 'autorizado'::text, 'recusado'::text, 'expirado'::text, 'convertido'::text]))),
- CONSTRAINT agendador_sol_tipo_check CHECK ((tipo = ANY (ARRAY['primeira'::text, 'retorno'::text, 'reagendar'::text])))
-);
-
-
-ALTER TABLE public.agendador_solicitacoes OWNER TO supabase_admin;
-
---
--- Name: commitment_time_logs; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.commitment_time_logs (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- commitment_id uuid NOT NULL,
- calendar_event_id uuid,
- source public.commitment_log_source DEFAULT 'manual'::public.commitment_log_source NOT NULL,
- started_at timestamp with time zone NOT NULL,
- ended_at timestamp with time zone NOT NULL,
- minutes integer NOT NULL,
- created_by uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.commitment_time_logs OWNER TO supabase_admin;
-
---
--- Name: current_tenant_id; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.current_tenant_id AS
- SELECT current_setting('request.jwt.claim.tenant_id'::text, true) AS current_setting;
-
-
-ALTER VIEW public.current_tenant_id OWNER TO supabase_admin;
-
---
--- Name: determined_commitment_fields; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.determined_commitment_fields (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- commitment_id uuid NOT NULL,
- key text NOT NULL,
- label text NOT NULL,
- field_type public.determined_field_type DEFAULT 'text'::public.determined_field_type NOT NULL,
- required boolean DEFAULT false NOT NULL,
- sort_order integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.determined_commitment_fields OWNER TO supabase_admin;
-
---
--- Name: determined_commitments; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.determined_commitments (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- created_by uuid,
- is_native boolean DEFAULT false NOT NULL,
- native_key text,
- is_locked boolean DEFAULT false NOT NULL,
- active boolean DEFAULT true NOT NULL,
- name text NOT NULL,
- description text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- bg_color text,
- text_color text
-);
-
-
-ALTER TABLE public.determined_commitments OWNER TO supabase_admin;
-
---
--- Name: dev_user_credentials; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.dev_user_credentials (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid,
- email text NOT NULL,
- password_dev text NOT NULL,
- kind text DEFAULT 'custom'::text NOT NULL,
- note text,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.dev_user_credentials OWNER TO supabase_admin;
-
---
--- Name: entitlements_invalidation; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.entitlements_invalidation (
- owner_id uuid NOT NULL,
- changed_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.entitlements_invalidation OWNER TO supabase_admin;
-
---
--- Name: features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.features (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- key text NOT NULL,
- description text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- descricao text DEFAULT ''::text NOT NULL,
- name text DEFAULT ''::text NOT NULL
-);
-
-
-ALTER TABLE public.features OWNER TO supabase_admin;
-
---
--- Name: COLUMN features.descricao; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.features.descricao IS 'Descrição humana da feature (exibição no admin e documentação).';
-
-
---
--- Name: feriados; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.feriados (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid,
- owner_id uuid,
- tipo text DEFAULT 'municipal'::text NOT NULL,
- nome text NOT NULL,
- data date NOT NULL,
- cidade text,
- estado text,
- observacao text,
- bloqueia_sessoes boolean DEFAULT false NOT NULL,
- criado_em timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT feriados_tipo_check CHECK ((tipo = ANY (ARRAY['municipal'::text, 'personalizado'::text])))
-);
-
-
-ALTER TABLE public.feriados OWNER TO supabase_admin;
-
---
--- Name: module_features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.module_features (
- module_id uuid NOT NULL,
- feature_id uuid NOT NULL,
- enabled boolean DEFAULT true NOT NULL,
- limits jsonb,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.module_features OWNER TO supabase_admin;
-
---
--- Name: modules; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.modules (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- key text NOT NULL,
- name text NOT NULL,
- description text,
- is_active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.modules OWNER TO supabase_admin;
-
---
--- Name: plan_features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_features (
- plan_id uuid NOT NULL,
- feature_id uuid NOT NULL,
- enabled boolean DEFAULT true NOT NULL,
- limits jsonb,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.plan_features OWNER TO supabase_admin;
-
---
--- Name: tenant_modules; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_modules (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- module_id uuid NOT NULL,
- status text DEFAULT 'active'::text NOT NULL,
- settings jsonb,
- provider text DEFAULT 'manual'::text NOT NULL,
- provider_item_id text,
- installed_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_modules OWNER TO supabase_admin;
-
---
--- Name: owner_feature_entitlements; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.owner_feature_entitlements AS
- WITH base AS (
- SELECT s.user_id AS owner_id,
- f.key AS feature_key,
- pf.limits,
- 'plan'::text AS source
- FROM ((public.subscriptions s
- JOIN public.plan_features pf ON (((pf.plan_id = s.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)))
- WHERE ((s.status = 'active'::text) AND (s.user_id IS NOT NULL))
- UNION ALL
- SELECT tm.owner_id,
- f.key AS feature_key,
- mf.limits,
- 'module'::text AS source
- FROM (((public.tenant_modules tm
- JOIN public.modules m ON (((m.id = tm.module_id) AND (m.is_active = true))))
- JOIN public.module_features mf ON (((mf.module_id = m.id) AND (mf.enabled = true))))
- JOIN public.features f ON ((f.id = mf.feature_id)))
- WHERE ((tm.status = 'active'::text) AND (tm.owner_id IS NOT NULL))
- )
- SELECT owner_id,
- feature_key,
- array_agg(DISTINCT source) AS sources,
- jsonb_agg(limits) FILTER (WHERE (limits IS NOT NULL)) AS limits_list
- FROM base
- GROUP BY owner_id, feature_key;
-
-
-ALTER VIEW public.owner_feature_entitlements OWNER TO supabase_admin;
-
---
--- Name: owner_users; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.owner_users (
- owner_id uuid NOT NULL,
- user_id uuid NOT NULL,
- role text DEFAULT 'admin'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.owner_users OWNER TO supabase_admin;
-
---
--- Name: patient_group_patient; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_group_patient (
- patient_group_id uuid NOT NULL,
- patient_id uuid NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_group_patient OWNER TO supabase_admin;
-
---
--- Name: patient_groups; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_groups (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- nome text NOT NULL,
- descricao text,
- cor text,
- is_active boolean DEFAULT true NOT NULL,
- is_system boolean DEFAULT false NOT NULL,
- owner_id uuid DEFAULT auth.uid() NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- therapist_id uuid,
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_groups OWNER TO supabase_admin;
-
---
--- Name: patient_intake_requests; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_intake_requests (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- token text NOT NULL,
- consent boolean DEFAULT false NOT NULL,
- status text DEFAULT 'new'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- converted_patient_id uuid,
- rejected_reason text,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- cpf text,
- rg text,
- cep text,
- nome_completo text,
- email_principal text,
- telefone text,
- pais text,
- cidade text,
- estado text,
- endereco text,
- numero text,
- bairro text,
- complemento text,
- data_nascimento date,
- naturalidade text,
- genero text,
- estado_civil text,
- onde_nos_conheceu text,
- encaminhado_por text,
- observacoes text,
- notas_internas text,
- email_alternativo text,
- telefone_alternativo text,
- profissao text,
- escolaridade text,
- nacionalidade text,
- avatar_url text,
- tenant_id uuid,
- CONSTRAINT chk_intakes_status CHECK ((status = ANY (ARRAY['new'::text, 'converted'::text, 'rejected'::text])))
-);
-
-
-ALTER TABLE public.patient_intake_requests OWNER TO supabase_admin;
-
---
--- Name: patient_invites; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_invites (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- token text NOT NULL,
- active boolean DEFAULT true NOT NULL,
- expires_at timestamp with time zone,
- max_uses integer,
- uses integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid
-);
-
-
-ALTER TABLE public.patient_invites OWNER TO supabase_admin;
-
---
--- Name: patient_patient_tag; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_patient_tag (
- owner_id uuid NOT NULL,
- patient_id uuid NOT NULL,
- tag_id uuid NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_patient_tag OWNER TO supabase_admin;
-
---
--- Name: patient_tags; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_tags (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- nome text NOT NULL,
- cor text,
- is_padrao boolean DEFAULT false NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone,
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_tags OWNER TO supabase_admin;
-
---
--- Name: patients; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patients (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- nome_completo text NOT NULL,
- email_principal text,
- telefone text,
- created_at timestamp with time zone DEFAULT now(),
- owner_id uuid,
- avatar_url text,
- status text DEFAULT 'Ativo'::text,
- last_attended_at timestamp with time zone,
- is_native boolean DEFAULT false,
- naturalidade text,
- data_nascimento date,
- rg text,
- cpf text,
- identification_color text,
- genero text,
- estado_civil text,
- email_alternativo text,
- pais text DEFAULT 'Brasil'::text,
- cep text,
- cidade text,
- estado text,
- endereco text,
- numero text,
- bairro text,
- complemento text,
- escolaridade text,
- profissao text,
- nome_parente text,
- grau_parentesco text,
- telefone_alternativo text,
- onde_nos_conheceu text,
- encaminhado_por text,
- nome_responsavel text,
- telefone_responsavel text,
- cpf_responsavel text,
- observacao_responsavel text,
- cobranca_no_responsavel boolean DEFAULT false,
- observacoes text,
- notas_internas text,
- updated_at timestamp with time zone DEFAULT now(),
- telefone_parente text,
- tenant_id uuid NOT NULL,
- responsible_member_id uuid NOT NULL,
- user_id uuid,
- patient_scope text DEFAULT 'clinic'::text NOT NULL,
- therapist_member_id uuid,
- CONSTRAINT cpf_responsavel_format_check CHECK (((cpf_responsavel IS NULL) OR (cpf_responsavel ~ '^\d{11}$'::text))),
- CONSTRAINT patients_cpf_format_check CHECK (((cpf IS NULL) OR (cpf ~ '^\d{11}$'::text))),
- CONSTRAINT patients_patient_scope_check CHECK ((patient_scope = ANY (ARRAY['clinic'::text, 'therapist'::text]))),
- CONSTRAINT patients_status_check CHECK ((status = ANY (ARRAY['Ativo'::text, 'Inativo'::text, 'Alta'::text, 'Encaminhado'::text]))),
- CONSTRAINT patients_therapist_scope_consistency CHECK ((((patient_scope = 'clinic'::text) AND (therapist_member_id IS NULL)) OR ((patient_scope = 'therapist'::text) AND (therapist_member_id IS NOT NULL))))
-);
-
-
-ALTER TABLE public.patients OWNER TO supabase_admin;
-
---
--- Name: COLUMN patients.avatar_url; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.patients.avatar_url IS 'URL pública da imagem de avatar armazenada no Supabase Storage';
-
-
---
--- Name: payment_settings; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.payment_settings (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid,
- pix_ativo boolean DEFAULT false NOT NULL,
- pix_tipo text DEFAULT 'cpf'::text NOT NULL,
- pix_chave text DEFAULT ''::text NOT NULL,
- pix_nome_titular text DEFAULT ''::text NOT NULL,
- deposito_ativo boolean DEFAULT false NOT NULL,
- deposito_banco text DEFAULT ''::text NOT NULL,
- deposito_agencia text DEFAULT ''::text NOT NULL,
- deposito_conta text DEFAULT ''::text NOT NULL,
- deposito_tipo_conta text DEFAULT 'corrente'::text NOT NULL,
- deposito_titular text DEFAULT ''::text NOT NULL,
- deposito_cpf_cnpj text DEFAULT ''::text NOT NULL,
- dinheiro_ativo boolean DEFAULT false NOT NULL,
- cartao_ativo boolean DEFAULT false NOT NULL,
- cartao_instrucao text DEFAULT ''::text NOT NULL,
- convenio_ativo boolean DEFAULT false NOT NULL,
- convenio_lista text DEFAULT ''::text NOT NULL,
- observacoes_pagamento text DEFAULT ''::text NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.payment_settings OWNER TO supabase_admin;
-
---
--- Name: plan_prices; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_prices (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- plan_id uuid NOT NULL,
- currency text DEFAULT 'BRL'::text NOT NULL,
- "interval" text NOT NULL,
- amount_cents integer NOT NULL,
- is_active boolean DEFAULT true NOT NULL,
- active_from timestamp with time zone DEFAULT now() NOT NULL,
- active_to timestamp with time zone,
- source text DEFAULT 'manual'::text NOT NULL,
- provider text,
- provider_price_id text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT plan_prices_amount_cents_check CHECK ((amount_cents >= 0)),
- CONSTRAINT plan_prices_interval_check CHECK (("interval" = ANY (ARRAY['month'::text, 'year'::text])))
-);
-
-
-ALTER TABLE public.plan_prices OWNER TO supabase_admin;
-
---
--- Name: TABLE plan_prices; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.plan_prices IS 'Histórico de preços por plano (fonte: manual/gateway).';
-
-
---
--- Name: plan_public; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_public (
- plan_id uuid NOT NULL,
- public_name text DEFAULT ''::text NOT NULL,
- public_description text DEFAULT ''::text NOT NULL,
- badge text,
- is_featured boolean DEFAULT false NOT NULL,
- is_visible boolean DEFAULT true NOT NULL,
- sort_order integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.plan_public OWNER TO supabase_admin;
-
---
--- Name: TABLE plan_public; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.plan_public IS 'Configuração de vitrine (página pública) dos planos.';
-
-
---
--- Name: plan_public_bullets; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_public_bullets (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- plan_id uuid NOT NULL,
- text text NOT NULL,
- sort_order integer DEFAULT 0 NOT NULL,
- highlight boolean DEFAULT false NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.plan_public_bullets OWNER TO supabase_admin;
-
---
--- Name: plans; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plans (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- key text NOT NULL,
- name text NOT NULL,
- description text,
- is_active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- price_cents integer DEFAULT 0 NOT NULL,
- currency text DEFAULT 'BRL'::text NOT NULL,
- billing_interval text DEFAULT 'month'::text NOT NULL,
- target text,
- max_supervisees integer,
- CONSTRAINT plans_target_check CHECK ((target = ANY (ARRAY['patient'::text, 'therapist'::text, 'clinic'::text, 'supervisor'::text])))
-);
-
-
-ALTER TABLE public.plans OWNER TO supabase_admin;
-
---
--- Name: COLUMN plans.name; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.plans.name IS 'Nome interno do plano (admin). A key é técnica/imutável.';
-
-
---
--- Name: COLUMN plans.target; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.plans.target IS 'Público-alvo do plano: patient, therapist ou clinic.';
-
-
---
--- Name: COLUMN plans.max_supervisees; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.plans.max_supervisees IS 'Limite de terapeutas que podem ser supervisionados. Apenas para planos target=supervisor. NULL = sem limite.';
-
-
---
--- Name: professional_pricing; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.professional_pricing (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- determined_commitment_id uuid,
- price numeric(10,2) NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.professional_pricing OWNER TO supabase_admin;
-
---
--- Name: profiles; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.profiles (
- id uuid NOT NULL,
- role text DEFAULT 'tenant_member'::text NOT NULL,
- full_name text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- avatar_url text,
- phone text,
- bio text,
- language text DEFAULT 'pt-BR'::text NOT NULL,
- timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL,
- notify_system_email boolean DEFAULT true NOT NULL,
- notify_reminders boolean DEFAULT true NOT NULL,
- notify_news boolean DEFAULT false NOT NULL,
- account_type text DEFAULT 'free'::text NOT NULL,
- platform_roles text[] DEFAULT '{}'::text[] NOT NULL,
- CONSTRAINT profiles_account_type_check CHECK ((account_type = ANY (ARRAY['free'::text, 'patient'::text, 'therapist'::text, 'clinic'::text]))),
- CONSTRAINT profiles_role_check CHECK ((role = ANY (ARRAY['saas_admin'::text, 'tenant_member'::text, 'portal_user'::text, 'patient'::text])))
-);
-
-
-ALTER TABLE public.profiles OWNER TO supabase_admin;
-
---
--- Name: COLUMN profiles.account_type; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.account_type IS 'Tipo de conta: free=sem perfil ainda, patient=paciente (imutável), therapist=terapeuta (imutável), clinic=clínica (imutável).';
-
-
---
--- Name: COLUMN profiles.platform_roles; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.platform_roles IS 'Papéis globais de plataforma, independentes de tenant. Ex: editor de microlearning. Atribuído pelo saas_admin.';
-
-
---
--- Name: recurrence_exceptions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.recurrence_exceptions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- recurrence_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- original_date date NOT NULL,
- type public.recurrence_exception_type NOT NULL,
- new_date date,
- new_start_time time without time zone,
- new_end_time time without time zone,
- modalidade text,
- observacoes text,
- titulo_custom text,
- extra_fields jsonb,
- reason text,
- agenda_evento_id uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.recurrence_exceptions OWNER TO supabase_admin;
-
---
--- Name: recurrence_rules; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.recurrence_rules (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- owner_id uuid NOT NULL,
- therapist_id uuid,
- patient_id uuid,
- determined_commitment_id uuid,
- type public.recurrence_type DEFAULT 'weekly'::public.recurrence_type NOT NULL,
- "interval" smallint DEFAULT 1 NOT NULL,
- weekdays smallint[] DEFAULT '{}'::smallint[] NOT NULL,
- start_time time without time zone NOT NULL,
- end_time time without time zone NOT NULL,
- timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL,
- duration_min smallint DEFAULT 50 NOT NULL,
- start_date date NOT NULL,
- end_date date,
- max_occurrences integer,
- open_ended boolean DEFAULT true NOT NULL,
- modalidade text DEFAULT 'presencial'::text,
- titulo_custom text,
- observacoes text,
- extra_fields jsonb,
- status text DEFAULT 'ativo'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- price numeric(10,2),
- CONSTRAINT recurrence_rules_dates_chk CHECK (((end_date IS NULL) OR (end_date >= start_date))),
- CONSTRAINT recurrence_rules_interval_chk CHECK (("interval" >= 1)),
- CONSTRAINT recurrence_rules_status_check CHECK ((status = ANY (ARRAY['ativo'::text, 'pausado'::text, 'cancelado'::text]))),
- CONSTRAINT recurrence_rules_times_chk CHECK ((end_time > start_time))
-);
-
-
-ALTER TABLE public.recurrence_rules OWNER TO supabase_admin;
-
---
--- Name: saas_admins; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_admins (
- user_id uuid NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_admins OWNER TO supabase_admin;
-
---
--- Name: saas_doc_votos; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_doc_votos (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- doc_id uuid NOT NULL,
- user_id uuid NOT NULL,
- util boolean NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_doc_votos OWNER TO supabase_admin;
-
---
--- Name: saas_docs; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_docs (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- titulo text NOT NULL,
- conteudo text DEFAULT ''::text NOT NULL,
- medias jsonb DEFAULT '[]'::jsonb NOT NULL,
- tipo_acesso text DEFAULT 'usuario'::text NOT NULL,
- pagina_path text NOT NULL,
- docs_relacionados uuid[] DEFAULT '{}'::uuid[] NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- ordem integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- categoria text,
- exibir_no_faq boolean DEFAULT false NOT NULL,
- votos_util integer DEFAULT 0 NOT NULL,
- votos_nao_util integer DEFAULT 0 NOT NULL,
- CONSTRAINT saas_docs_tipo_acesso_check CHECK ((tipo_acesso = ANY (ARRAY['admin'::text, 'usuario'::text])))
-);
-
-
-ALTER TABLE public.saas_docs OWNER TO supabase_admin;
-
---
--- Name: COLUMN saas_docs.categoria; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.saas_docs.categoria IS 'Agrupa docs no portal FAQ (ex: Conta, Agenda, Pagamentos)';
-
-
---
--- Name: COLUMN saas_docs.exibir_no_faq; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.saas_docs.exibir_no_faq IS 'Se true, a doc e seus itens FAQ aparecem no portal de FAQ';
-
-
---
--- Name: saas_faq; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_faq (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- pergunta text NOT NULL,
- categoria text,
- publico boolean DEFAULT false NOT NULL,
- votos integer DEFAULT 0 NOT NULL,
- titulo text,
- conteudo text,
- tipo_acesso text DEFAULT 'usuario'::text NOT NULL,
- pagina_path text NOT NULL,
- pagina_label text,
- medias jsonb DEFAULT '[]'::jsonb NOT NULL,
- faqs_relacionados uuid[] DEFAULT '{}'::uuid[] NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- ordem integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_faq OWNER TO supabase_admin;
-
---
--- Name: saas_faq_itens; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_faq_itens (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- doc_id uuid NOT NULL,
- pergunta text NOT NULL,
- resposta text,
- ordem integer DEFAULT 0 NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_faq_itens OWNER TO supabase_admin;
-
---
--- Name: TABLE saas_faq_itens; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.saas_faq_itens IS 'Pares pergunta/resposta vinculados a um documento de ajuda';
-
-
---
--- Name: subscription_events; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_events (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- subscription_id uuid NOT NULL,
- owner_id uuid NOT NULL,
- event_type text NOT NULL,
- old_plan_id uuid,
- new_plan_id uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- created_by uuid,
- source text DEFAULT 'admin_ui'::text,
- reason text,
- metadata jsonb,
- owner_type text NOT NULL,
- owner_ref uuid NOT NULL,
- CONSTRAINT subscription_events_owner_ref_consistency_chk CHECK ((owner_id = owner_ref)),
- CONSTRAINT subscription_events_owner_type_chk CHECK (((owner_type IS NULL) OR (owner_type = ANY (ARRAY['clinic'::text, 'therapist'::text]))))
-);
-
-
-ALTER TABLE public.subscription_events OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_personal; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_intents_personal (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid NOT NULL,
- created_by_user_id uuid,
- email text NOT NULL,
- plan_id uuid NOT NULL,
- plan_key text,
- "interval" text,
- amount_cents integer,
- currency text,
- status text DEFAULT 'new'::text NOT NULL,
- source text DEFAULT 'manual'::text NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- paid_at timestamp with time zone,
- subscription_id uuid,
- CONSTRAINT sint_personal_interval_check CHECK ((("interval" IS NULL) OR ("interval" = ANY (ARRAY['month'::text, 'year'::text])))),
- CONSTRAINT sint_personal_status_check CHECK ((status = ANY (ARRAY['new'::text, 'waiting_payment'::text, 'paid'::text, 'canceled'::text])))
-);
-
-
-ALTER TABLE public.subscription_intents_personal OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_tenant; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_intents_tenant (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid NOT NULL,
- created_by_user_id uuid,
- email text NOT NULL,
- plan_id uuid NOT NULL,
- plan_key text,
- "interval" text,
- amount_cents integer,
- currency text,
- status text DEFAULT 'new'::text NOT NULL,
- source text DEFAULT 'manual'::text NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- paid_at timestamp with time zone,
- tenant_id uuid NOT NULL,
- subscription_id uuid,
- CONSTRAINT sint_tenant_interval_check CHECK ((("interval" IS NULL) OR ("interval" = ANY (ARRAY['month'::text, 'year'::text])))),
- CONSTRAINT sint_tenant_status_check CHECK ((status = ANY (ARRAY['new'::text, 'waiting_payment'::text, 'paid'::text, 'canceled'::text])))
-);
-
-
-ALTER TABLE public.subscription_intents_tenant OWNER TO supabase_admin;
-
---
--- Name: subscription_intents; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.subscription_intents AS
- SELECT t.id,
- t.user_id,
- t.created_by_user_id,
- t.email,
- t.plan_id,
- t.plan_key,
- t."interval",
- t.amount_cents,
- t.currency,
- t.status,
- t.source,
- t.notes,
- t.created_at,
- t.paid_at,
- t.tenant_id,
- t.subscription_id,
- 'clinic'::text AS plan_target
- FROM public.subscription_intents_tenant t
-UNION ALL
- SELECT p.id,
- p.user_id,
- p.created_by_user_id,
- p.email,
- p.plan_id,
- p.plan_key,
- p."interval",
- p.amount_cents,
- p.currency,
- p.status,
- p.source,
- p.notes,
- p.created_at,
- p.paid_at,
- NULL::uuid AS tenant_id,
- p.subscription_id,
- 'therapist'::text AS plan_target
- FROM public.subscription_intents_personal p;
-
-
-ALTER VIEW public.subscription_intents OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_legacy; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_intents_legacy (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid,
- email text,
- plan_key text NOT NULL,
- "interval" text NOT NULL,
- amount_cents integer NOT NULL,
- currency text DEFAULT 'BRL'::text NOT NULL,
- status text DEFAULT 'new'::text NOT NULL,
- source text DEFAULT 'landing'::text NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- paid_at timestamp with time zone,
- tenant_id uuid NOT NULL,
- created_by_user_id uuid,
- CONSTRAINT subscription_intents_interval_check CHECK (("interval" = ANY (ARRAY['month'::text, 'year'::text]))),
- CONSTRAINT subscription_intents_status_check CHECK ((status = ANY (ARRAY['new'::text, 'waiting_payment'::text, 'paid'::text, 'canceled'::text])))
-);
-
-
-ALTER TABLE public.subscription_intents_legacy OWNER TO supabase_admin;
-
---
--- Name: support_sessions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.support_sessions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- admin_id uuid NOT NULL,
- token text DEFAULT encode(extensions.gen_random_bytes(32), 'hex'::text) NOT NULL,
- expires_at timestamp with time zone DEFAULT (now() + '01:00:00'::interval) NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.support_sessions OWNER TO supabase_admin;
-
---
--- Name: tenant_feature_exceptions_log; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_feature_exceptions_log (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- feature_key text NOT NULL,
- enabled boolean NOT NULL,
- reason text,
- created_by uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_feature_exceptions_log OWNER TO supabase_admin;
-
---
--- Name: tenant_features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_features (
- tenant_id uuid NOT NULL,
- feature_key text NOT NULL,
- enabled boolean DEFAULT false NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_features OWNER TO supabase_admin;
-
---
--- Name: tenant_invites; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_invites (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- email text NOT NULL,
- role text NOT NULL,
- token uuid DEFAULT gen_random_uuid() NOT NULL,
- invited_by uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- expires_at timestamp with time zone DEFAULT (now() + '7 days'::interval) NOT NULL,
- accepted_at timestamp with time zone,
- accepted_by uuid,
- revoked_at timestamp with time zone,
- revoked_by uuid,
- CONSTRAINT tenant_invites_role_check CHECK ((role = ANY (ARRAY['therapist'::text, 'secretary'::text])))
-);
-
-
-ALTER TABLE public.tenant_invites OWNER TO supabase_admin;
-
---
--- Name: tenants; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenants (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- name text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- kind text DEFAULT 'saas'::text NOT NULL,
- CONSTRAINT tenants_kind_check CHECK ((kind = ANY (ARRAY['therapist'::text, 'clinic_coworking'::text, 'clinic_reception'::text, 'clinic_full'::text, 'clinic'::text, 'saas'::text, 'supervisor'::text])))
-);
-
-
-ALTER TABLE public.tenants OWNER TO supabase_admin;
-
---
--- Name: COLUMN tenants.kind; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.tenants.kind IS 'Tipo do tenant. Imutável após criação. therapist=terapeuta solo. clinic_coworking/clinic_reception/clinic_full=clínicas. clinic e saas são legados.';
-
-
---
--- Name: user_settings; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.user_settings (
- user_id uuid NOT NULL,
- theme_mode text DEFAULT 'dark'::text NOT NULL,
- preset text DEFAULT 'Aura'::text NOT NULL,
- primary_color text DEFAULT 'noir'::text NOT NULL,
- surface_color text DEFAULT 'slate'::text NOT NULL,
- menu_mode text DEFAULT 'static'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.user_settings OWNER TO supabase_admin;
-
---
--- Name: v_auth_users_public; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_auth_users_public AS
- SELECT id AS user_id,
- email,
- created_at,
- last_sign_in_at
- FROM auth.users u;
-
-
-ALTER VIEW public.v_auth_users_public OWNER TO supabase_admin;
-
---
--- Name: v_commitment_totals; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_commitment_totals AS
- SELECT c.tenant_id,
- c.id AS commitment_id,
- (COALESCE(sum(l.minutes), (0)::bigint))::integer AS total_minutes
- FROM (public.determined_commitments c
- LEFT JOIN public.commitment_time_logs l ON ((l.commitment_id = c.id)))
- GROUP BY c.tenant_id, c.id;
-
-
-ALTER VIEW public.v_commitment_totals OWNER TO supabase_admin;
-
---
--- Name: v_patient_groups_with_counts; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_patient_groups_with_counts AS
- SELECT pg.id,
- pg.nome,
- pg.cor,
- pg.owner_id,
- pg.is_system,
- pg.is_active,
- pg.created_at,
- pg.updated_at,
- (COALESCE(count(pgp.patient_id), (0)::bigint))::integer AS patients_count
- FROM (public.patient_groups pg
- LEFT JOIN public.patient_group_patient pgp ON ((pgp.patient_group_id = pg.id)))
- GROUP BY pg.id, pg.nome, pg.cor, pg.owner_id, pg.is_system, pg.is_active, pg.created_at, pg.updated_at;
-
-
-ALTER VIEW public.v_patient_groups_with_counts OWNER TO supabase_admin;
-
---
--- Name: v_plan_active_prices; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_plan_active_prices AS
- SELECT plan_id,
- max(
- CASE
- WHEN (("interval" = 'month'::text) AND is_active) THEN amount_cents
- ELSE NULL::integer
- END) AS monthly_cents,
- max(
- CASE
- WHEN (("interval" = 'year'::text) AND is_active) THEN amount_cents
- ELSE NULL::integer
- END) AS yearly_cents,
- max(
- CASE
- WHEN (("interval" = 'month'::text) AND is_active) THEN currency
- ELSE NULL::text
- END) AS monthly_currency,
- max(
- CASE
- WHEN (("interval" = 'year'::text) AND is_active) THEN currency
- ELSE NULL::text
- END) AS yearly_currency
- FROM public.plan_prices
- GROUP BY plan_id;
-
-
-ALTER VIEW public.v_plan_active_prices OWNER TO supabase_admin;
-
---
--- Name: v_public_pricing; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_public_pricing AS
- SELECT p.id AS plan_id,
- p.key AS plan_key,
- p.name AS plan_name,
- COALESCE(pp.public_name, ''::text) AS public_name,
- COALESCE(pp.public_description, ''::text) AS public_description,
- pp.badge,
- COALESCE(pp.is_featured, false) AS is_featured,
- COALESCE(pp.is_visible, true) AS is_visible,
- COALESCE(pp.sort_order, 0) AS sort_order,
- ap.monthly_cents,
- ap.yearly_cents,
- ap.monthly_currency,
- ap.yearly_currency,
- COALESCE(( SELECT jsonb_agg(jsonb_build_object('id', b.id, 'text', b.text, 'highlight', b.highlight, 'sort_order', b.sort_order) ORDER BY b.sort_order, b.created_at) AS jsonb_agg
- FROM public.plan_public_bullets b
- WHERE (b.plan_id = p.id)), '[]'::jsonb) AS bullets,
- p.target AS plan_target
- FROM ((public.plans p
- LEFT JOIN public.plan_public pp ON ((pp.plan_id = p.id)))
- LEFT JOIN public.v_plan_active_prices ap ON ((ap.plan_id = p.id)))
- ORDER BY COALESCE(pp.sort_order, 0), p.key;
-
-
-ALTER VIEW public.v_public_pricing OWNER TO supabase_admin;
-
---
--- Name: v_subscription_feature_mismatch; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_subscription_feature_mismatch AS
- WITH expected AS (
- SELECT s.user_id AS owner_id,
- f.key AS feature_key
- FROM ((public.subscriptions s
- JOIN public.plan_features pf ON (((pf.plan_id = s.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)))
- WHERE ((s.status = 'active'::text) AND (s.tenant_id IS NULL) AND (s.user_id IS NOT NULL))
- ), actual AS (
- SELECT e.owner_id,
- e.feature_key
- FROM public.owner_feature_entitlements e
- )
- SELECT COALESCE(expected.owner_id, actual.owner_id) AS owner_id,
- COALESCE(expected.feature_key, actual.feature_key) AS feature_key,
- CASE
- WHEN ((expected.feature_key IS NOT NULL) AND (actual.feature_key IS NULL)) THEN 'missing_entitlement'::text
- WHEN ((expected.feature_key IS NULL) AND (actual.feature_key IS NOT NULL)) THEN 'unexpected_entitlement'::text
- ELSE NULL::text
- END AS mismatch_type
- FROM (expected
- FULL JOIN actual ON (((expected.owner_id = actual.owner_id) AND (expected.feature_key = actual.feature_key))))
- WHERE ((expected.feature_key IS NULL) OR (actual.feature_key IS NULL));
-
-
-ALTER VIEW public.v_subscription_feature_mismatch OWNER TO supabase_admin;
-
---
--- Name: v_subscription_health; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_subscription_health AS
- SELECT s.id AS subscription_id,
- s.user_id AS owner_id,
- s.status,
- s.plan_id,
- p.key AS plan_key,
- s.current_period_start,
- s.current_period_end,
- s.updated_at,
- CASE
- WHEN (s.plan_id IS NULL) THEN 'missing_plan'::text
- WHEN (p.id IS NULL) THEN 'invalid_plan'::text
- WHEN ((s.status = 'active'::text) AND (s.current_period_end IS NOT NULL) AND (s.current_period_end < now())) THEN 'expired_but_active'::text
- WHEN ((s.status = 'canceled'::text) AND (s.current_period_end > now())) THEN 'canceled_but_still_in_period'::text
- ELSE 'ok'::text
- END AS health_status,
- CASE
- WHEN (s.tenant_id IS NOT NULL) THEN 'clinic'::text
- ELSE 'therapist'::text
- END AS owner_type,
- COALESCE(s.tenant_id, s.user_id) AS owner_ref
- FROM (public.subscriptions s
- LEFT JOIN public.plans p ON ((p.id = s.plan_id)));
-
-
-ALTER VIEW public.v_subscription_health OWNER TO supabase_admin;
-
---
--- Name: v_subscription_health_v2; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_subscription_health_v2 AS
- SELECT s.id AS subscription_id,
- s.user_id AS owner_id,
- CASE
- WHEN (s.tenant_id IS NOT NULL) THEN 'clinic'::text
- ELSE 'therapist'::text
- END AS owner_type,
- COALESCE(s.tenant_id, s.user_id) AS owner_ref,
- s.status,
- s.plan_id,
- p.key AS plan_key,
- s.current_period_start,
- s.current_period_end,
- s.updated_at,
- CASE
- WHEN (s.plan_id IS NULL) THEN 'missing_plan'::text
- WHEN (p.id IS NULL) THEN 'invalid_plan'::text
- WHEN ((s.status = 'active'::text) AND (s.current_period_end IS NOT NULL) AND (s.current_period_end < now())) THEN 'expired_but_active'::text
- WHEN ((s.status = 'canceled'::text) AND (s.current_period_end > now())) THEN 'canceled_but_still_in_period'::text
- ELSE 'ok'::text
- END AS health_status
- FROM (public.subscriptions s
- LEFT JOIN public.plans p ON ((p.id = s.plan_id)));
-
-
-ALTER VIEW public.v_subscription_health_v2 OWNER TO supabase_admin;
-
---
--- Name: v_tag_patient_counts; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tag_patient_counts AS
- SELECT t.id,
- t.owner_id,
- t.nome,
- t.cor,
- t.is_padrao,
- t.created_at,
- t.updated_at,
- (COALESCE(count(ppt.patient_id), (0)::bigint))::integer AS pacientes_count,
- (COALESCE(count(ppt.patient_id), (0)::bigint))::integer AS patient_count
- FROM (public.patient_tags t
- LEFT JOIN public.patient_patient_tag ppt ON (((ppt.tag_id = t.id) AND (ppt.owner_id = t.owner_id))))
- GROUP BY t.id, t.owner_id, t.nome, t.cor, t.is_padrao, t.created_at, t.updated_at;
-
-
-ALTER VIEW public.v_tag_patient_counts OWNER TO supabase_admin;
-
---
--- Name: v_tenant_active_subscription; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_active_subscription AS
- SELECT DISTINCT ON (tenant_id) tenant_id,
- plan_id,
- plan_key,
- "interval",
- status,
- current_period_start,
- current_period_end,
- created_at
- FROM public.subscriptions s
- WHERE ((tenant_id IS NOT NULL) AND (status = 'active'::text) AND ((current_period_end IS NULL) OR (current_period_end > now())))
- ORDER BY tenant_id, created_at DESC;
-
-
-ALTER VIEW public.v_tenant_active_subscription OWNER TO supabase_admin;
-
---
--- Name: v_tenant_entitlements; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_entitlements AS
- SELECT a.tenant_id,
- f.key AS feature_key,
- true AS allowed
- FROM ((public.v_tenant_active_subscription a
- JOIN public.plan_features pf ON (((pf.plan_id = a.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)));
-
-
-ALTER VIEW public.v_tenant_entitlements OWNER TO supabase_admin;
-
---
--- Name: v_tenant_entitlements_full; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_entitlements_full AS
- SELECT a.tenant_id,
- f.key AS feature_key,
- (pf.enabled = true) AS allowed,
- pf.limits,
- a.plan_id,
- p.key AS plan_key
- FROM (((public.v_tenant_active_subscription a
- JOIN public.plan_features pf ON ((pf.plan_id = a.plan_id)))
- JOIN public.features f ON ((f.id = pf.feature_id)))
- JOIN public.plans p ON ((p.id = a.plan_id)));
-
-
-ALTER VIEW public.v_tenant_entitlements_full OWNER TO supabase_admin;
-
---
--- Name: v_tenant_entitlements_json; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_entitlements_json AS
- SELECT tenant_id,
- max(plan_key) AS plan_key,
- jsonb_object_agg(feature_key, jsonb_build_object('allowed', allowed, 'limits', COALESCE(limits, '{}'::jsonb)) ORDER BY feature_key) AS entitlements
- FROM public.v_tenant_entitlements_full
- GROUP BY tenant_id;
-
-
-ALTER VIEW public.v_tenant_entitlements_json OWNER TO supabase_admin;
-
---
--- Name: v_tenant_feature_exceptions; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_feature_exceptions AS
- SELECT tf.tenant_id,
- a.plan_key,
- tf.feature_key,
- 'commercial_exception'::text AS exception_type
- FROM ((public.tenant_features tf
- JOIN public.v_tenant_active_subscription a ON ((a.tenant_id = tf.tenant_id)))
- LEFT JOIN public.v_tenant_entitlements_full v ON (((v.tenant_id = tf.tenant_id) AND (v.feature_key = tf.feature_key))))
- WHERE ((tf.enabled = true) AND (COALESCE(v.allowed, false) = false));
-
-
-ALTER VIEW public.v_tenant_feature_exceptions OWNER TO supabase_admin;
-
---
--- Name: v_tenant_feature_mismatch; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_feature_mismatch AS
- WITH plan_allowed AS (
- SELECT v.tenant_id,
- v.feature_key,
- v.allowed
- FROM public.v_tenant_entitlements_full v
- ), overrides AS (
- SELECT tf.tenant_id,
- tf.feature_key,
- tf.enabled
- FROM public.tenant_features tf
- )
- SELECT o.tenant_id,
- o.feature_key,
- CASE
- WHEN ((o.enabled = true) AND (COALESCE(p.allowed, false) = false)) THEN 'unexpected_override'::text
- ELSE NULL::text
- END AS mismatch_type
- FROM (overrides o
- LEFT JOIN plan_allowed p ON (((p.tenant_id = o.tenant_id) AND (p.feature_key = o.feature_key))))
- WHERE ((o.enabled = true) AND (COALESCE(p.allowed, false) = false));
-
-
-ALTER VIEW public.v_tenant_feature_mismatch OWNER TO supabase_admin;
-
---
--- Name: v_tenant_members_with_profiles; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_members_with_profiles AS
- SELECT tm.id AS tenant_member_id,
- tm.tenant_id,
- tm.user_id,
- tm.role,
- tm.status,
- tm.created_at,
- p.full_name,
- au.email
- FROM ((public.tenant_members tm
- LEFT JOIN public.profiles p ON ((p.id = tm.user_id)))
- LEFT JOIN auth.users au ON ((au.id = tm.user_id)));
-
-
-ALTER VIEW public.v_tenant_members_with_profiles OWNER TO supabase_admin;
-
---
--- Name: v_tenant_people; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_people AS
- SELECT 'member'::text AS type,
- m.tenant_id,
- m.user_id,
- u.email,
- m.role,
- m.status,
- NULL::uuid AS invite_token,
- NULL::timestamp with time zone AS expires_at
- FROM (public.tenant_members m
- JOIN auth.users u ON ((u.id = m.user_id)))
-UNION ALL
- SELECT 'invite'::text AS type,
- i.tenant_id,
- NULL::uuid AS user_id,
- i.email,
- i.role,
- 'invited'::text AS status,
- i.token AS invite_token,
- i.expires_at
- FROM public.tenant_invites i
- WHERE ((i.accepted_at IS NULL) AND (i.revoked_at IS NULL));
-
-
-ALTER VIEW public.v_tenant_people OWNER TO supabase_admin;
-
---
--- Name: v_tenant_staff; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_staff AS
- SELECT ('m_'::text || (tm.id)::text) AS row_id,
- tm.tenant_id,
- tm.user_id,
- tm.role,
- tm.status,
- tm.created_at,
- p.full_name,
- au.email,
- NULL::uuid AS invite_token
- FROM ((public.tenant_members tm
- LEFT JOIN public.profiles p ON ((p.id = tm.user_id)))
- LEFT JOIN auth.users au ON ((au.id = tm.user_id)))
-UNION ALL
- SELECT ('i_'::text || (ti.id)::text) AS row_id,
- ti.tenant_id,
- NULL::uuid AS user_id,
- ti.role,
- 'invited'::text AS status,
- ti.created_at,
- NULL::text AS full_name,
- ti.email,
- ti.token AS invite_token
- FROM public.tenant_invites ti
- WHERE ((ti.accepted_at IS NULL) AND (ti.revoked_at IS NULL) AND (ti.expires_at > now()));
-
-
-ALTER VIEW public.v_tenant_staff OWNER TO supabase_admin;
-
---
--- Name: v_user_active_subscription; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_user_active_subscription AS
- SELECT DISTINCT ON (user_id) user_id,
- plan_id,
- plan_key,
- "interval",
- status,
- current_period_start,
- current_period_end,
- created_at
- FROM public.subscriptions s
- WHERE ((tenant_id IS NULL) AND (user_id IS NOT NULL) AND (status = 'active'::text) AND ((current_period_end IS NULL) OR (current_period_end > now())))
- ORDER BY user_id, created_at DESC;
-
-
-ALTER VIEW public.v_user_active_subscription OWNER TO supabase_admin;
-
---
--- Name: v_user_entitlements; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_user_entitlements AS
- SELECT a.user_id,
- f.key AS feature_key,
- true AS allowed
- FROM ((public.v_user_active_subscription a
- JOIN public.plan_features pf ON (((pf.plan_id = a.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)));
-
-
-ALTER VIEW public.v_user_entitlements OWNER TO supabase_admin;
-
---
--- Name: messages; Type: TABLE; Schema: realtime; Owner: supabase_realtime_admin
---
-
-CREATE TABLE realtime.messages (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-)
-PARTITION BY RANGE (inserted_at);
-
-
-ALTER TABLE realtime.messages OWNER TO supabase_realtime_admin;
-
---
--- Name: messages_2026_03_09; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_09 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_09 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_10; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_10 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_10 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_11; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_11 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_11 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_12; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_12 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_12 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_13; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_13 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_13 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_14; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_14 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_14 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_15; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_15 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_15 OWNER TO supabase_admin;
-
---
--- Name: schema_migrations; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.schema_migrations (
- version bigint NOT NULL,
- inserted_at timestamp(0) without time zone
-);
-
-
-ALTER TABLE realtime.schema_migrations OWNER TO supabase_admin;
-
---
--- Name: subscription; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.subscription (
- id bigint NOT NULL,
- subscription_id uuid NOT NULL,
- entity regclass NOT NULL,
- filters realtime.user_defined_filter[] DEFAULT '{}'::realtime.user_defined_filter[] NOT NULL,
- claims jsonb NOT NULL,
- claims_role regrole GENERATED ALWAYS AS (realtime.to_regrole((claims ->> 'role'::text))) STORED NOT NULL,
- created_at timestamp without time zone DEFAULT timezone('utc'::text, now()) NOT NULL
-);
-
-
-ALTER TABLE realtime.subscription OWNER TO supabase_admin;
-
---
--- Name: subscription_id_seq; Type: SEQUENCE; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE realtime.subscription ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY (
- SEQUENCE NAME realtime.subscription_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: buckets; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.buckets (
- id text NOT NULL,
- name text NOT NULL,
- owner uuid,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now(),
- public boolean DEFAULT false,
- avif_autodetection boolean DEFAULT false,
- file_size_limit bigint,
- allowed_mime_types text[],
- owner_id text,
- type storage.buckettype DEFAULT 'STANDARD'::storage.buckettype NOT NULL
-);
-
-
-ALTER TABLE storage.buckets OWNER TO supabase_storage_admin;
-
---
--- Name: COLUMN buckets.owner; Type: COMMENT; Schema: storage; Owner: supabase_storage_admin
---
-
-COMMENT ON COLUMN storage.buckets.owner IS 'Field is deprecated, use owner_id instead';
-
-
---
--- Name: buckets_analytics; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.buckets_analytics (
- name text NOT NULL,
- type storage.buckettype DEFAULT 'ANALYTICS'::storage.buckettype NOT NULL,
- format text DEFAULT 'ICEBERG'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- deleted_at timestamp with time zone
-);
-
-
-ALTER TABLE storage.buckets_analytics OWNER TO supabase_storage_admin;
-
---
--- Name: buckets_vectors; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.buckets_vectors (
- id text NOT NULL,
- type storage.buckettype DEFAULT 'VECTOR'::storage.buckettype NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE storage.buckets_vectors OWNER TO supabase_storage_admin;
-
---
--- Name: iceberg_namespaces; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.iceberg_namespaces (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- bucket_name text NOT NULL,
- name text NOT NULL COLLATE pg_catalog."C",
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- metadata jsonb DEFAULT '{}'::jsonb NOT NULL,
- catalog_id uuid NOT NULL
-);
-
-
-ALTER TABLE storage.iceberg_namespaces OWNER TO supabase_storage_admin;
-
---
--- Name: iceberg_tables; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.iceberg_tables (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- namespace_id uuid NOT NULL,
- bucket_name text NOT NULL,
- name text NOT NULL COLLATE pg_catalog."C",
- location text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- remote_table_id text,
- shard_key text,
- shard_id text,
- catalog_id uuid NOT NULL
-);
-
-
-ALTER TABLE storage.iceberg_tables OWNER TO supabase_storage_admin;
-
---
--- Name: migrations; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.migrations (
- id integer NOT NULL,
- name character varying(100) NOT NULL,
- hash character varying(40) NOT NULL,
- executed_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP
-);
-
-
-ALTER TABLE storage.migrations OWNER TO supabase_storage_admin;
-
---
--- Name: objects; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.objects (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- bucket_id text,
- name text,
- owner uuid,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now(),
- last_accessed_at timestamp with time zone DEFAULT now(),
- metadata jsonb,
- path_tokens text[] GENERATED ALWAYS AS (string_to_array(name, '/'::text)) STORED,
- version text,
- owner_id text,
- user_metadata jsonb
-);
-
-
-ALTER TABLE storage.objects OWNER TO supabase_storage_admin;
-
---
--- Name: COLUMN objects.owner; Type: COMMENT; Schema: storage; Owner: supabase_storage_admin
---
-
-COMMENT ON COLUMN storage.objects.owner IS 'Field is deprecated, use owner_id instead';
-
-
---
--- Name: s3_multipart_uploads; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.s3_multipart_uploads (
- id text NOT NULL,
- in_progress_size bigint DEFAULT 0 NOT NULL,
- upload_signature text NOT NULL,
- bucket_id text NOT NULL,
- key text NOT NULL COLLATE pg_catalog."C",
- version text NOT NULL,
- owner_id text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- user_metadata jsonb
-);
-
-
-ALTER TABLE storage.s3_multipart_uploads OWNER TO supabase_storage_admin;
-
---
--- Name: s3_multipart_uploads_parts; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.s3_multipart_uploads_parts (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- upload_id text NOT NULL,
- size bigint DEFAULT 0 NOT NULL,
- part_number integer NOT NULL,
- bucket_id text NOT NULL,
- key text NOT NULL COLLATE pg_catalog."C",
- etag text NOT NULL,
- owner_id text,
- version text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE storage.s3_multipart_uploads_parts OWNER TO supabase_storage_admin;
-
---
--- Name: vector_indexes; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.vector_indexes (
- id text DEFAULT gen_random_uuid() NOT NULL,
- name text NOT NULL COLLATE pg_catalog."C",
- bucket_id text NOT NULL,
- data_type text NOT NULL,
- dimension integer NOT NULL,
- distance_metric text NOT NULL,
- metadata_configuration jsonb,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE storage.vector_indexes OWNER TO supabase_storage_admin;
-
---
--- Name: hooks; Type: TABLE; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE TABLE supabase_functions.hooks (
- id bigint NOT NULL,
- hook_table_id integer NOT NULL,
- hook_name text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- request_id bigint
-);
-
-
-ALTER TABLE supabase_functions.hooks OWNER TO supabase_functions_admin;
-
---
--- Name: TABLE hooks; Type: COMMENT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-COMMENT ON TABLE supabase_functions.hooks IS 'Supabase Functions Hooks: Audit trail for triggered hooks.';
-
-
---
--- Name: hooks_id_seq; Type: SEQUENCE; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE SEQUENCE supabase_functions.hooks_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER SEQUENCE supabase_functions.hooks_id_seq OWNER TO supabase_functions_admin;
-
---
--- Name: hooks_id_seq; Type: SEQUENCE OWNED BY; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER SEQUENCE supabase_functions.hooks_id_seq OWNED BY supabase_functions.hooks.id;
-
-
---
--- Name: migrations; Type: TABLE; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE TABLE supabase_functions.migrations (
- version text NOT NULL,
- inserted_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE supabase_functions.migrations OWNER TO supabase_functions_admin;
-
---
--- Name: messages_2026_03_09; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_09 FOR VALUES FROM ('2026-03-09 00:00:00') TO ('2026-03-10 00:00:00');
-
-
---
--- Name: messages_2026_03_10; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_10 FOR VALUES FROM ('2026-03-10 00:00:00') TO ('2026-03-11 00:00:00');
-
-
---
--- Name: messages_2026_03_11; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_11 FOR VALUES FROM ('2026-03-11 00:00:00') TO ('2026-03-12 00:00:00');
-
-
---
--- Name: messages_2026_03_12; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_12 FOR VALUES FROM ('2026-03-12 00:00:00') TO ('2026-03-13 00:00:00');
-
-
---
--- Name: messages_2026_03_13; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_13 FOR VALUES FROM ('2026-03-13 00:00:00') TO ('2026-03-14 00:00:00');
-
-
---
--- Name: messages_2026_03_14; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_14 FOR VALUES FROM ('2026-03-14 00:00:00') TO ('2026-03-15 00:00:00');
-
-
---
--- Name: messages_2026_03_15; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_15 FOR VALUES FROM ('2026-03-15 00:00:00') TO ('2026-03-16 00:00:00');
-
-
---
--- Name: refresh_tokens id; Type: DEFAULT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens ALTER COLUMN id SET DEFAULT nextval('auth.refresh_tokens_id_seq'::regclass);
-
-
---
--- Name: agenda_online_slots id; Type: DEFAULT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots ALTER COLUMN id SET DEFAULT nextval('public.agenda_online_slots_id_seq'::regclass);
-
-
---
--- Name: hooks id; Type: DEFAULT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER TABLE ONLY supabase_functions.hooks ALTER COLUMN id SET DEFAULT nextval('supabase_functions.hooks_id_seq'::regclass);
-
-
---
--- Name: extensions extensions_pkey; Type: CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.extensions
- ADD CONSTRAINT extensions_pkey PRIMARY KEY (id);
-
-
---
--- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.schema_migrations
- ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: tenants tenants_pkey; Type: CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.tenants
- ADD CONSTRAINT tenants_pkey PRIMARY KEY (id);
-
-
---
--- Name: mfa_amr_claims amr_id_pk; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_amr_claims
- ADD CONSTRAINT amr_id_pk PRIMARY KEY (id);
-
-
---
--- Name: audit_log_entries audit_log_entries_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.audit_log_entries
- ADD CONSTRAINT audit_log_entries_pkey PRIMARY KEY (id);
-
-
---
--- Name: flow_state flow_state_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.flow_state
- ADD CONSTRAINT flow_state_pkey PRIMARY KEY (id);
-
-
---
--- Name: identities identities_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.identities
- ADD CONSTRAINT identities_pkey PRIMARY KEY (id);
-
-
---
--- Name: identities identities_provider_id_provider_unique; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.identities
- ADD CONSTRAINT identities_provider_id_provider_unique UNIQUE (provider_id, provider);
-
-
---
--- Name: instances instances_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.instances
- ADD CONSTRAINT instances_pkey PRIMARY KEY (id);
-
-
---
--- Name: mfa_amr_claims mfa_amr_claims_session_id_authentication_method_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_amr_claims
- ADD CONSTRAINT mfa_amr_claims_session_id_authentication_method_pkey UNIQUE (session_id, authentication_method);
-
-
---
--- Name: mfa_challenges mfa_challenges_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_challenges
- ADD CONSTRAINT mfa_challenges_pkey PRIMARY KEY (id);
-
-
---
--- Name: mfa_factors mfa_factors_last_challenged_at_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_factors
- ADD CONSTRAINT mfa_factors_last_challenged_at_key UNIQUE (last_challenged_at);
-
-
---
--- Name: mfa_factors mfa_factors_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_factors
- ADD CONSTRAINT mfa_factors_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_authorizations oauth_authorizations_authorization_code_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_authorization_code_key UNIQUE (authorization_code);
-
-
---
--- Name: oauth_authorizations oauth_authorizations_authorization_id_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_authorization_id_key UNIQUE (authorization_id);
-
-
---
--- Name: oauth_authorizations oauth_authorizations_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_client_states oauth_client_states_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_client_states
- ADD CONSTRAINT oauth_client_states_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_clients oauth_clients_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_clients
- ADD CONSTRAINT oauth_clients_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_consents oauth_consents_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_consents oauth_consents_user_client_unique; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_user_client_unique UNIQUE (user_id, client_id);
-
-
---
--- Name: one_time_tokens one_time_tokens_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.one_time_tokens
- ADD CONSTRAINT one_time_tokens_pkey PRIMARY KEY (id);
-
-
---
--- Name: refresh_tokens refresh_tokens_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens
- ADD CONSTRAINT refresh_tokens_pkey PRIMARY KEY (id);
-
-
---
--- Name: refresh_tokens refresh_tokens_token_unique; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens
- ADD CONSTRAINT refresh_tokens_token_unique UNIQUE (token);
-
-
---
--- Name: saml_providers saml_providers_entity_id_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_providers
- ADD CONSTRAINT saml_providers_entity_id_key UNIQUE (entity_id);
-
-
---
--- Name: saml_providers saml_providers_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_providers
- ADD CONSTRAINT saml_providers_pkey PRIMARY KEY (id);
-
-
---
--- Name: saml_relay_states saml_relay_states_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_relay_states
- ADD CONSTRAINT saml_relay_states_pkey PRIMARY KEY (id);
-
-
---
--- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.schema_migrations
- ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: sessions sessions_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sessions
- ADD CONSTRAINT sessions_pkey PRIMARY KEY (id);
-
-
---
--- Name: sso_domains sso_domains_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sso_domains
- ADD CONSTRAINT sso_domains_pkey PRIMARY KEY (id);
-
-
---
--- Name: sso_providers sso_providers_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sso_providers
- ADD CONSTRAINT sso_providers_pkey PRIMARY KEY (id);
-
-
---
--- Name: users users_phone_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.users
- ADD CONSTRAINT users_phone_key UNIQUE (phone);
-
-
---
--- Name: users users_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.users
- ADD CONSTRAINT users_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_bloqueios
- ADD CONSTRAINT agenda_bloqueios_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_configuracoes
- ADD CONSTRAINT agenda_configuracoes_pkey PRIMARY KEY (owner_id);
-
-
---
--- Name: agenda_eventos agenda_eventos_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_eventos agenda_eventos_sem_sobreposicao; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_sem_sobreposicao EXCLUDE USING gist (owner_id WITH =, tstzrange(inicio_em, fim_em, '[)'::text) WITH &&);
-
-
---
--- Name: agenda_excecoes agenda_excecoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_excecoes
- ADD CONSTRAINT agenda_excecoes_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_online_slots agenda_online_slots_owner_id_weekday_time_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_owner_id_weekday_time_key UNIQUE (owner_id, weekday, "time");
-
-
---
--- Name: agenda_online_slots agenda_online_slots_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_regras_semanais
- ADD CONSTRAINT agenda_regras_semanais_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_unique; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_regras_semanais
- ADD CONSTRAINT agenda_regras_semanais_unique UNIQUE (owner_id, dia_semana, hora_inicio, hora_fim, modalidade);
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_seman_owner_id_dia_semana_hora_inic_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_bloqueados_semanais
- ADD CONSTRAINT agenda_slots_bloqueados_seman_owner_id_dia_semana_hora_inic_key UNIQUE (owner_id, dia_semana, hora_inicio);
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_bloqueados_semanais
- ADD CONSTRAINT agenda_slots_bloqueados_semanais_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_owner_id_dia_semana_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_regras
- ADD CONSTRAINT agenda_slots_regras_owner_id_dia_semana_key UNIQUE (owner_id, dia_semana);
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_regras
- ADD CONSTRAINT agenda_slots_regras_pkey PRIMARY KEY (id);
-
-
---
--- Name: agendador_configuracoes agendador_configuracoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_configuracoes
- ADD CONSTRAINT agendador_configuracoes_pkey PRIMARY KEY (owner_id);
-
-
---
--- Name: agendador_solicitacoes agendador_solicitacoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_solicitacoes
- ADD CONSTRAINT agendador_solicitacoes_pkey PRIMARY KEY (id);
-
-
---
--- Name: commitment_time_logs commitment_time_logs_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_pkey PRIMARY KEY (id);
-
-
---
--- Name: determined_commitment_fields determined_commitment_fields_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitment_fields
- ADD CONSTRAINT determined_commitment_fields_pkey PRIMARY KEY (id);
-
-
---
--- Name: determined_commitments determined_commitments_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitments
- ADD CONSTRAINT determined_commitments_pkey PRIMARY KEY (id);
-
-
---
--- Name: determined_commitments determined_commitments_tenant_native_key_uq; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitments
- ADD CONSTRAINT determined_commitments_tenant_native_key_uq UNIQUE (tenant_id, native_key);
-
-
---
--- Name: dev_user_credentials dev_user_credentials_email_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.dev_user_credentials
- ADD CONSTRAINT dev_user_credentials_email_key UNIQUE (email);
-
-
---
--- Name: dev_user_credentials dev_user_credentials_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.dev_user_credentials
- ADD CONSTRAINT dev_user_credentials_pkey PRIMARY KEY (id);
-
-
---
--- Name: entitlements_invalidation entitlements_invalidation_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.entitlements_invalidation
- ADD CONSTRAINT entitlements_invalidation_pkey PRIMARY KEY (owner_id);
-
-
---
--- Name: features features_key_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.features
- ADD CONSTRAINT features_key_key UNIQUE (key);
-
-
---
--- Name: features features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.features
- ADD CONSTRAINT features_pkey PRIMARY KEY (id);
-
-
---
--- Name: feriados feriados_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_pkey PRIMARY KEY (id);
-
-
---
--- Name: feriados feriados_tenant_id_data_nome_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_tenant_id_data_nome_key UNIQUE (tenant_id, data, nome);
-
-
---
--- Name: module_features module_features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.module_features
- ADD CONSTRAINT module_features_pkey PRIMARY KEY (module_id, feature_id);
-
-
---
--- Name: modules modules_key_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.modules
- ADD CONSTRAINT modules_key_key UNIQUE (key);
-
-
---
--- Name: modules modules_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.modules
- ADD CONSTRAINT modules_pkey PRIMARY KEY (id);
-
-
---
--- Name: owner_users owner_users_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.owner_users
- ADD CONSTRAINT owner_users_pkey PRIMARY KEY (owner_id, user_id);
-
-
---
--- Name: patient_group_patient patient_group_patient_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_group_patient
- ADD CONSTRAINT patient_group_patient_pkey PRIMARY KEY (patient_group_id, patient_id);
-
-
---
--- Name: patient_groups patient_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_groups
- ADD CONSTRAINT patient_groups_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_intake_requests patient_intake_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_intake_requests
- ADD CONSTRAINT patient_intake_requests_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_invites patient_invites_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_invites
- ADD CONSTRAINT patient_invites_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_invites patient_invites_token_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_invites
- ADD CONSTRAINT patient_invites_token_key UNIQUE (token);
-
-
---
--- Name: patient_patient_tag patient_patient_tag_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT patient_patient_tag_pkey PRIMARY KEY (patient_id, tag_id);
-
-
---
--- Name: patient_tags patient_tags_owner_name_uniq; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_tags
- ADD CONSTRAINT patient_tags_owner_name_uniq UNIQUE (owner_id, nome);
-
-
---
--- Name: patient_tags patient_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_tags
- ADD CONSTRAINT patient_tags_pkey PRIMARY KEY (id);
-
-
---
--- Name: patients patients_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_pkey PRIMARY KEY (id);
-
-
---
--- Name: payment_settings payment_settings_owner_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_owner_id_key UNIQUE (owner_id);
-
-
---
--- Name: payment_settings payment_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_pkey PRIMARY KEY (id);
-
-
---
--- Name: plan_features plan_features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_features
- ADD CONSTRAINT plan_features_pkey PRIMARY KEY (plan_id, feature_id);
-
-
---
--- Name: plan_prices plan_prices_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_prices
- ADD CONSTRAINT plan_prices_pkey PRIMARY KEY (id);
-
-
---
--- Name: plan_public_bullets plan_public_bullets_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public_bullets
- ADD CONSTRAINT plan_public_bullets_pkey PRIMARY KEY (id);
-
-
---
--- Name: plan_public plan_public_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public
- ADD CONSTRAINT plan_public_pkey PRIMARY KEY (plan_id);
-
-
---
--- Name: plans plans_key_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plans
- ADD CONSTRAINT plans_key_key UNIQUE (key);
-
-
---
--- Name: plans plans_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plans
- ADD CONSTRAINT plans_pkey PRIMARY KEY (id);
-
-
---
--- Name: professional_pricing professional_pricing_owner_commitment_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.professional_pricing
- ADD CONSTRAINT professional_pricing_owner_commitment_key UNIQUE (owner_id, determined_commitment_id);
-
-
---
--- Name: professional_pricing professional_pricing_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.professional_pricing
- ADD CONSTRAINT professional_pricing_pkey PRIMARY KEY (id);
-
-
---
--- Name: profiles profiles_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.profiles
- ADD CONSTRAINT profiles_pkey PRIMARY KEY (id);
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_pkey PRIMARY KEY (id);
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_unique; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_unique UNIQUE (recurrence_id, original_date);
-
-
---
--- Name: recurrence_rules recurrence_rules_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rules
- ADD CONSTRAINT recurrence_rules_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_admins saas_admins_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_admins
- ADD CONSTRAINT saas_admins_pkey PRIMARY KEY (user_id);
-
-
---
--- Name: saas_doc_votos saas_doc_votos_doc_id_user_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_doc_id_user_id_key UNIQUE (doc_id, user_id);
-
-
---
--- Name: saas_doc_votos saas_doc_votos_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_docs saas_docs_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_docs
- ADD CONSTRAINT saas_docs_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_faq_itens saas_faq_itens_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_faq_itens
- ADD CONSTRAINT saas_faq_itens_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_faq saas_faq_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_faq
- ADD CONSTRAINT saas_faq_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_events subscription_events_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_events
- ADD CONSTRAINT subscription_events_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_intents_personal subscription_intents_personal_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_personal
- ADD CONSTRAINT subscription_intents_personal_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_intents_legacy subscription_intents_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_legacy
- ADD CONSTRAINT subscription_intents_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_intents_tenant subscription_intents_tenant_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_tenant
- ADD CONSTRAINT subscription_intents_tenant_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscriptions subscriptions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscriptions
- ADD CONSTRAINT subscriptions_pkey PRIMARY KEY (id);
-
-
---
--- Name: support_sessions support_sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_pkey PRIMARY KEY (id);
-
-
---
--- Name: support_sessions support_sessions_token_unique; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_token_unique UNIQUE (token);
-
-
---
--- Name: tenant_feature_exceptions_log tenant_feature_exceptions_log_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_feature_exceptions_log
- ADD CONSTRAINT tenant_feature_exceptions_log_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenant_features tenant_features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_features
- ADD CONSTRAINT tenant_features_pkey PRIMARY KEY (tenant_id, feature_key);
-
-
---
--- Name: tenant_invites tenant_invites_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenant_members tenant_members_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenant_members tenant_members_tenant_id_user_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_tenant_id_user_id_key UNIQUE (tenant_id, user_id);
-
-
---
--- Name: tenant_modules tenant_modules_owner_id_module_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_owner_id_module_id_key UNIQUE (owner_id, module_id);
-
-
---
--- Name: tenant_modules tenant_modules_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenants tenants_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenants
- ADD CONSTRAINT tenants_pkey PRIMARY KEY (id);
-
-
---
--- Name: user_settings user_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.user_settings
- ADD CONSTRAINT user_settings_pkey PRIMARY KEY (user_id);
-
-
---
--- Name: messages messages_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER TABLE ONLY realtime.messages
- ADD CONSTRAINT messages_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_09 messages_2026_03_09_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_09
- ADD CONSTRAINT messages_2026_03_09_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_10 messages_2026_03_10_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_10
- ADD CONSTRAINT messages_2026_03_10_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_11 messages_2026_03_11_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_11
- ADD CONSTRAINT messages_2026_03_11_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_12 messages_2026_03_12_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_12
- ADD CONSTRAINT messages_2026_03_12_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_13 messages_2026_03_13_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_13
- ADD CONSTRAINT messages_2026_03_13_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_14 messages_2026_03_14_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_14
- ADD CONSTRAINT messages_2026_03_14_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_15 messages_2026_03_15_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_15
- ADD CONSTRAINT messages_2026_03_15_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: subscription pk_subscription; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.subscription
- ADD CONSTRAINT pk_subscription PRIMARY KEY (id);
-
-
---
--- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.schema_migrations
- ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: buckets_analytics buckets_analytics_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.buckets_analytics
- ADD CONSTRAINT buckets_analytics_pkey PRIMARY KEY (id);
-
-
---
--- Name: buckets buckets_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.buckets
- ADD CONSTRAINT buckets_pkey PRIMARY KEY (id);
-
-
---
--- Name: buckets_vectors buckets_vectors_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.buckets_vectors
- ADD CONSTRAINT buckets_vectors_pkey PRIMARY KEY (id);
-
-
---
--- Name: iceberg_namespaces iceberg_namespaces_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_namespaces
- ADD CONSTRAINT iceberg_namespaces_pkey PRIMARY KEY (id);
-
-
---
--- Name: iceberg_tables iceberg_tables_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_tables
- ADD CONSTRAINT iceberg_tables_pkey PRIMARY KEY (id);
-
-
---
--- Name: migrations migrations_name_key; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.migrations
- ADD CONSTRAINT migrations_name_key UNIQUE (name);
-
-
---
--- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.migrations
- ADD CONSTRAINT migrations_pkey PRIMARY KEY (id);
-
-
---
--- Name: objects objects_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.objects
- ADD CONSTRAINT objects_pkey PRIMARY KEY (id);
-
-
---
--- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads_parts
- ADD CONSTRAINT s3_multipart_uploads_parts_pkey PRIMARY KEY (id);
-
-
---
--- Name: s3_multipart_uploads s3_multipart_uploads_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads
- ADD CONSTRAINT s3_multipart_uploads_pkey PRIMARY KEY (id);
-
-
---
--- Name: vector_indexes vector_indexes_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.vector_indexes
- ADD CONSTRAINT vector_indexes_pkey PRIMARY KEY (id);
-
-
---
--- Name: hooks hooks_pkey; Type: CONSTRAINT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER TABLE ONLY supabase_functions.hooks
- ADD CONSTRAINT hooks_pkey PRIMARY KEY (id);
-
-
---
--- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER TABLE ONLY supabase_functions.migrations
- ADD CONSTRAINT migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: extensions_tenant_external_id_index; Type: INDEX; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE INDEX extensions_tenant_external_id_index ON _realtime.extensions USING btree (tenant_external_id);
-
-
---
--- Name: extensions_tenant_external_id_type_index; Type: INDEX; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX extensions_tenant_external_id_type_index ON _realtime.extensions USING btree (tenant_external_id, type);
-
-
---
--- Name: tenants_external_id_index; Type: INDEX; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX tenants_external_id_index ON _realtime.tenants USING btree (external_id);
-
-
---
--- Name: audit_logs_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX audit_logs_instance_id_idx ON auth.audit_log_entries USING btree (instance_id);
-
-
---
--- Name: confirmation_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX confirmation_token_idx ON auth.users USING btree (confirmation_token) WHERE ((confirmation_token)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: email_change_token_current_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX email_change_token_current_idx ON auth.users USING btree (email_change_token_current) WHERE ((email_change_token_current)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: email_change_token_new_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX email_change_token_new_idx ON auth.users USING btree (email_change_token_new) WHERE ((email_change_token_new)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: factor_id_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX factor_id_created_at_idx ON auth.mfa_factors USING btree (user_id, created_at);
-
-
---
--- Name: flow_state_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX flow_state_created_at_idx ON auth.flow_state USING btree (created_at DESC);
-
-
---
--- Name: identities_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX identities_email_idx ON auth.identities USING btree (email text_pattern_ops);
-
-
---
--- Name: INDEX identities_email_idx; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON INDEX auth.identities_email_idx IS 'Auth: Ensures indexed queries on the email column';
-
-
---
--- Name: identities_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX identities_user_id_idx ON auth.identities USING btree (user_id);
-
-
---
--- Name: idx_auth_code; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX idx_auth_code ON auth.flow_state USING btree (auth_code);
-
-
---
--- Name: idx_oauth_client_states_created_at; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX idx_oauth_client_states_created_at ON auth.oauth_client_states USING btree (created_at);
-
-
---
--- Name: idx_user_id_auth_method; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX idx_user_id_auth_method ON auth.flow_state USING btree (user_id, authentication_method);
-
-
---
--- Name: mfa_challenge_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX mfa_challenge_created_at_idx ON auth.mfa_challenges USING btree (created_at DESC);
-
-
---
--- Name: mfa_factors_user_friendly_name_unique; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX mfa_factors_user_friendly_name_unique ON auth.mfa_factors USING btree (friendly_name, user_id) WHERE (TRIM(BOTH FROM friendly_name) <> ''::text);
-
-
---
--- Name: mfa_factors_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX mfa_factors_user_id_idx ON auth.mfa_factors USING btree (user_id);
-
-
---
--- Name: oauth_auth_pending_exp_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_auth_pending_exp_idx ON auth.oauth_authorizations USING btree (expires_at) WHERE (status = 'pending'::auth.oauth_authorization_status);
-
-
---
--- Name: oauth_clients_deleted_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_clients_deleted_at_idx ON auth.oauth_clients USING btree (deleted_at);
-
-
---
--- Name: oauth_consents_active_client_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_consents_active_client_idx ON auth.oauth_consents USING btree (client_id) WHERE (revoked_at IS NULL);
-
-
---
--- Name: oauth_consents_active_user_client_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_consents_active_user_client_idx ON auth.oauth_consents USING btree (user_id, client_id) WHERE (revoked_at IS NULL);
-
-
---
--- Name: oauth_consents_user_order_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_consents_user_order_idx ON auth.oauth_consents USING btree (user_id, granted_at DESC);
-
-
---
--- Name: one_time_tokens_relates_to_hash_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX one_time_tokens_relates_to_hash_idx ON auth.one_time_tokens USING hash (relates_to);
-
-
---
--- Name: one_time_tokens_token_hash_hash_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX one_time_tokens_token_hash_hash_idx ON auth.one_time_tokens USING hash (token_hash);
-
-
---
--- Name: one_time_tokens_user_id_token_type_key; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX one_time_tokens_user_id_token_type_key ON auth.one_time_tokens USING btree (user_id, token_type);
-
-
---
--- Name: reauthentication_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX reauthentication_token_idx ON auth.users USING btree (reauthentication_token) WHERE ((reauthentication_token)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: recovery_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX recovery_token_idx ON auth.users USING btree (recovery_token) WHERE ((recovery_token)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: refresh_tokens_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_instance_id_idx ON auth.refresh_tokens USING btree (instance_id);
-
-
---
--- Name: refresh_tokens_instance_id_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_instance_id_user_id_idx ON auth.refresh_tokens USING btree (instance_id, user_id);
-
-
---
--- Name: refresh_tokens_parent_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_parent_idx ON auth.refresh_tokens USING btree (parent);
-
-
---
--- Name: refresh_tokens_session_id_revoked_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_session_id_revoked_idx ON auth.refresh_tokens USING btree (session_id, revoked);
-
-
---
--- Name: refresh_tokens_updated_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_updated_at_idx ON auth.refresh_tokens USING btree (updated_at DESC);
-
-
---
--- Name: saml_providers_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_providers_sso_provider_id_idx ON auth.saml_providers USING btree (sso_provider_id);
-
-
---
--- Name: saml_relay_states_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_relay_states_created_at_idx ON auth.saml_relay_states USING btree (created_at DESC);
-
-
---
--- Name: saml_relay_states_for_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_relay_states_for_email_idx ON auth.saml_relay_states USING btree (for_email);
-
-
---
--- Name: saml_relay_states_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_relay_states_sso_provider_id_idx ON auth.saml_relay_states USING btree (sso_provider_id);
-
-
---
--- Name: sessions_not_after_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sessions_not_after_idx ON auth.sessions USING btree (not_after DESC);
-
-
---
--- Name: sessions_oauth_client_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sessions_oauth_client_id_idx ON auth.sessions USING btree (oauth_client_id);
-
-
---
--- Name: sessions_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sessions_user_id_idx ON auth.sessions USING btree (user_id);
-
-
---
--- Name: sso_domains_domain_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX sso_domains_domain_idx ON auth.sso_domains USING btree (lower(domain));
-
-
---
--- Name: sso_domains_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sso_domains_sso_provider_id_idx ON auth.sso_domains USING btree (sso_provider_id);
-
-
---
--- Name: sso_providers_resource_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX sso_providers_resource_id_idx ON auth.sso_providers USING btree (lower(resource_id));
-
-
---
--- Name: sso_providers_resource_id_pattern_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sso_providers_resource_id_pattern_idx ON auth.sso_providers USING btree (resource_id text_pattern_ops);
-
-
---
--- Name: unique_phone_factor_per_user; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX unique_phone_factor_per_user ON auth.mfa_factors USING btree (user_id, phone);
-
-
---
--- Name: user_id_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX user_id_created_at_idx ON auth.sessions USING btree (user_id, created_at);
-
-
---
--- Name: users_email_partial_key; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX users_email_partial_key ON auth.users USING btree (email) WHERE (is_sso_user = false);
-
-
---
--- Name: INDEX users_email_partial_key; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON INDEX auth.users_email_partial_key IS 'Auth: A partial unique index that applies only when is_sso_user is false';
-
-
---
--- Name: users_instance_id_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX users_instance_id_email_idx ON auth.users USING btree (instance_id, lower((email)::text));
-
-
---
--- Name: users_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX users_instance_id_idx ON auth.users USING btree (instance_id);
-
-
---
--- Name: users_is_anonymous_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX users_is_anonymous_idx ON auth.users USING btree (is_anonymous);
-
-
---
--- Name: agenda_bloqueios_owner_data_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_owner_data_idx ON public.agenda_bloqueios USING btree (owner_id, data_inicio, data_fim);
-
-
---
--- Name: agenda_bloqueios_owner_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_owner_id_idx ON public.agenda_bloqueios USING btree (owner_id);
-
-
---
--- Name: agenda_bloqueios_recorrente_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_recorrente_idx ON public.agenda_bloqueios USING btree (owner_id, dia_semana) WHERE (recorrente = true);
-
-
---
--- Name: agenda_bloqueios_tenant_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_tenant_id_idx ON public.agenda_bloqueios USING btree (tenant_id);
-
-
---
--- Name: agenda_configuracoes_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_configuracoes_tenant_idx ON public.agenda_configuracoes USING btree (tenant_id);
-
-
---
--- Name: agenda_configuracoes_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_configuracoes_tenant_owner_idx ON public.agenda_configuracoes USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_eventos_owner_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_owner_inicio_idx ON public.agenda_eventos USING btree (owner_id, inicio_em);
-
-
---
--- Name: agenda_eventos_owner_terapeuta_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_owner_terapeuta_inicio_idx ON public.agenda_eventos USING btree (owner_id, terapeuta_id, inicio_em);
-
-
---
--- Name: agenda_eventos_recurrence_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_recurrence_idx ON public.agenda_eventos USING btree (recurrence_id) WHERE (recurrence_id IS NOT NULL);
-
-
---
--- Name: agenda_eventos_tenant_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_tenant_inicio_idx ON public.agenda_eventos USING btree (tenant_id, inicio_em);
-
-
---
--- Name: agenda_eventos_tenant_owner_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_tenant_owner_inicio_idx ON public.agenda_eventos USING btree (tenant_id, owner_id, inicio_em);
-
-
---
--- Name: agenda_excecoes_owner_data_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_excecoes_owner_data_idx ON public.agenda_excecoes USING btree (owner_id, data);
-
-
---
--- Name: agenda_excecoes_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_excecoes_tenant_idx ON public.agenda_excecoes USING btree (tenant_id);
-
-
---
--- Name: agenda_excecoes_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_excecoes_tenant_owner_idx ON public.agenda_excecoes USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_online_slots_owner_weekday_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_online_slots_owner_weekday_idx ON public.agenda_online_slots USING btree (owner_id, weekday);
-
-
---
--- Name: agenda_online_slots_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_online_slots_tenant_idx ON public.agenda_online_slots USING btree (tenant_id);
-
-
---
--- Name: agenda_online_slots_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_online_slots_tenant_owner_idx ON public.agenda_online_slots USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_regras_semanais_owner_dia_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_regras_semanais_owner_dia_idx ON public.agenda_regras_semanais USING btree (owner_id, dia_semana);
-
-
---
--- Name: agenda_regras_semanais_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_regras_semanais_tenant_idx ON public.agenda_regras_semanais USING btree (tenant_id);
-
-
---
--- Name: agenda_regras_semanais_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_regras_semanais_tenant_owner_idx ON public.agenda_regras_semanais USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_slots_bloqueados_semanais_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_bloqueados_semanais_tenant_idx ON public.agenda_slots_bloqueados_semanais USING btree (tenant_id);
-
-
---
--- Name: agenda_slots_bloqueados_semanais_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_bloqueados_semanais_tenant_owner_idx ON public.agenda_slots_bloqueados_semanais USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_slots_regras_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_regras_tenant_idx ON public.agenda_slots_regras USING btree (tenant_id);
-
-
---
--- Name: agenda_slots_regras_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_regras_tenant_owner_idx ON public.agenda_slots_regras USING btree (tenant_id, owner_id);
-
-
---
--- Name: agendador_cfg_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_cfg_tenant_idx ON public.agendador_configuracoes USING btree (tenant_id);
-
-
---
--- Name: agendador_sol_data_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_sol_data_idx ON public.agendador_solicitacoes USING btree (data_solicitada, hora_solicitada);
-
-
---
--- Name: agendador_sol_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_sol_owner_idx ON public.agendador_solicitacoes USING btree (owner_id, status);
-
-
---
--- Name: agendador_sol_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_sol_tenant_idx ON public.agendador_solicitacoes USING btree (tenant_id);
-
-
---
--- Name: commitment_time_logs_calendar_event_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_time_logs_calendar_event_idx ON public.commitment_time_logs USING btree (calendar_event_id);
-
-
---
--- Name: commitment_time_logs_commitment_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_time_logs_commitment_idx ON public.commitment_time_logs USING btree (commitment_id, created_at DESC);
-
-
---
--- Name: commitment_time_logs_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_time_logs_tenant_idx ON public.commitment_time_logs USING btree (tenant_id, created_at DESC);
-
-
---
--- Name: determined_commitment_fields_commitment_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitment_fields_commitment_idx ON public.determined_commitment_fields USING btree (commitment_id, sort_order);
-
-
---
--- Name: determined_commitment_fields_key_uniq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX determined_commitment_fields_key_uniq ON public.determined_commitment_fields USING btree (commitment_id, key);
-
-
---
--- Name: determined_commitment_fields_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitment_fields_tenant_idx ON public.determined_commitment_fields USING btree (tenant_id);
-
-
---
--- Name: determined_commitments_active_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitments_active_idx ON public.determined_commitments USING btree (tenant_id, active);
-
-
---
--- Name: determined_commitments_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitments_tenant_idx ON public.determined_commitments USING btree (tenant_id);
-
-
---
--- Name: determined_commitments_tenant_name_uniq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX determined_commitments_tenant_name_uniq ON public.determined_commitments USING btree (tenant_id, lower(name));
-
-
---
--- Name: feriados_global_unique; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX feriados_global_unique ON public.feriados USING btree (data, nome) WHERE (tenant_id IS NULL);
-
-
---
--- Name: idx_agenda_eventos_determined_commitment_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_agenda_eventos_determined_commitment_id ON public.agenda_eventos USING btree (determined_commitment_id);
-
-
---
--- Name: idx_agenda_excecoes_owner_data; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_agenda_excecoes_owner_data ON public.agenda_excecoes USING btree (owner_id, data);
-
-
---
--- Name: idx_agenda_slots_regras_owner_dia; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_agenda_slots_regras_owner_dia ON public.agenda_slots_regras USING btree (owner_id, dia_semana);
-
-
---
--- Name: idx_intakes_converted_patient_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_converted_patient_id ON public.patient_intake_requests USING btree (converted_patient_id);
-
-
---
--- Name: idx_intakes_owner_cpf; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_owner_cpf ON public.patient_intake_requests USING btree (owner_id, cpf);
-
-
---
--- Name: idx_intakes_owner_created; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_owner_created ON public.patient_intake_requests USING btree (owner_id, created_at DESC);
-
-
---
--- Name: idx_intakes_owner_status_created; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_owner_status_created ON public.patient_intake_requests USING btree (owner_id, status, created_at DESC);
-
-
---
--- Name: idx_intakes_status_created; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_status_created ON public.patient_intake_requests USING btree (status, created_at DESC);
-
-
---
--- Name: idx_patient_group_patient_group_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_group_patient_group_id ON public.patient_group_patient USING btree (patient_group_id);
-
-
---
--- Name: idx_patient_groups_owner; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_groups_owner ON public.patient_groups USING btree (owner_id);
-
-
---
--- Name: idx_patient_groups_owner_system_nome; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_groups_owner_system_nome ON public.patient_groups USING btree (owner_id, is_system, nome);
-
-
---
--- Name: idx_patient_tags_owner; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_tags_owner ON public.patient_tags USING btree (owner_id);
-
-
---
--- Name: idx_patients_created_at; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_created_at ON public.patients USING btree (created_at DESC);
-
-
---
--- Name: idx_patients_last_attended; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_last_attended ON public.patients USING btree (last_attended_at DESC);
-
-
---
--- Name: idx_patients_owner_email_principal; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_owner_email_principal ON public.patients USING btree (owner_id, email_principal);
-
-
---
--- Name: idx_patients_owner_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_owner_id ON public.patients USING btree (owner_id);
-
-
---
--- Name: idx_patients_owner_nome; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_owner_nome ON public.patients USING btree (owner_id, nome_completo);
-
-
---
--- Name: idx_patients_responsible_member; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_responsible_member ON public.patients USING btree (responsible_member_id);
-
-
---
--- Name: idx_patients_status; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_status ON public.patients USING btree (status);
-
-
---
--- Name: idx_patients_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_tenant ON public.patients USING btree (tenant_id);
-
-
---
--- Name: idx_patients_tenant_email_norm; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_tenant_email_norm ON public.patients USING btree (tenant_id, lower(TRIM(BOTH FROM email_principal)));
-
-
---
--- Name: idx_pgp_group; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_pgp_group ON public.patient_group_patient USING btree (patient_group_id);
-
-
---
--- Name: idx_pgp_patient; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_pgp_patient ON public.patient_group_patient USING btree (patient_id);
-
-
---
--- Name: idx_ppt_patient; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_ppt_patient ON public.patient_patient_tag USING btree (patient_id);
-
-
---
--- Name: idx_ppt_tag; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_ppt_tag ON public.patient_patient_tag USING btree (tag_id);
-
-
---
--- Name: idx_slots_bloq_owner_dia; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_slots_bloq_owner_dia ON public.agenda_slots_bloqueados_semanais USING btree (owner_id, dia_semana);
-
-
---
--- Name: idx_subscription_intents_plan_interval; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_subscription_intents_plan_interval ON public.subscription_intents_legacy USING btree (plan_key, "interval");
-
-
---
--- Name: idx_subscription_intents_status; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_subscription_intents_status ON public.subscription_intents_legacy USING btree (status);
-
-
---
--- Name: idx_subscription_intents_user_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_subscription_intents_user_id ON public.subscription_intents_legacy USING btree (user_id);
-
-
---
--- Name: idx_tenant_features_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_tenant_features_tenant ON public.tenant_features USING btree (tenant_id);
-
-
---
--- Name: idx_tenant_invites_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_tenant_invites_tenant ON public.tenant_invites USING btree (tenant_id);
-
-
---
--- Name: idx_tenant_invites_token; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_tenant_invites_token ON public.tenant_invites USING btree (token);
-
-
---
--- Name: ix_plan_prices_plan; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ix_plan_prices_plan ON public.plan_prices USING btree (plan_id);
-
-
---
--- Name: ix_plan_public_bullets_plan; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ix_plan_public_bullets_plan ON public.plan_public_bullets USING btree (plan_id);
-
-
---
--- Name: ix_plan_public_sort; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ix_plan_public_sort ON public.plan_public USING btree (sort_order);
-
-
---
--- Name: patient_group_patient_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_group_patient_tenant_idx ON public.patient_group_patient USING btree (tenant_id);
-
-
---
--- Name: patient_groups_owner_nome_uniq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX patient_groups_owner_nome_uniq ON public.patient_groups USING btree (owner_id, nome);
-
-
---
--- Name: patient_groups_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_groups_tenant_idx ON public.patient_groups USING btree (tenant_id);
-
-
---
--- Name: patient_intake_owner_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_owner_id_idx ON public.patient_intake_requests USING btree (owner_id);
-
-
---
--- Name: patient_intake_requests_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_requests_tenant_idx ON public.patient_intake_requests USING btree (tenant_id);
-
-
---
--- Name: patient_intake_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_status_idx ON public.patient_intake_requests USING btree (status);
-
-
---
--- Name: patient_intake_token_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_token_idx ON public.patient_intake_requests USING btree (token);
-
-
---
--- Name: patient_invites_one_active_per_owner; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX patient_invites_one_active_per_owner ON public.patient_invites USING btree (owner_id) WHERE (active = true);
-
-
---
--- Name: patient_invites_owner_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_invites_owner_id_idx ON public.patient_invites USING btree (owner_id);
-
-
---
--- Name: patient_invites_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_invites_tenant_idx ON public.patient_invites USING btree (tenant_id);
-
-
---
--- Name: patient_invites_token_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_invites_token_idx ON public.patient_invites USING btree (token);
-
-
---
--- Name: patient_patient_tag_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_patient_tag_tenant_idx ON public.patient_patient_tag USING btree (tenant_id);
-
-
---
--- Name: patient_tags_owner_name_uq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX patient_tags_owner_name_uq ON public.patient_tags USING btree (owner_id, lower(nome));
-
-
---
--- Name: patient_tags_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_tags_tenant_idx ON public.patient_tags USING btree (tenant_id);
-
-
---
--- Name: payment_settings_tenant_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX payment_settings_tenant_id_idx ON public.payment_settings USING btree (tenant_id);
-
-
---
--- Name: ppt_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ppt_owner_idx ON public.patient_patient_tag USING btree (owner_id);
-
-
---
--- Name: ppt_patient_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ppt_patient_idx ON public.patient_patient_tag USING btree (patient_id);
-
-
---
--- Name: ppt_tag_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ppt_tag_idx ON public.patient_patient_tag USING btree (tag_id);
-
-
---
--- Name: professional_pricing_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX professional_pricing_tenant_idx ON public.professional_pricing USING btree (tenant_id);
-
-
---
--- Name: recurrence_exceptions_rule_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_exceptions_rule_idx ON public.recurrence_exceptions USING btree (recurrence_id);
-
-
---
--- Name: recurrence_exceptions_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_exceptions_tenant_idx ON public.recurrence_exceptions USING btree (tenant_id);
-
-
---
--- Name: recurrence_rules_active_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_active_idx ON public.recurrence_rules USING btree (owner_id, status) WHERE (status = 'ativo'::text);
-
-
---
--- Name: recurrence_rules_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_owner_idx ON public.recurrence_rules USING btree (owner_id);
-
-
---
--- Name: recurrence_rules_patient_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_patient_idx ON public.recurrence_rules USING btree (patient_id);
-
-
---
--- Name: recurrence_rules_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_tenant_idx ON public.recurrence_rules USING btree (tenant_id);
-
-
---
--- Name: saas_doc_votos_doc_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_doc_votos_doc_id_idx ON public.saas_doc_votos USING btree (doc_id);
-
-
---
--- Name: saas_doc_votos_user_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_doc_votos_user_id_idx ON public.saas_doc_votos USING btree (user_id);
-
-
---
--- Name: saas_docs_categoria_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_docs_categoria_idx ON public.saas_docs USING btree (categoria);
-
-
---
--- Name: saas_docs_exibir_no_faq_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_docs_exibir_no_faq_idx ON public.saas_docs USING btree (exibir_no_faq) WHERE (exibir_no_faq = true);
-
-
---
--- Name: saas_docs_path_ativo_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_docs_path_ativo_idx ON public.saas_docs USING btree (pagina_path, ativo);
-
-
---
--- Name: saas_faq_ativo_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_ativo_idx ON public.saas_faq USING btree (ativo);
-
-
---
--- Name: saas_faq_categoria_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_categoria_idx ON public.saas_faq USING btree (categoria);
-
-
---
--- Name: saas_faq_fts_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_fts_idx ON public.saas_faq USING gin (to_tsvector('portuguese'::regconfig, ((COALESCE(pergunta, ''::text) || ' '::text) || COALESCE(conteudo, ''::text))));
-
-
---
--- Name: saas_faq_itens_ativo_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_itens_ativo_idx ON public.saas_faq_itens USING btree (ativo);
-
-
---
--- Name: saas_faq_itens_doc_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_itens_doc_id_idx ON public.saas_faq_itens USING btree (doc_id);
-
-
---
--- Name: saas_faq_pagina_path_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_pagina_path_idx ON public.saas_faq USING btree (pagina_path);
-
-
---
--- Name: saas_faq_publico_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_publico_idx ON public.saas_faq USING btree (publico);
-
-
---
--- Name: saas_faq_votos_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_votos_idx ON public.saas_faq USING btree (votos DESC);
-
-
---
--- Name: sint_personal_created_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_personal_created_idx ON public.subscription_intents_personal USING btree (created_at DESC);
-
-
---
--- Name: sint_personal_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_personal_status_idx ON public.subscription_intents_personal USING btree (status);
-
-
---
--- Name: sint_tenant_created_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_tenant_created_idx ON public.subscription_intents_tenant USING btree (created_at DESC);
-
-
---
--- Name: sint_tenant_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_tenant_status_idx ON public.subscription_intents_tenant USING btree (status);
-
-
---
--- Name: sint_tenant_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_tenant_tenant_idx ON public.subscription_intents_tenant USING btree (tenant_id);
-
-
---
--- Name: subscription_events_created_at_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_created_at_idx ON public.subscription_events USING btree (created_at DESC);
-
-
---
--- Name: subscription_events_owner_ref_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_owner_ref_idx ON public.subscription_events USING btree (owner_type, owner_ref);
-
-
---
--- Name: subscription_events_sub_created_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_sub_created_idx ON public.subscription_events USING btree (subscription_id, created_at DESC);
-
-
---
--- Name: subscription_events_subscription_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_subscription_id_idx ON public.subscription_events USING btree (subscription_id);
-
-
---
--- Name: subscriptions_one_active_per_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscriptions_one_active_per_tenant ON public.subscriptions USING btree (tenant_id) WHERE (status = 'active'::text);
-
-
---
--- Name: subscriptions_one_active_per_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscriptions_one_active_per_user ON public.subscriptions USING btree (user_id) WHERE (status = 'active'::text);
-
-
---
--- Name: subscriptions_one_active_per_user_personal; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscriptions_one_active_per_user_personal ON public.subscriptions USING btree (user_id) WHERE ((tenant_id IS NULL) AND (status = 'active'::text));
-
-
---
--- Name: subscriptions_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_owner_idx ON public.subscriptions USING btree (user_id);
-
-
---
--- Name: subscriptions_plan_key_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_plan_key_idx ON public.subscriptions USING btree (plan_key);
-
-
---
--- Name: subscriptions_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_status_idx ON public.subscriptions USING btree (status);
-
-
---
--- Name: subscriptions_tenant_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_tenant_id_idx ON public.subscriptions USING btree (tenant_id);
-
-
---
--- Name: subscriptions_tenant_period_end_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_tenant_period_end_idx ON public.subscriptions USING btree (tenant_id, current_period_end);
-
-
---
--- Name: subscriptions_tenant_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_tenant_status_idx ON public.subscriptions USING btree (tenant_id, status);
-
-
---
--- Name: subscriptions_user_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_user_status_idx ON public.subscriptions USING btree (user_id, status, created_at DESC);
-
-
---
--- Name: support_sessions_expires_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX support_sessions_expires_idx ON public.support_sessions USING btree (expires_at);
-
-
---
--- Name: support_sessions_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX support_sessions_tenant_idx ON public.support_sessions USING btree (tenant_id);
-
-
---
--- Name: support_sessions_token_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX support_sessions_token_idx ON public.support_sessions USING btree (token);
-
-
---
--- Name: tenant_members_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX tenant_members_tenant_idx ON public.tenant_members USING btree (tenant_id);
-
-
---
--- Name: tenant_members_user_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX tenant_members_user_idx ON public.tenant_members USING btree (user_id);
-
-
---
--- Name: tenant_modules_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX tenant_modules_owner_idx ON public.tenant_modules USING btree (owner_id);
-
-
---
--- Name: unique_member_per_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX unique_member_per_tenant ON public.tenant_members USING btree (tenant_id, user_id);
-
-
---
--- Name: uq_patients_tenant_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_patients_tenant_user ON public.patients USING btree (tenant_id, user_id) WHERE (user_id IS NOT NULL);
-
-
---
--- Name: uq_plan_price_active; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_plan_price_active ON public.plan_prices USING btree (plan_id, "interval", currency) WHERE ((is_active = true) AND (active_to IS NULL));
-
-
---
--- Name: uq_plan_prices_active; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_plan_prices_active ON public.plan_prices USING btree (plan_id, "interval") WHERE (is_active = true);
-
-
---
--- Name: uq_subscriptions_active_by_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_subscriptions_active_by_tenant ON public.subscriptions USING btree (tenant_id) WHERE ((tenant_id IS NOT NULL) AND (status = 'active'::text));
-
-
---
--- Name: uq_subscriptions_active_personal_by_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_subscriptions_active_personal_by_user ON public.subscriptions USING btree (user_id) WHERE ((tenant_id IS NULL) AND (status = 'active'::text));
-
-
---
--- Name: uq_tenant_invites_pending; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_tenant_invites_pending ON public.tenant_invites USING btree (tenant_id, lower(email), role) WHERE ((accepted_at IS NULL) AND (revoked_at IS NULL));
-
-
---
--- Name: uq_tenant_members_tenant_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_tenant_members_tenant_user ON public.tenant_members USING btree (tenant_id, user_id);
-
-
---
--- Name: ux_subscriptions_active_per_personal_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX ux_subscriptions_active_per_personal_user ON public.subscriptions USING btree (user_id) WHERE ((status = 'active'::text) AND (tenant_id IS NULL));
-
-
---
--- Name: ux_subscriptions_active_per_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX ux_subscriptions_active_per_tenant ON public.subscriptions USING btree (tenant_id) WHERE ((status = 'active'::text) AND (tenant_id IS NOT NULL));
-
-
---
--- Name: ix_realtime_subscription_entity; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX ix_realtime_subscription_entity ON realtime.subscription USING btree (entity);
-
-
---
--- Name: messages_inserted_at_topic_index; Type: INDEX; Schema: realtime; Owner: supabase_realtime_admin
---
-
-CREATE INDEX messages_inserted_at_topic_index ON ONLY realtime.messages USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_09_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_09_inserted_at_topic_idx ON realtime.messages_2026_03_09 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_10_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_10_inserted_at_topic_idx ON realtime.messages_2026_03_10 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_11_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_11_inserted_at_topic_idx ON realtime.messages_2026_03_11 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_12_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_12_inserted_at_topic_idx ON realtime.messages_2026_03_12 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_13_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_13_inserted_at_topic_idx ON realtime.messages_2026_03_13 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_14_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_14_inserted_at_topic_idx ON realtime.messages_2026_03_14 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_15_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_15_inserted_at_topic_idx ON realtime.messages_2026_03_15 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: subscription_subscription_id_entity_filters_key; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscription_subscription_id_entity_filters_key ON realtime.subscription USING btree (subscription_id, entity, filters);
-
-
---
--- Name: bname; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX bname ON storage.buckets USING btree (name);
-
-
---
--- Name: bucketid_objname; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX bucketid_objname ON storage.objects USING btree (bucket_id, name);
-
-
---
--- Name: buckets_analytics_unique_name_idx; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX buckets_analytics_unique_name_idx ON storage.buckets_analytics USING btree (name) WHERE (deleted_at IS NULL);
-
-
---
--- Name: idx_iceberg_namespaces_bucket_id; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX idx_iceberg_namespaces_bucket_id ON storage.iceberg_namespaces USING btree (catalog_id, name);
-
-
---
--- Name: idx_iceberg_tables_location; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX idx_iceberg_tables_location ON storage.iceberg_tables USING btree (location);
-
-
---
--- Name: idx_iceberg_tables_namespace_id; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX idx_iceberg_tables_namespace_id ON storage.iceberg_tables USING btree (catalog_id, namespace_id, name);
-
-
---
--- Name: idx_multipart_uploads_list; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX idx_multipart_uploads_list ON storage.s3_multipart_uploads USING btree (bucket_id, key, created_at);
-
-
---
--- Name: idx_objects_bucket_id_name; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX idx_objects_bucket_id_name ON storage.objects USING btree (bucket_id, name COLLATE "C");
-
-
---
--- Name: idx_objects_bucket_id_name_lower; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX idx_objects_bucket_id_name_lower ON storage.objects USING btree (bucket_id, lower(name) COLLATE "C");
-
-
---
--- Name: name_prefix_search; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX name_prefix_search ON storage.objects USING btree (name text_pattern_ops);
-
-
---
--- Name: vector_indexes_name_bucket_id_idx; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX vector_indexes_name_bucket_id_idx ON storage.vector_indexes USING btree (name, bucket_id);
-
-
---
--- Name: supabase_functions_hooks_h_table_id_h_name_idx; Type: INDEX; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE INDEX supabase_functions_hooks_h_table_id_h_name_idx ON supabase_functions.hooks USING btree (hook_table_id, hook_name);
-
-
---
--- Name: supabase_functions_hooks_request_id_idx; Type: INDEX; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE INDEX supabase_functions_hooks_request_id_idx ON supabase_functions.hooks USING btree (request_id);
-
-
---
--- Name: messages_2026_03_09_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_09_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_09_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_09_pkey;
-
-
---
--- Name: messages_2026_03_10_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_10_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_10_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_10_pkey;
-
-
---
--- Name: messages_2026_03_11_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_11_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_11_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_11_pkey;
-
-
---
--- Name: messages_2026_03_12_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_12_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_12_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_12_pkey;
-
-
---
--- Name: messages_2026_03_13_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_13_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_13_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_13_pkey;
-
-
---
--- Name: messages_2026_03_14_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_14_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_14_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_14_pkey;
-
-
---
--- Name: messages_2026_03_15_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_15_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_15_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_15_pkey;
-
-
---
--- Name: users on_auth_user_created; Type: TRIGGER; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TRIGGER on_auth_user_created AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION public.handle_new_user();
-
-
---
--- Name: users trg_seed_patient_groups; Type: TRIGGER; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TRIGGER trg_seed_patient_groups AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION public.on_new_user_seed_patient_groups();
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER agenda_bloqueios_updated_at BEFORE UPDATE ON public.agenda_bloqueios FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agendador_configuracoes agendador_slug_trigger; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER agendador_slug_trigger BEFORE INSERT OR UPDATE ON public.agendador_configuracoes FOR EACH ROW EXECUTE FUNCTION public.agendador_gerar_slug();
-
-
---
--- Name: tenant_members prevent_saas_membership_trigger; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER prevent_saas_membership_trigger BEFORE INSERT ON public.tenant_members FOR EACH ROW EXECUTE FUNCTION public.prevent_saas_membership();
-
-
---
--- Name: agenda_configuracoes tg_agenda_configuracoes_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_configuracoes_updated_at BEFORE UPDATE ON public.agenda_configuracoes FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_eventos tg_agenda_eventos_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_eventos_updated_at BEFORE UPDATE ON public.agenda_eventos FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_excecoes tg_agenda_excecoes_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_excecoes_updated_at BEFORE UPDATE ON public.agenda_excecoes FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_regras_semanais tg_agenda_regras_semanais_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_regras_semanais_updated_at BEFORE UPDATE ON public.agenda_regras_semanais FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: recurrence_rules tg_recurrence_rules_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_recurrence_rules_updated_at BEFORE UPDATE ON public.recurrence_rules FOR EACH ROW EXECUTE FUNCTION public.set_updated_at_recurrence();
-
-
---
--- Name: plan_public tr_plan_public_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tr_plan_public_updated_at BEFORE UPDATE ON public.plan_public FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: profiles trg_account_type_immutable; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_account_type_immutable BEFORE UPDATE OF account_type ON public.profiles FOR EACH ROW EXECUTE FUNCTION public.guard_account_type_immutable();
-
-
---
--- Name: agenda_configuracoes trg_agenda_cfg_sync; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_cfg_sync BEFORE INSERT OR UPDATE ON public.agenda_configuracoes FOR EACH ROW EXECUTE FUNCTION public.agenda_cfg_sync();
-
-
---
--- Name: agenda_eventos trg_agenda_eventos_busy_mirror_del; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_eventos_busy_mirror_del AFTER DELETE ON public.agenda_eventos FOR EACH ROW WHEN (((old.mirror_of_event_id IS NULL) AND (old.tenant_id = old.owner_id))) EXECUTE FUNCTION public.sync_busy_mirror_agenda_eventos();
-
-
---
--- Name: agenda_eventos trg_agenda_eventos_busy_mirror_ins; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_eventos_busy_mirror_ins AFTER INSERT ON public.agenda_eventos FOR EACH ROW WHEN (((new.mirror_of_event_id IS NULL) AND (new.tenant_id = new.owner_id) AND (new.visibility_scope = ANY (ARRAY['busy_only'::text, 'private'::text])))) EXECUTE FUNCTION public.sync_busy_mirror_agenda_eventos();
-
-
---
--- Name: agenda_eventos trg_agenda_eventos_busy_mirror_upd; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_eventos_busy_mirror_upd AFTER UPDATE ON public.agenda_eventos FOR EACH ROW WHEN (((new.mirror_of_event_id IS NULL) AND (new.tenant_id = new.owner_id) AND ((new.visibility_scope IS DISTINCT FROM old.visibility_scope) OR (new.inicio_em IS DISTINCT FROM old.inicio_em) OR (new.fim_em IS DISTINCT FROM old.fim_em) OR (new.owner_id IS DISTINCT FROM old.owner_id) OR (new.tenant_id IS DISTINCT FROM old.tenant_id)))) EXECUTE FUNCTION public.sync_busy_mirror_agenda_eventos();
-
-
---
--- Name: agenda_regras_semanais trg_agenda_regras_semanais_no_overlap; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_regras_semanais_no_overlap BEFORE INSERT OR UPDATE ON public.agenda_regras_semanais FOR EACH ROW EXECUTE FUNCTION public.fn_agenda_regras_semanais_no_overlap();
-
-
---
--- Name: determined_commitment_fields trg_determined_commitment_fields_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_determined_commitment_fields_updated_at BEFORE UPDATE ON public.determined_commitment_fields FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: determined_commitments trg_determined_commitments_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_determined_commitments_updated_at BEFORE UPDATE ON public.determined_commitments FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: plans trg_no_change_core_plan_key; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_no_change_core_plan_key BEFORE UPDATE ON public.plans FOR EACH ROW EXECUTE FUNCTION public.guard_no_change_core_plan_key();
-
-
---
--- Name: plans trg_no_change_plan_target; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_no_change_plan_target BEFORE UPDATE ON public.plans FOR EACH ROW EXECUTE FUNCTION public.guard_no_change_plan_target();
-
-
---
--- Name: plans trg_no_delete_core_plans; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_no_delete_core_plans BEFORE DELETE ON public.plans FOR EACH ROW EXECUTE FUNCTION public.guard_no_delete_core_plans();
-
-
---
--- Name: tenant_members trg_patient_cannot_own_tenant; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_cannot_own_tenant BEFORE INSERT OR UPDATE ON public.tenant_members FOR EACH ROW EXECUTE FUNCTION public.guard_patient_cannot_own_tenant();
-
-
---
--- Name: patient_groups trg_patient_groups_set_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_groups_set_updated_at BEFORE UPDATE ON public.patient_groups FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patient_intake_requests trg_patient_intake_requests_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_intake_requests_updated_at BEFORE UPDATE ON public.patient_intake_requests FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patient_tags trg_patient_tags_set_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_tags_set_updated_at BEFORE UPDATE ON public.patient_tags FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patients trg_patients_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patients_updated_at BEFORE UPDATE ON public.patients FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patients trg_patients_validate_members; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patients_validate_members BEFORE INSERT OR UPDATE OF tenant_id, responsible_member_id, patient_scope, therapist_member_id ON public.patients FOR EACH ROW EXECUTE FUNCTION public.patients_validate_member_consistency();
-
-
---
--- Name: payment_settings trg_payment_settings_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_payment_settings_updated_at BEFORE UPDATE ON public.payment_settings FOR EACH ROW EXECUTE FUNCTION public.update_payment_settings_updated_at();
-
-
---
--- Name: patient_groups trg_prevent_promoting_to_system; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_prevent_promoting_to_system BEFORE UPDATE ON public.patient_groups FOR EACH ROW EXECUTE FUNCTION public.prevent_promoting_to_system();
-
-
---
--- Name: patient_groups trg_prevent_system_group_changes; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_prevent_system_group_changes BEFORE DELETE OR UPDATE ON public.patient_groups FOR EACH ROW EXECUTE FUNCTION public.prevent_system_group_changes();
-
-
---
--- Name: professional_pricing trg_professional_pricing_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_professional_pricing_updated_at BEFORE UPDATE ON public.professional_pricing FOR EACH ROW EXECUTE FUNCTION public.update_professional_pricing_updated_at();
-
-
---
--- Name: profiles trg_profiles_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_profiles_updated_at BEFORE UPDATE ON public.profiles FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: subscription_intents trg_subscription_intents_view_insert; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_subscription_intents_view_insert INSTEAD OF INSERT ON public.subscription_intents FOR EACH ROW EXECUTE FUNCTION public.subscription_intents_view_insert();
-
-
---
--- Name: subscriptions trg_subscriptions_validate_scope; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_subscriptions_validate_scope BEFORE INSERT OR UPDATE ON public.subscriptions FOR EACH ROW EXECUTE FUNCTION public.subscriptions_validate_scope();
-
-
---
--- Name: tenant_features trg_tenant_features_guard_with_plan; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_tenant_features_guard_with_plan BEFORE INSERT OR UPDATE ON public.tenant_features FOR EACH ROW EXECUTE FUNCTION public.tenant_features_guard_with_plan();
-
-
---
--- Name: tenant_features trg_tenant_features_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_tenant_features_updated_at BEFORE UPDATE ON public.tenant_features FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: tenants trg_tenant_kind_immutable; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_tenant_kind_immutable BEFORE UPDATE OF kind ON public.tenants FOR EACH ROW EXECUTE FUNCTION public.guard_tenant_kind_immutable();
-
-
---
--- Name: user_settings trg_user_settings_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_user_settings_updated_at BEFORE UPDATE ON public.user_settings FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: subscription tr_check_filters; Type: TRIGGER; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TRIGGER tr_check_filters BEFORE INSERT OR UPDATE ON realtime.subscription FOR EACH ROW EXECUTE FUNCTION realtime.subscription_check_filters();
-
-
---
--- Name: buckets enforce_bucket_name_length_trigger; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER enforce_bucket_name_length_trigger BEFORE INSERT OR UPDATE OF name ON storage.buckets FOR EACH ROW EXECUTE FUNCTION storage.enforce_bucket_name_length();
-
-
---
--- Name: buckets protect_buckets_delete; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER protect_buckets_delete BEFORE DELETE ON storage.buckets FOR EACH STATEMENT EXECUTE FUNCTION storage.protect_delete();
-
-
---
--- Name: objects protect_objects_delete; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER protect_objects_delete BEFORE DELETE ON storage.objects FOR EACH STATEMENT EXECUTE FUNCTION storage.protect_delete();
-
-
---
--- Name: objects update_objects_updated_at; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER update_objects_updated_at BEFORE UPDATE ON storage.objects FOR EACH ROW EXECUTE FUNCTION storage.update_updated_at_column();
-
-
---
--- Name: extensions extensions_tenant_external_id_fkey; Type: FK CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.extensions
- ADD CONSTRAINT extensions_tenant_external_id_fkey FOREIGN KEY (tenant_external_id) REFERENCES _realtime.tenants(external_id) ON DELETE CASCADE;
-
-
---
--- Name: identities identities_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.identities
- ADD CONSTRAINT identities_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: mfa_amr_claims mfa_amr_claims_session_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_amr_claims
- ADD CONSTRAINT mfa_amr_claims_session_id_fkey FOREIGN KEY (session_id) REFERENCES auth.sessions(id) ON DELETE CASCADE;
-
-
---
--- Name: mfa_challenges mfa_challenges_auth_factor_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_challenges
- ADD CONSTRAINT mfa_challenges_auth_factor_id_fkey FOREIGN KEY (factor_id) REFERENCES auth.mfa_factors(id) ON DELETE CASCADE;
-
-
---
--- Name: mfa_factors mfa_factors_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_factors
- ADD CONSTRAINT mfa_factors_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_authorizations oauth_authorizations_client_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_client_id_fkey FOREIGN KEY (client_id) REFERENCES auth.oauth_clients(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_authorizations oauth_authorizations_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_consents oauth_consents_client_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_client_id_fkey FOREIGN KEY (client_id) REFERENCES auth.oauth_clients(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_consents oauth_consents_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: one_time_tokens one_time_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.one_time_tokens
- ADD CONSTRAINT one_time_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_tokens refresh_tokens_session_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens
- ADD CONSTRAINT refresh_tokens_session_id_fkey FOREIGN KEY (session_id) REFERENCES auth.sessions(id) ON DELETE CASCADE;
-
-
---
--- Name: saml_providers saml_providers_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_providers
- ADD CONSTRAINT saml_providers_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE;
-
-
---
--- Name: saml_relay_states saml_relay_states_flow_state_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_relay_states
- ADD CONSTRAINT saml_relay_states_flow_state_id_fkey FOREIGN KEY (flow_state_id) REFERENCES auth.flow_state(id) ON DELETE CASCADE;
-
-
---
--- Name: saml_relay_states saml_relay_states_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_relay_states
- ADD CONSTRAINT saml_relay_states_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE;
-
-
---
--- Name: sessions sessions_oauth_client_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sessions
- ADD CONSTRAINT sessions_oauth_client_id_fkey FOREIGN KEY (oauth_client_id) REFERENCES auth.oauth_clients(id) ON DELETE CASCADE;
-
-
---
--- Name: sessions sessions_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sessions
- ADD CONSTRAINT sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: sso_domains sso_domains_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sso_domains
- ADD CONSTRAINT sso_domains_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_bloqueios
- ADD CONSTRAINT agenda_bloqueios_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_bloqueios
- ADD CONSTRAINT agenda_bloqueios_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_configuracoes
- ADD CONSTRAINT agenda_configuracoes_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_eventos agenda_eventos_determined_commitment_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_determined_commitment_fk FOREIGN KEY (determined_commitment_id) REFERENCES public.determined_commitments(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_patient_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_recurrence_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_recurrence_id_fkey FOREIGN KEY (recurrence_id) REFERENCES public.recurrence_rules(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_terapeuta_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_terapeuta_fk FOREIGN KEY (terapeuta_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_excecoes agenda_excecoes_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_excecoes
- ADD CONSTRAINT agenda_excecoes_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_online_slots agenda_online_slots_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_online_slots agenda_online_slots_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_regras_semanais
- ADD CONSTRAINT agenda_regras_semanais_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_bloqueados_semanais
- ADD CONSTRAINT agenda_slots_bloqueados_semanais_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_regras
- ADD CONSTRAINT agenda_slots_regras_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_configuracoes agendador_configuracoes_owner_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_configuracoes
- ADD CONSTRAINT agendador_configuracoes_owner_fk FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_configuracoes agendador_configuracoes_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_configuracoes
- ADD CONSTRAINT agendador_configuracoes_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_solicitacoes agendador_sol_owner_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_solicitacoes
- ADD CONSTRAINT agendador_sol_owner_fk FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_solicitacoes agendador_sol_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_solicitacoes
- ADD CONSTRAINT agendador_sol_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: commitment_time_logs commitment_time_logs_calendar_event_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_calendar_event_id_fkey FOREIGN KEY (calendar_event_id) REFERENCES public.agenda_eventos(id) ON DELETE SET NULL;
-
-
---
--- Name: commitment_time_logs commitment_time_logs_commitment_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_commitment_id_fkey FOREIGN KEY (commitment_id) REFERENCES public.determined_commitments(id) ON DELETE CASCADE;
-
-
---
--- Name: commitment_time_logs commitment_time_logs_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: determined_commitment_fields determined_commitment_fields_commitment_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitment_fields
- ADD CONSTRAINT determined_commitment_fields_commitment_id_fkey FOREIGN KEY (commitment_id) REFERENCES public.determined_commitments(id) ON DELETE CASCADE;
-
-
---
--- Name: determined_commitment_fields determined_commitment_fields_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitment_fields
- ADD CONSTRAINT determined_commitment_fields_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: determined_commitments determined_commitments_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitments
- ADD CONSTRAINT determined_commitments_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: feriados feriados_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: feriados feriados_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: module_features module_features_feature_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.module_features
- ADD CONSTRAINT module_features_feature_id_fkey FOREIGN KEY (feature_id) REFERENCES public.features(id) ON DELETE CASCADE;
-
-
---
--- Name: module_features module_features_module_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.module_features
- ADD CONSTRAINT module_features_module_id_fkey FOREIGN KEY (module_id) REFERENCES public.modules(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_group_patient patient_group_patient_patient_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_group_patient
- ADD CONSTRAINT patient_group_patient_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_group_patient patient_group_patient_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_group_patient
- ADD CONSTRAINT patient_group_patient_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_groups patient_groups_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_groups
- ADD CONSTRAINT patient_groups_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_intake_requests patient_intake_requests_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_intake_requests
- ADD CONSTRAINT patient_intake_requests_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_invites patient_invites_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_invites
- ADD CONSTRAINT patient_invites_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag patient_patient_tag_tag_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT patient_patient_tag_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES public.patient_tags(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag patient_patient_tag_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT patient_patient_tag_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_tags patient_tags_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_tags
- ADD CONSTRAINT patient_tags_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patients patients_responsible_member_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_responsible_member_id_fkey FOREIGN KEY (responsible_member_id) REFERENCES public.tenant_members(id) ON DELETE RESTRICT;
-
-
---
--- Name: patients patients_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patients patients_therapist_member_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_therapist_member_id_fkey FOREIGN KEY (therapist_member_id) REFERENCES public.tenant_members(id);
-
-
---
--- Name: patients patients_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: payment_settings payment_settings_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: payment_settings payment_settings_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_features plan_features_feature_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_features
- ADD CONSTRAINT plan_features_feature_id_fkey FOREIGN KEY (feature_id) REFERENCES public.features(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_features plan_features_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_features
- ADD CONSTRAINT plan_features_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_prices plan_prices_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_prices
- ADD CONSTRAINT plan_prices_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_public_bullets plan_public_bullets_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public_bullets
- ADD CONSTRAINT plan_public_bullets_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_public plan_public_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public
- ADD CONSTRAINT plan_public_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag ppt_patient_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT ppt_patient_fk FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag ppt_tag_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT ppt_tag_fk FOREIGN KEY (tag_id) REFERENCES public.patient_tags(id) ON DELETE CASCADE;
-
-
---
--- Name: professional_pricing professional_pricing_determined_commitment_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.professional_pricing
- ADD CONSTRAINT professional_pricing_determined_commitment_id_fkey FOREIGN KEY (determined_commitment_id) REFERENCES public.determined_commitments(id) ON DELETE SET NULL;
-
-
---
--- Name: professional_pricing professional_pricing_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.professional_pricing
- ADD CONSTRAINT professional_pricing_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: profiles profiles_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.profiles
- ADD CONSTRAINT profiles_id_fkey FOREIGN KEY (id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_agenda_evento_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_agenda_evento_id_fkey FOREIGN KEY (agenda_evento_id) REFERENCES public.agenda_eventos(id) ON DELETE SET NULL;
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_recurrence_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_recurrence_id_fkey FOREIGN KEY (recurrence_id) REFERENCES public.recurrence_rules(id) ON DELETE CASCADE;
-
-
---
--- Name: saas_admins saas_admins_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_admins
- ADD CONSTRAINT saas_admins_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: saas_doc_votos saas_doc_votos_doc_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_doc_id_fkey FOREIGN KEY (doc_id) REFERENCES public.saas_docs(id) ON DELETE CASCADE;
-
-
---
--- Name: saas_doc_votos saas_doc_votos_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: saas_faq_itens saas_faq_itens_doc_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_faq_itens
- ADD CONSTRAINT saas_faq_itens_doc_id_fkey FOREIGN KEY (doc_id) REFERENCES public.saas_docs(id) ON DELETE CASCADE;
-
-
---
--- Name: subscription_intents_personal sint_personal_subscription_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_personal
- ADD CONSTRAINT sint_personal_subscription_id_fkey FOREIGN KEY (subscription_id) REFERENCES public.subscriptions(id) ON DELETE SET NULL;
-
-
---
--- Name: subscription_intents_tenant sint_tenant_subscription_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_tenant
- ADD CONSTRAINT sint_tenant_subscription_id_fkey FOREIGN KEY (subscription_id) REFERENCES public.subscriptions(id) ON DELETE SET NULL;
-
-
---
--- Name: subscription_events subscription_events_subscription_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_events
- ADD CONSTRAINT subscription_events_subscription_id_fkey FOREIGN KEY (subscription_id) REFERENCES public.subscriptions(id) ON DELETE CASCADE;
-
-
---
--- Name: subscription_intents_personal subscription_intents_personal_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_personal
- ADD CONSTRAINT subscription_intents_personal_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE RESTRICT;
-
-
---
--- Name: subscription_intents_tenant subscription_intents_tenant_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_tenant
- ADD CONSTRAINT subscription_intents_tenant_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE RESTRICT;
-
-
---
--- Name: subscription_intents_legacy subscription_intents_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_legacy
- ADD CONSTRAINT subscription_intents_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: subscriptions subscriptions_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscriptions
- ADD CONSTRAINT subscriptions_owner_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: subscriptions subscriptions_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscriptions
- ADD CONSTRAINT subscriptions_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE RESTRICT;
-
-
---
--- Name: support_sessions support_sessions_admin_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_admin_fk FOREIGN KEY (admin_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: support_sessions support_sessions_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_features tenant_features_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_features
- ADD CONSTRAINT tenant_features_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_invites tenant_invites_accepted_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_accepted_by_fkey FOREIGN KEY (accepted_by) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: tenant_invites tenant_invites_invited_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_invited_by_fkey FOREIGN KEY (invited_by) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: tenant_invites tenant_invites_revoked_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_revoked_by_fkey FOREIGN KEY (revoked_by) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: tenant_invites tenant_invites_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_members tenant_members_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_members tenant_members_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_modules tenant_modules_module_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_module_id_fkey FOREIGN KEY (module_id) REFERENCES public.modules(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_modules tenant_modules_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: user_settings user_settings_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.user_settings
- ADD CONSTRAINT user_settings_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: iceberg_namespaces iceberg_namespaces_catalog_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_namespaces
- ADD CONSTRAINT iceberg_namespaces_catalog_id_fkey FOREIGN KEY (catalog_id) REFERENCES storage.buckets_analytics(id) ON DELETE CASCADE;
-
-
---
--- Name: iceberg_tables iceberg_tables_catalog_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_tables
- ADD CONSTRAINT iceberg_tables_catalog_id_fkey FOREIGN KEY (catalog_id) REFERENCES storage.buckets_analytics(id) ON DELETE CASCADE;
-
-
---
--- Name: iceberg_tables iceberg_tables_namespace_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_tables
- ADD CONSTRAINT iceberg_tables_namespace_id_fkey FOREIGN KEY (namespace_id) REFERENCES storage.iceberg_namespaces(id) ON DELETE CASCADE;
-
-
---
--- Name: objects objects_bucketId_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.objects
- ADD CONSTRAINT "objects_bucketId_fkey" FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id);
-
-
---
--- Name: s3_multipart_uploads s3_multipart_uploads_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads
- ADD CONSTRAINT s3_multipart_uploads_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id);
-
-
---
--- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads_parts
- ADD CONSTRAINT s3_multipart_uploads_parts_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id);
-
-
---
--- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_upload_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads_parts
- ADD CONSTRAINT s3_multipart_uploads_parts_upload_id_fkey FOREIGN KEY (upload_id) REFERENCES storage.s3_multipart_uploads(id) ON DELETE CASCADE;
-
-
---
--- Name: vector_indexes vector_indexes_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.vector_indexes
- ADD CONSTRAINT vector_indexes_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets_vectors(id);
-
-
---
--- Name: audit_log_entries; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.audit_log_entries ENABLE ROW LEVEL SECURITY;
-
---
--- Name: flow_state; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.flow_state ENABLE ROW LEVEL SECURITY;
-
---
--- Name: identities; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.identities ENABLE ROW LEVEL SECURITY;
-
---
--- Name: instances; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.instances ENABLE ROW LEVEL SECURITY;
-
---
--- Name: mfa_amr_claims; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.mfa_amr_claims ENABLE ROW LEVEL SECURITY;
-
---
--- Name: mfa_challenges; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.mfa_challenges ENABLE ROW LEVEL SECURITY;
-
---
--- Name: mfa_factors; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.mfa_factors ENABLE ROW LEVEL SECURITY;
-
---
--- Name: one_time_tokens; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.one_time_tokens ENABLE ROW LEVEL SECURITY;
-
---
--- Name: refresh_tokens; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.refresh_tokens ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saml_providers; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.saml_providers ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saml_relay_states; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.saml_relay_states ENABLE ROW LEVEL SECURITY;
-
---
--- Name: schema_migrations; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.schema_migrations ENABLE ROW LEVEL SECURITY;
-
---
--- Name: sessions; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.sessions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: sso_domains; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.sso_domains ENABLE ROW LEVEL SECURITY;
-
---
--- Name: sso_providers; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.sso_providers ENABLE ROW LEVEL SECURITY;
-
---
--- Name: users; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.users ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_bloqueios; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_bloqueios ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_configuracoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_configuracoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_configuracoes agenda_configuracoes_clinic_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_configuracoes_clinic_read ON public.agenda_configuracoes FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_clinic_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_configuracoes_clinic_write ON public.agenda_configuracoes USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_configuracoes_owner ON public.agenda_configuracoes USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_eventos; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_eventos ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_eventos agenda_eventos_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_delete ON public.agenda_eventos FOR DELETE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.delete'::text)));
-
-
---
--- Name: agenda_eventos agenda_eventos_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_insert ON public.agenda_eventos FOR INSERT WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.create'::text)));
-
-
---
--- Name: agenda_eventos agenda_eventos_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_owner_all ON public.agenda_eventos TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_eventos agenda_eventos_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_select ON public.agenda_eventos FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_eventos agenda_eventos_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_update ON public.agenda_eventos FOR UPDATE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_excecoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_excecoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_excecoes agenda_excecoes_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_excecoes_owner ON public.agenda_excecoes USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_excecoes agenda_excecoes_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_excecoes_select ON public.agenda_excecoes FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_excecoes agenda_excecoes_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_excecoes_write ON public.agenda_excecoes USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_online_slots; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_online_slots ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_online_slots agenda_online_slots_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_online_slots_owner ON public.agenda_online_slots USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_online_slots agenda_online_slots_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_online_slots_select ON public.agenda_online_slots FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_online_slots agenda_online_slots_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_online_slots_write ON public.agenda_online_slots USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_regras_semanais; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_regras_semanais ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_regras_semanais_owner ON public.agenda_regras_semanais USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_regras_semanais_select ON public.agenda_regras_semanais FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_regras_semanais_write ON public.agenda_regras_semanais USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_slots_bloqueados_semanais; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_slots_bloqueados_semanais ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_bloqueados_semanais_select ON public.agenda_slots_bloqueados_semanais FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_bloqueados_semanais_write ON public.agenda_slots_bloqueados_semanais USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_slots_regras; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_slots_regras ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_slots_regras agenda_slots_regras_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_regras_select ON public.agenda_slots_regras FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_regras_write ON public.agenda_slots_regras USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agendador_configuracoes agendador_cfg_public_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_cfg_public_read ON public.agendador_configuracoes FOR SELECT TO anon USING (((ativo = true) AND (link_slug IS NOT NULL)));
-
-
---
--- Name: agendador_configuracoes agendador_cfg_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_cfg_select ON public.agendador_configuracoes FOR SELECT USING ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_configuracoes agendador_cfg_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_cfg_write ON public.agendador_configuracoes USING ((auth.uid() = owner_id)) WITH CHECK ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_configuracoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agendador_configuracoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agendador_solicitacoes agendador_sol_owner_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_owner_select ON public.agendador_solicitacoes FOR SELECT USING ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_solicitacoes agendador_sol_owner_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_owner_write ON public.agendador_solicitacoes USING ((auth.uid() = owner_id)) WITH CHECK ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_solicitacoes agendador_sol_patient_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_patient_read ON public.agendador_solicitacoes FOR SELECT TO authenticated USING (((auth.uid() = user_id) OR (auth.uid() = owner_id)));
-
-
---
--- Name: agendador_solicitacoes agendador_sol_public_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_public_insert ON public.agendador_solicitacoes FOR INSERT TO anon WITH CHECK (true);
-
-
---
--- Name: agendador_solicitacoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agendador_solicitacoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_bloqueios bloqueios_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_delete ON public.agenda_bloqueios FOR DELETE TO authenticated USING ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_insert ON public.agenda_bloqueios FOR INSERT TO authenticated WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_select_clinic; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_select_clinic ON public.agenda_bloqueios FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE ((tenant_members.user_id = auth.uid()) AND (tenant_members.role = ANY (ARRAY['admin'::text, 'clinic_admin'::text, 'tenant_admin'::text, 'secretary'::text]))))));
-
-
---
--- Name: agenda_bloqueios bloqueios_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_select_own ON public.agenda_bloqueios FOR SELECT TO authenticated USING ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_update ON public.agenda_bloqueios FOR UPDATE TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: saas_docs clinic_admin_read_all_docs; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY clinic_admin_read_all_docs ON public.saas_docs FOR SELECT TO authenticated USING (((ativo = true) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = ANY (ARRAY['clinic_admin'::text, 'tenant_admin'::text])))))));
-
-
---
--- Name: commitment_time_logs; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.commitment_time_logs ENABLE ROW LEVEL SECURITY;
-
---
--- Name: commitment_time_logs ctl_delete_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_delete_for_active_member ON public.commitment_time_logs FOR DELETE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: commitment_time_logs ctl_insert_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_insert_for_active_member ON public.commitment_time_logs FOR INSERT TO authenticated WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: commitment_time_logs ctl_select_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_select_for_active_member ON public.commitment_time_logs FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: commitment_time_logs ctl_update_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_update_for_active_member ON public.commitment_time_logs FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitments dc_delete_custom_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_delete_custom_for_active_member ON public.determined_commitments FOR DELETE TO authenticated USING (((is_native = false) AND (EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))));
-
-
---
--- Name: determined_commitments dc_insert_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_insert_for_active_member ON public.determined_commitments FOR INSERT TO authenticated WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitments dc_select_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_select_for_active_member ON public.determined_commitments FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitments dc_update_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_update_for_active_member ON public.determined_commitments FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_delete_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_delete_for_active_member ON public.determined_commitment_fields FOR DELETE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_insert_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_insert_for_active_member ON public.determined_commitment_fields FOR INSERT TO authenticated WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_select_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_select_for_active_member ON public.determined_commitment_fields FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_update_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_update_for_active_member ON public.determined_commitment_fields FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: agenda_bloqueios delete own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "delete own" ON public.agenda_bloqueios FOR DELETE USING ((owner_id = auth.uid()));
-
-
---
--- Name: determined_commitment_fields; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.determined_commitment_fields ENABLE ROW LEVEL SECURITY;
-
---
--- Name: determined_commitments; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.determined_commitments ENABLE ROW LEVEL SECURITY;
-
---
--- Name: dev_user_credentials dev_creds_select_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dev_creds_select_saas_admin ON public.dev_user_credentials FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles p
- WHERE ((p.id = auth.uid()) AND (p.role = 'saas_admin'::text)))));
-
-
---
--- Name: dev_user_credentials dev_creds_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dev_creds_write_saas_admin ON public.dev_user_credentials TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles p
- WHERE ((p.id = auth.uid()) AND (p.role = 'saas_admin'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.profiles p
- WHERE ((p.id = auth.uid()) AND (p.role = 'saas_admin'::text)))));
-
-
---
--- Name: dev_user_credentials; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.dev_user_credentials ENABLE ROW LEVEL SECURITY;
-
---
--- Name: entitlements_invalidation ent_inv_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ent_inv_select_own ON public.entitlements_invalidation FOR SELECT USING (((owner_id = auth.uid()) OR public.is_saas_admin()));
-
-
---
--- Name: entitlements_invalidation ent_inv_update_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ent_inv_update_saas ON public.entitlements_invalidation FOR UPDATE USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: entitlements_invalidation ent_inv_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ent_inv_write_saas ON public.entitlements_invalidation FOR INSERT WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: entitlements_invalidation; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.entitlements_invalidation ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_faq faq_admin_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_admin_write ON public.saas_faq TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = ANY (ARRAY['saas_admin'::text, 'tenant_admin'::text, 'clinic_admin'::text]))))));
-
-
---
--- Name: saas_faq faq_auth_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_auth_read ON public.saas_faq FOR SELECT TO authenticated USING ((ativo = true));
-
-
---
--- Name: saas_faq_itens faq_itens_admin_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_itens_admin_write ON public.saas_faq_itens TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = ANY (ARRAY['saas_admin'::text, 'tenant_admin'::text, 'clinic_admin'::text]))))));
-
-
---
--- Name: saas_faq_itens faq_itens_auth_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_itens_auth_read ON public.saas_faq_itens FOR SELECT TO authenticated USING (((ativo = true) AND (EXISTS ( SELECT 1
- FROM public.saas_docs d
- WHERE ((d.id = saas_faq_itens.doc_id) AND (d.ativo = true))))));
-
-
---
--- Name: saas_faq faq_public_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_public_read ON public.saas_faq FOR SELECT USING (((publico = true) AND (ativo = true)));
-
-
---
--- Name: features; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.features ENABLE ROW LEVEL SECURITY;
-
---
--- Name: features features_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY features_read_authenticated ON public.features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: features features_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY features_write_saas_admin ON public.features TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: feriados; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.feriados ENABLE ROW LEVEL SECURITY;
-
---
--- Name: feriados feriados_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_delete ON public.feriados FOR DELETE USING ((owner_id = auth.uid()));
-
-
---
--- Name: feriados feriados_global_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_global_select ON public.feriados FOR SELECT USING ((tenant_id IS NULL));
-
-
---
--- Name: feriados feriados_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_insert ON public.feriados FOR INSERT WITH CHECK ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_saas_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_saas_delete ON public.feriados FOR DELETE USING ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_saas_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_saas_insert ON public.feriados FOR INSERT WITH CHECK ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_saas_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_saas_select ON public.feriados FOR SELECT USING ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_select ON public.feriados FOR SELECT USING ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid()))));
-
-
---
--- Name: agenda_bloqueios insert own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "insert own" ON public.agenda_bloqueios FOR INSERT WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: module_features; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.module_features ENABLE ROW LEVEL SECURITY;
-
---
--- Name: module_features module_features_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY module_features_read_authenticated ON public.module_features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: module_features module_features_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY module_features_write_saas_admin ON public.module_features TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: modules; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.modules ENABLE ROW LEVEL SECURITY;
-
---
--- Name: modules modules_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY modules_read_authenticated ON public.modules FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: modules modules_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY modules_write_saas_admin ON public.modules TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: owner_users; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.owner_users ENABLE ROW LEVEL SECURITY;
-
---
--- Name: owner_users owner_users: user can read own links; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "owner_users: user can read own links" ON public.owner_users FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: patient_group_patient; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_group_patient ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_group_patient patient_group_patient_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_group_patient_owner_all ON public.patient_group_patient TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.patients p
- WHERE ((p.id = patient_group_patient.patient_id) AND (p.owner_id = auth.uid()))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.patients p
- WHERE ((p.id = patient_group_patient.patient_id) AND (p.owner_id = auth.uid())))));
-
-
---
--- Name: patient_group_patient patient_group_patient_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_group_patient_select ON public.patient_group_patient FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_group_patient patient_group_patient_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_group_patient_write ON public.patient_group_patient USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_groups; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_groups ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_groups patient_groups_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_groups_owner_all ON public.patient_groups TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_groups patient_groups_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_groups_select ON public.patient_groups FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_groups patient_groups_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_groups_write ON public.patient_groups USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_intake_requests; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_intake_requests ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_intake_requests patient_intake_requests_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_intake_requests_owner_all ON public.patient_intake_requests TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_intake_requests patient_intake_requests_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_intake_requests_select ON public.patient_intake_requests FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_intake_requests patient_intake_requests_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_intake_requests_write ON public.patient_intake_requests USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_invites; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_invites ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_invites patient_invites_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_invites_owner_all ON public.patient_invites TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_invites patient_invites_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_invites_select ON public.patient_invites FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_invites patient_invites_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_invites_write ON public.patient_invites USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_patient_tag; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_patient_tag ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_patient_tag patient_patient_tag_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_patient_tag_owner_all ON public.patient_patient_tag TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_patient_tag patient_patient_tag_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_patient_tag_select ON public.patient_patient_tag FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_patient_tag patient_patient_tag_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_patient_tag_write ON public.patient_patient_tag USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_tags; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_tags ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_tags patient_tags_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_tags_owner_all ON public.patient_tags TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_tags patient_tags_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_tags_select ON public.patient_tags FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_tags patient_tags_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_tags_write ON public.patient_tags USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patients; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patients ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patients patients_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_delete ON public.patients FOR DELETE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.delete'::text)));
-
-
---
--- Name: patients patients_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_insert ON public.patients FOR INSERT WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.create'::text)));
-
-
---
--- Name: patients patients_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_owner_all ON public.patients TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patients patients_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_select ON public.patients FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patients patients_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_update ON public.patients FOR UPDATE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: payment_settings; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.payment_settings ENABLE ROW LEVEL SECURITY;
-
---
--- Name: payment_settings payment_settings: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "payment_settings: owner full access" ON public.payment_settings USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: plan_features; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.plan_features ENABLE ROW LEVEL SECURITY;
-
---
--- Name: plan_features plan_features_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plan_features_read_authenticated ON public.plan_features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plan_features plan_features_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plan_features_write_saas_admin ON public.plan_features TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: plans; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.plans ENABLE ROW LEVEL SECURITY;
-
---
--- Name: plans plans_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plans_read_authenticated ON public.plans FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plans plans_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plans_write_saas_admin ON public.plans TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: professional_pricing; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.professional_pricing ENABLE ROW LEVEL SECURITY;
-
---
--- Name: professional_pricing professional_pricing: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "professional_pricing: owner full access" ON public.professional_pricing USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: profiles; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;
-
---
--- Name: profiles profiles_insert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_insert_own ON public.profiles FOR INSERT WITH CHECK ((id = auth.uid()));
-
-
---
--- Name: profiles profiles_read_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_read_saas_admin ON public.profiles FOR SELECT USING (public.is_saas_admin());
-
-
---
--- Name: profiles profiles_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_select_own ON public.profiles FOR SELECT USING ((id = auth.uid()));
-
-
---
--- Name: profiles profiles_update_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_update_own ON public.profiles FOR UPDATE USING ((id = auth.uid())) WITH CHECK ((id = auth.uid()));
-
-
---
--- Name: features read features (auth); Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "read features (auth)" ON public.features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plan_features read plan_features (auth); Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "read plan_features (auth)" ON public.plan_features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plans read plans (auth); Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "read plans (auth)" ON public.plans FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: recurrence_exceptions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.recurrence_exceptions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: recurrence_exceptions recurrence_exceptions_tenant; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_exceptions_tenant ON public.recurrence_exceptions TO authenticated USING ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid())))) WITH CHECK ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid()))));
-
-
---
--- Name: recurrence_rules; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.recurrence_rules ENABLE ROW LEVEL SECURITY;
-
---
--- Name: recurrence_rules recurrence_rules_clinic_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_rules_clinic_read ON public.recurrence_rules FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: recurrence_rules recurrence_rules_clinic_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_rules_clinic_write ON public.recurrence_rules USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: recurrence_rules recurrence_rules_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_rules_owner ON public.recurrence_rules TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: subscription_intents_legacy saas_admin can read subscription_intents; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "saas_admin can read subscription_intents" ON public.subscription_intents_legacy FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.saas_admins a
- WHERE (a.user_id = auth.uid()))));
-
-
---
--- Name: subscription_intents_legacy saas_admin can update subscription_intents; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "saas_admin can update subscription_intents" ON public.subscription_intents_legacy FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.saas_admins a
- WHERE (a.user_id = auth.uid())))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.saas_admins a
- WHERE (a.user_id = auth.uid()))));
-
-
---
--- Name: saas_docs saas_admin_full_access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY saas_admin_full_access ON public.saas_docs TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid())))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: saas_admins; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_admins ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_admins saas_admins_select_self; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY saas_admins_select_self ON public.saas_admins FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: saas_doc_votos; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_doc_votos ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_docs; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_docs ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_faq; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_faq ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_faq_itens; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_faq_itens ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_bloqueios select own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "select own" ON public.agenda_bloqueios FOR SELECT USING ((owner_id = auth.uid()));
-
-
---
--- Name: subscription_events; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.subscription_events ENABLE ROW LEVEL SECURITY;
-
---
--- Name: subscription_events subscription_events_read_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_events_read_saas ON public.subscription_events FOR SELECT USING (public.is_saas_admin());
-
-
---
--- Name: subscription_events subscription_events_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_events_write_saas ON public.subscription_events FOR INSERT WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: subscription_intents_legacy subscription_intents_insert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_intents_insert_own ON public.subscription_intents_legacy FOR INSERT TO authenticated WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: subscription_intents_legacy; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.subscription_intents_legacy ENABLE ROW LEVEL SECURITY;
-
---
--- Name: subscription_intents_legacy subscription_intents_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_intents_select_own ON public.subscription_intents_legacy FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: subscriptions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.subscriptions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: subscriptions subscriptions read own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "subscriptions read own" ON public.subscriptions FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: subscriptions subscriptions: read if linked owner_users; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "subscriptions: read if linked owner_users" ON public.subscriptions FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.owner_users ou
- WHERE ((ou.owner_id = subscriptions.user_id) AND (ou.user_id = auth.uid())))));
-
-
---
--- Name: subscriptions subscriptions_insert_own_personal; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_insert_own_personal ON public.subscriptions FOR INSERT TO authenticated WITH CHECK (((user_id = auth.uid()) AND (tenant_id IS NULL)));
-
-
---
--- Name: subscriptions subscriptions_no_direct_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_no_direct_update ON public.subscriptions FOR UPDATE TO authenticated USING (false) WITH CHECK (false);
-
-
---
--- Name: subscriptions subscriptions_read_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_read_own ON public.subscriptions FOR SELECT TO authenticated USING (((user_id = auth.uid()) OR public.is_saas_admin()));
-
-
---
--- Name: subscriptions subscriptions_select_for_tenant_members; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_select_for_tenant_members ON public.subscriptions FOR SELECT TO authenticated USING (((tenant_id IS NOT NULL) AND (EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = subscriptions.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))));
-
-
---
--- Name: subscriptions subscriptions_select_own_personal; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_select_own_personal ON public.subscriptions FOR SELECT TO authenticated USING (((user_id = auth.uid()) AND (tenant_id IS NULL)));
-
-
---
--- Name: subscriptions subscriptions_update_only_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_update_only_saas_admin ON public.subscriptions FOR UPDATE TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: support_sessions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.support_sessions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: support_sessions support_sessions_saas_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY support_sessions_saas_delete ON public.support_sessions FOR DELETE USING (((auth.uid() = admin_id) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = 'saas_admin'::text))))));
-
-
---
--- Name: support_sessions support_sessions_saas_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY support_sessions_saas_insert ON public.support_sessions FOR INSERT WITH CHECK (((auth.uid() = admin_id) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = 'saas_admin'::text))))));
-
-
---
--- Name: support_sessions support_sessions_saas_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY support_sessions_saas_select ON public.support_sessions FOR SELECT USING (((auth.uid() = admin_id) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = 'saas_admin'::text))))));
-
-
---
--- Name: tenant_members; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.tenant_members ENABLE ROW LEVEL SECURITY;
-
---
--- Name: tenant_members tenant_members_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenant_members_write_saas ON public.tenant_members TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: tenant_modules; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.tenant_modules ENABLE ROW LEVEL SECURITY;
-
---
--- Name: tenant_modules tenant_modules_read_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenant_modules_read_own ON public.tenant_modules FOR SELECT TO authenticated USING (((owner_id = auth.uid()) OR public.is_saas_admin()));
-
-
---
--- Name: tenant_modules tenant_modules_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenant_modules_write_saas ON public.tenant_modules TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: tenants; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.tenants ENABLE ROW LEVEL SECURITY;
-
---
--- Name: tenants tenants_read_members; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenants_read_members ON public.tenants FOR SELECT TO authenticated USING ((public.is_saas_admin() OR (EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = tenants.id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))));
-
-
---
--- Name: tenants tenants_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenants_write_saas ON public.tenants TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: tenant_members tm_select_admin_all_members; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tm_select_admin_all_members ON public.tenant_members FOR SELECT TO authenticated USING (public.is_tenant_admin(tenant_id));
-
-
---
--- Name: tenant_members tm_select_own_membership; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tm_select_own_membership ON public.tenant_members FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios update own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "update own" ON public.agenda_bloqueios FOR UPDATE USING ((owner_id = auth.uid()));
-
-
---
--- Name: user_settings; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.user_settings ENABLE ROW LEVEL SECURITY;
-
---
--- Name: user_settings user_settings_insert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY user_settings_insert_own ON public.user_settings FOR INSERT WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: user_settings user_settings_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY user_settings_select_own ON public.user_settings FOR SELECT USING ((user_id = auth.uid()));
-
-
---
--- Name: user_settings user_settings_update_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY user_settings_update_own ON public.user_settings FOR UPDATE USING ((user_id = auth.uid())) WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: saas_docs users_read_usuario_docs; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY users_read_usuario_docs ON public.saas_docs FOR SELECT TO authenticated USING (((ativo = true) AND (tipo_acesso = 'usuario'::text)));
-
-
---
--- Name: saas_doc_votos votos_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY votos_select_own ON public.saas_doc_votos FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: saas_doc_votos votos_upsert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY votos_upsert_own ON public.saas_doc_votos TO authenticated USING ((user_id = auth.uid())) WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: messages; Type: ROW SECURITY; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER TABLE realtime.messages ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects agendador_storage_owner_delete; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_owner_delete ON storage.objects FOR DELETE TO authenticated USING (((bucket_id = 'agendador'::text) AND ((storage.foldername(name))[1] = (auth.uid())::text)));
-
-
---
--- Name: objects agendador_storage_owner_insert; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_owner_insert ON storage.objects FOR INSERT TO authenticated WITH CHECK (((bucket_id = 'agendador'::text) AND ((storage.foldername(name))[1] = (auth.uid())::text)));
-
-
---
--- Name: objects agendador_storage_owner_update; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_owner_update ON storage.objects FOR UPDATE TO authenticated USING (((bucket_id = 'agendador'::text) AND ((storage.foldername(name))[1] = (auth.uid())::text)));
-
-
---
--- Name: objects agendador_storage_public_read; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_public_read ON storage.objects FOR SELECT USING ((bucket_id = 'agendador'::text));
-
-
---
--- Name: objects avatars_delete_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_delete_own ON storage.objects FOR DELETE TO authenticated USING (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_delete_own_folder; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_delete_own_folder ON storage.objects FOR DELETE USING (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text))));
-
-
---
--- Name: objects avatars_insert_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_insert_own ON storage.objects FOR INSERT TO authenticated WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_insert_own_folder; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_insert_own_folder ON storage.objects FOR INSERT WITH CHECK (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text))));
-
-
---
--- Name: objects avatars_read; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_read ON storage.objects FOR SELECT USING ((bucket_id = 'avatars'::text));
-
-
---
--- Name: objects avatars_select_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_select_own ON storage.objects FOR SELECT TO authenticated USING (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_update_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_update_own ON storage.objects FOR UPDATE TO authenticated USING (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text)))) WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_update_own_folder; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_update_own_folder ON storage.objects FOR UPDATE USING (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text)))) WITH CHECK (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text))));
-
-
---
--- Name: buckets; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.buckets ENABLE ROW LEVEL SECURITY;
-
---
--- Name: buckets_analytics; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.buckets_analytics ENABLE ROW LEVEL SECURITY;
-
---
--- Name: buckets_vectors; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.buckets_vectors ENABLE ROW LEVEL SECURITY;
-
---
--- Name: iceberg_namespaces; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.iceberg_namespaces ENABLE ROW LEVEL SECURITY;
-
---
--- Name: iceberg_tables; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.iceberg_tables ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects intake_read_anon; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_read_anon ON storage.objects FOR SELECT TO anon USING (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: objects intake_read_public; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_read_public ON storage.objects FOR SELECT USING (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: objects intake_upload_anon; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_upload_anon ON storage.objects FOR INSERT TO anon WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: objects intake_upload_public; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_upload_public ON storage.objects FOR INSERT WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: migrations; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.migrations ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.objects ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects public_read; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY public_read ON storage.objects FOR SELECT USING ((bucket_id = 'saas-docs'::text));
-
-
---
--- Name: s3_multipart_uploads; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.s3_multipart_uploads ENABLE ROW LEVEL SECURITY;
-
---
--- Name: s3_multipart_uploads_parts; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.s3_multipart_uploads_parts ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects saas_admin_delete; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY saas_admin_delete ON storage.objects FOR DELETE TO authenticated USING (((bucket_id = 'saas-docs'::text) AND (EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid())))));
-
-
---
--- Name: objects saas_admin_upload; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY saas_admin_upload ON storage.objects FOR INSERT TO authenticated WITH CHECK (((bucket_id = 'saas-docs'::text) AND (EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid())))));
-
-
---
--- Name: vector_indexes; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.vector_indexes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: supabase_realtime; Type: PUBLICATION; Schema: -; Owner: postgres
---
-
-CREATE PUBLICATION supabase_realtime WITH (publish = 'insert, update, delete, truncate');
-
-
-ALTER PUBLICATION supabase_realtime OWNER TO postgres;
-
---
--- Name: SCHEMA auth; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA auth TO anon;
-GRANT USAGE ON SCHEMA auth TO authenticated;
-GRANT USAGE ON SCHEMA auth TO service_role;
-GRANT ALL ON SCHEMA auth TO supabase_auth_admin;
-GRANT ALL ON SCHEMA auth TO dashboard_user;
-GRANT USAGE ON SCHEMA auth TO postgres;
-
-
---
--- Name: SCHEMA extensions; Type: ACL; Schema: -; Owner: postgres
---
-
-GRANT USAGE ON SCHEMA extensions TO anon;
-GRANT USAGE ON SCHEMA extensions TO authenticated;
-GRANT USAGE ON SCHEMA extensions TO service_role;
-GRANT ALL ON SCHEMA extensions TO dashboard_user;
-
-
---
--- Name: SCHEMA net; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA net TO supabase_functions_admin;
-GRANT USAGE ON SCHEMA net TO postgres;
-GRANT USAGE ON SCHEMA net TO anon;
-GRANT USAGE ON SCHEMA net TO authenticated;
-GRANT USAGE ON SCHEMA net TO service_role;
-
-
---
--- Name: SCHEMA public; Type: ACL; Schema: -; Owner: pg_database_owner
---
-
-GRANT USAGE ON SCHEMA public TO postgres;
-GRANT USAGE ON SCHEMA public TO anon;
-GRANT USAGE ON SCHEMA public TO authenticated;
-GRANT USAGE ON SCHEMA public TO service_role;
-
-
---
--- Name: SCHEMA realtime; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA realtime TO postgres;
-GRANT USAGE ON SCHEMA realtime TO anon;
-GRANT USAGE ON SCHEMA realtime TO authenticated;
-GRANT USAGE ON SCHEMA realtime TO service_role;
-GRANT ALL ON SCHEMA realtime TO supabase_realtime_admin;
-
-
---
--- Name: SCHEMA storage; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA storage TO postgres WITH GRANT OPTION;
-GRANT USAGE ON SCHEMA storage TO anon;
-GRANT USAGE ON SCHEMA storage TO authenticated;
-GRANT USAGE ON SCHEMA storage TO service_role;
-GRANT ALL ON SCHEMA storage TO supabase_storage_admin WITH GRANT OPTION;
-GRANT ALL ON SCHEMA storage TO dashboard_user;
-
-
---
--- Name: SCHEMA supabase_functions; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA supabase_functions TO postgres;
-GRANT USAGE ON SCHEMA supabase_functions TO anon;
-GRANT USAGE ON SCHEMA supabase_functions TO authenticated;
-GRANT USAGE ON SCHEMA supabase_functions TO service_role;
-GRANT ALL ON SCHEMA supabase_functions TO supabase_functions_admin;
-
-
---
--- Name: SCHEMA vault; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA vault TO postgres WITH GRANT OPTION;
-GRANT USAGE ON SCHEMA vault TO service_role;
-
-
---
--- Name: FUNCTION citextin(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextin(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.citextin(cstring) TO anon;
-GRANT ALL ON FUNCTION public.citextin(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.citextin(cstring) TO service_role;
-
-
---
--- Name: FUNCTION citextout(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citextrecv(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO postgres;
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO anon;
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO service_role;
-
-
---
--- Name: FUNCTION citextsend(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey16_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey16_out(public.gbtreekey16); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey2_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey2_out(public.gbtreekey2); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey32_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey32_out(public.gbtreekey32); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey4_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey4_out(public.gbtreekey4); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey8_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey8_out(public.gbtreekey8); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey_var_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey_var_out(public.gbtreekey_var); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_out(public.gtrgm); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO service_role;
-
-
---
--- Name: FUNCTION citext(boolean); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext(boolean) TO postgres;
-GRANT ALL ON FUNCTION public.citext(boolean) TO anon;
-GRANT ALL ON FUNCTION public.citext(boolean) TO authenticated;
-GRANT ALL ON FUNCTION public.citext(boolean) TO service_role;
-
-
---
--- Name: FUNCTION citext(character); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext(character) TO postgres;
-GRANT ALL ON FUNCTION public.citext(character) TO anon;
-GRANT ALL ON FUNCTION public.citext(character) TO authenticated;
-GRANT ALL ON FUNCTION public.citext(character) TO service_role;
-
-
---
--- Name: FUNCTION citext(inet); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext(inet) TO postgres;
-GRANT ALL ON FUNCTION public.citext(inet) TO anon;
-GRANT ALL ON FUNCTION public.citext(inet) TO authenticated;
-GRANT ALL ON FUNCTION public.citext(inet) TO service_role;
-
-
---
--- Name: FUNCTION email(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.email() TO dashboard_user;
-
-
---
--- Name: FUNCTION jwt(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.jwt() TO postgres;
-GRANT ALL ON FUNCTION auth.jwt() TO dashboard_user;
-
-
---
--- Name: FUNCTION role(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.role() TO dashboard_user;
-
-
---
--- Name: FUNCTION uid(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.uid() TO dashboard_user;
-
-
---
--- Name: FUNCTION armor(bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.armor(bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.armor(bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION armor(bytea, text[], text[]); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.armor(bytea, text[], text[]) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.armor(bytea, text[], text[]) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION crypt(text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.crypt(text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.crypt(text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION dearmor(text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.dearmor(text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.dearmor(text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION decrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.decrypt(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.decrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION decrypt_iv(bytea, bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.decrypt_iv(bytea, bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.decrypt_iv(bytea, bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION digest(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.digest(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.digest(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION digest(text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.digest(text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.digest(text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION encrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.encrypt(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.encrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION encrypt_iv(bytea, bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.encrypt_iv(bytea, bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.encrypt_iv(bytea, bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_random_bytes(integer); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_random_bytes(integer) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_random_bytes(integer) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_random_uuid(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_random_uuid() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_random_uuid() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_salt(text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_salt(text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_salt(text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_salt(text, integer); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_salt(text, integer) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_salt(text, integer) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION grant_pg_cron_access(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION extensions.grant_pg_cron_access() FROM supabase_admin;
-GRANT ALL ON FUNCTION extensions.grant_pg_cron_access() TO supabase_admin WITH GRANT OPTION;
-GRANT ALL ON FUNCTION extensions.grant_pg_cron_access() TO dashboard_user;
-
-
---
--- Name: FUNCTION grant_pg_graphql_access(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.grant_pg_graphql_access() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION grant_pg_net_access(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION extensions.grant_pg_net_access() FROM supabase_admin;
-GRANT ALL ON FUNCTION extensions.grant_pg_net_access() TO supabase_admin WITH GRANT OPTION;
-GRANT ALL ON FUNCTION extensions.grant_pg_net_access() TO dashboard_user;
-
-
---
--- Name: FUNCTION hmac(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.hmac(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.hmac(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION hmac(text, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.hmac(text, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.hmac(text, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pg_stat_statements(showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT shared_blk_read_time double precision, OUT shared_blk_write_time double precision, OUT local_blk_read_time double precision, OUT local_blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision, OUT jit_deform_count bigint, OUT jit_deform_time double precision, OUT stats_since timestamp with time zone, OUT minmax_stats_since timestamp with time zone); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pg_stat_statements(showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT shared_blk_read_time double precision, OUT shared_blk_write_time double precision, OUT local_blk_read_time double precision, OUT local_blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision, OUT jit_deform_count bigint, OUT jit_deform_time double precision, OUT stats_since timestamp with time zone, OUT minmax_stats_since timestamp with time zone) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pg_stat_statements_info(OUT dealloc bigint, OUT stats_reset timestamp with time zone); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pg_stat_statements_info(OUT dealloc bigint, OUT stats_reset timestamp with time zone) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pg_stat_statements_reset(userid oid, dbid oid, queryid bigint, minmax_only boolean); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pg_stat_statements_reset(userid oid, dbid oid, queryid bigint, minmax_only boolean) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_armor_headers(text, OUT key text, OUT value text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_armor_headers(text, OUT key text, OUT value text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_armor_headers(text, OUT key text, OUT value text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_key_id(bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_key_id(bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_key_id(bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt(bytea, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt(bytea, bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt(text, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt(text, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt_bytea(bytea, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt_bytea(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt(bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt_bytea(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt_bytea(bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt(text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt(text, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt_bytea(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt_bytea(bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgrst_ddl_watch(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgrst_ddl_watch() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgrst_drop_watch(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgrst_drop_watch() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION set_graphql_placeholder(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.set_graphql_placeholder() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v1(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v1mc(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1mc() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1mc() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v3(namespace uuid, name text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v3(namespace uuid, name text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v3(namespace uuid, name text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v4(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v4() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v4() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v5(namespace uuid, name text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v5(namespace uuid, name text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v5(namespace uuid, name text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_nil(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_nil() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_nil() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_dns(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_dns() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_dns() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_oid(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_oid() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_oid() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_url(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_url() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_url() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_x500(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_x500() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_x500() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION graphql("operationName" text, query text, variables jsonb, extensions jsonb); Type: ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO postgres;
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO anon;
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO authenticated;
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO service_role;
-
-
---
--- Name: FUNCTION http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer); Type: ACL; Schema: net; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO postgres;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO anon;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO authenticated;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO service_role;
-
-
---
--- Name: FUNCTION http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer); Type: ACL; Schema: net; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO postgres;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO anon;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO authenticated;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO service_role;
-
-
---
--- Name: FUNCTION pg_reload_conf(); Type: ACL; Schema: pg_catalog; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION pg_catalog.pg_reload_conf() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION get_auth(p_usename text); Type: ACL; Schema: pgbouncer; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION pgbouncer.get_auth(p_usename text) FROM PUBLIC;
-GRANT ALL ON FUNCTION pgbouncer.get_auth(p_usename text) TO pgbouncer;
-
-
---
--- Name: FUNCTION __rls_ping(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.__rls_ping() TO postgres;
-GRANT ALL ON FUNCTION public.__rls_ping() TO anon;
-GRANT ALL ON FUNCTION public.__rls_ping() TO authenticated;
-GRANT ALL ON FUNCTION public.__rls_ping() TO service_role;
-
-
---
--- Name: TABLE subscriptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscriptions TO postgres;
-GRANT ALL ON TABLE public.subscriptions TO anon;
-GRANT ALL ON TABLE public.subscriptions TO authenticated;
-GRANT ALL ON TABLE public.subscriptions TO service_role;
-
-
---
--- Name: FUNCTION activate_subscription_from_intent(p_intent_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION admin_fix_plan_target(p_plan_key text, p_new_target text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) FROM PUBLIC;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO postgres;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO anon;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO authenticated;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO service_role;
-
-
---
--- Name: FUNCTION agenda_cfg_sync(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO postgres;
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO anon;
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO authenticated;
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO service_role;
-
-
---
--- Name: FUNCTION agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO postgres;
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO anon;
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO authenticated;
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO service_role;
-
-
---
--- Name: FUNCTION agendador_gerar_slug(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO postgres;
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO anon;
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO authenticated;
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO service_role;
-
-
---
--- Name: FUNCTION agendador_slots_disponiveis(p_slug text, p_data date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO postgres;
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO anon;
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO authenticated;
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO service_role;
-
-
---
--- Name: FUNCTION cancel_recurrence_from(p_recurrence_id uuid, p_from_date date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO postgres;
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO anon;
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO authenticated;
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO service_role;
-
-
---
--- Name: FUNCTION cancel_subscription(p_subscription_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO postgres;
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO anon;
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO service_role;
-
-
---
--- Name: FUNCTION cash_dist(money, money); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO postgres;
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO anon;
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO authenticated;
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO service_role;
-
-
---
--- Name: FUNCTION change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION citext_cmp(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_eq(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_ge(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_gt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_hash(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_hash_extended(public.citext, bigint); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO postgres;
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO anon;
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO service_role;
-
-
---
--- Name: FUNCTION citext_larger(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_le(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_lt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_ne(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_cmp(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_ge(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_gt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_le(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_lt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_smaller(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION create_clinic_tenant(p_name text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO postgres;
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO anon;
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO authenticated;
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO service_role;
-
-
---
--- Name: FUNCTION create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO postgres;
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO anon;
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO authenticated;
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO service_role;
-
-
---
--- Name: FUNCTION create_patient_intake_request_v2(p_token text, p_payload jsonb); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) FROM PUBLIC;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO postgres;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO anon;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO authenticated;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO service_role;
-
-
---
--- Name: FUNCTION create_support_session(p_tenant_id uuid, p_ttl_minutes integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO postgres;
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO anon;
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO authenticated;
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO service_role;
-
-
---
--- Name: FUNCTION current_member_id(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION current_member_role(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION date_dist(date, date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO postgres;
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO anon;
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO authenticated;
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO service_role;
-
-
---
--- Name: FUNCTION delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid); Type: ACL; Schema: public; Owner: postgres
---
-
-GRANT ALL ON FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION dev_list_auth_users(p_limit integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO postgres;
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO anon;
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO authenticated;
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO service_role;
-
-
---
--- Name: FUNCTION dev_list_custom_users(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.dev_list_custom_users() FROM PUBLIC;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO postgres;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO anon;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO authenticated;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO service_role;
-
-
---
--- Name: FUNCTION dev_list_intent_leads(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.dev_list_intent_leads() FROM PUBLIC;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO postgres;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO anon;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO authenticated;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO service_role;
-
-
---
--- Name: FUNCTION dev_public_debug_snapshot(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO postgres;
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO anon;
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO authenticated;
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO service_role;
-
-
---
--- Name: FUNCTION ensure_personal_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO anon;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO service_role;
-
-
---
--- Name: FUNCTION ensure_personal_tenant_for_user(p_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION faq_votar(faq_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION fix_all_subscription_mismatches(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO postgres;
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO anon;
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO authenticated;
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO service_role;
-
-
---
--- Name: FUNCTION float4_dist(real, real); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO postgres;
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO anon;
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO authenticated;
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO service_role;
-
-
---
--- Name: FUNCTION float8_dist(double precision, double precision); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO postgres;
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO anon;
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO authenticated;
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO service_role;
-
-
---
--- Name: FUNCTION fn_agenda_regras_semanais_no_overlap(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO postgres;
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO anon;
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO authenticated;
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_consistent(internal, bit, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_consistent(internal, boolean, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bpchar_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bpchar_consistent(internal, character, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_consistent(internal, bytea, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_consistent(internal, money, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_distance(internal, money, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_consistent(internal, date, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_distance(internal, date, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_consistent(internal, anyenum, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_consistent(internal, real, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_distance(internal, real, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_consistent(internal, double precision, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_distance(internal, double precision, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_consistent(internal, inet, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_consistent(internal, smallint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_distance(internal, smallint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_consistent(internal, integer, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_distance(internal, integer, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_consistent(internal, bigint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_distance(internal, bigint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_consistent(internal, interval, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_distance(internal, interval, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_consistent(internal, macaddr, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_consistent(internal, numeric, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_consistent(internal, oid, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_distance(internal, oid, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_consistent(internal, text, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_consistent(internal, time without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_distance(internal, time without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_timetz_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_tstz_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_consistent(internal, uuid, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_var_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_var_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION get_my_email(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.get_my_email() FROM PUBLIC;
-GRANT ALL ON FUNCTION public.get_my_email() TO postgres;
-GRANT ALL ON FUNCTION public.get_my_email() TO anon;
-GRANT ALL ON FUNCTION public.get_my_email() TO authenticated;
-GRANT ALL ON FUNCTION public.get_my_email() TO service_role;
-
-
---
--- Name: FUNCTION gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gin_extract_value_trgm(text, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO service_role;
-
-
---
--- Name: FUNCTION gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_consistent(internal, text, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_distance(internal, text, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_options(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_same(public.gtrgm, public.gtrgm, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION guard_account_type_immutable(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO postgres;
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO anon;
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO service_role;
-
-
---
--- Name: FUNCTION guard_locked_commitment(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO postgres;
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO anon;
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO service_role;
-
-
---
--- Name: FUNCTION guard_no_change_core_plan_key(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO postgres;
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO anon;
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO service_role;
-
-
---
--- Name: FUNCTION guard_no_change_plan_target(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO postgres;
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO anon;
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO service_role;
-
-
---
--- Name: FUNCTION guard_no_delete_core_plans(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO postgres;
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO anon;
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO service_role;
-
-
---
--- Name: FUNCTION guard_patient_cannot_own_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO anon;
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO service_role;
-
-
---
--- Name: FUNCTION guard_tenant_kind_immutable(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO postgres;
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO anon;
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO service_role;
-
-
---
--- Name: FUNCTION handle_new_user(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.handle_new_user() TO postgres;
-GRANT ALL ON FUNCTION public.handle_new_user() TO anon;
-GRANT ALL ON FUNCTION public.handle_new_user() TO authenticated;
-GRANT ALL ON FUNCTION public.handle_new_user() TO service_role;
-
-
---
--- Name: FUNCTION handle_new_user_create_personal_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO anon;
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO service_role;
-
-
---
--- Name: FUNCTION has_feature(p_owner_id uuid, p_feature_key text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO postgres;
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO anon;
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO authenticated;
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO service_role;
-
-
---
--- Name: FUNCTION int2_dist(smallint, smallint); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO postgres;
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO anon;
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO authenticated;
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO service_role;
-
-
---
--- Name: FUNCTION int4_dist(integer, integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO postgres;
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO anon;
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO authenticated;
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO service_role;
-
-
---
--- Name: FUNCTION int8_dist(bigint, bigint); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO postgres;
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO anon;
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO authenticated;
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO service_role;
-
-
---
--- Name: FUNCTION interval_dist(interval, interval); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO postgres;
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO anon;
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO authenticated;
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO service_role;
-
-
---
--- Name: FUNCTION is_clinic_tenant(_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION is_saas_admin(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_saas_admin() TO postgres;
-GRANT ALL ON FUNCTION public.is_saas_admin() TO anon;
-GRANT ALL ON FUNCTION public.is_saas_admin() TO authenticated;
-GRANT ALL ON FUNCTION public.is_saas_admin() TO service_role;
-
-
---
--- Name: FUNCTION is_tenant_admin(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION is_tenant_member(_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION is_therapist_tenant(_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION jwt_email(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.jwt_email() TO postgres;
-GRANT ALL ON FUNCTION public.jwt_email() TO anon;
-GRANT ALL ON FUNCTION public.jwt_email() TO authenticated;
-GRANT ALL ON FUNCTION public.jwt_email() TO service_role;
-
-
---
--- Name: FUNCTION my_tenants(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.my_tenants() TO postgres;
-GRANT ALL ON FUNCTION public.my_tenants() TO anon;
-GRANT ALL ON FUNCTION public.my_tenants() TO authenticated;
-GRANT ALL ON FUNCTION public.my_tenants() TO service_role;
-
-
---
--- Name: FUNCTION oid_dist(oid, oid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO postgres;
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO anon;
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO authenticated;
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO service_role;
-
-
---
--- Name: FUNCTION on_new_user_seed_patient_groups(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO postgres;
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO anon;
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO authenticated;
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO service_role;
-
-
---
--- Name: FUNCTION patients_validate_member_consistency(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO postgres;
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO anon;
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO authenticated;
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO service_role;
-
-
---
--- Name: FUNCTION patients_validate_responsible_member_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO anon;
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO service_role;
-
-
---
--- Name: FUNCTION prevent_promoting_to_system(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO postgres;
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO anon;
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO authenticated;
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO service_role;
-
-
---
--- Name: FUNCTION prevent_saas_membership(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO postgres;
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO anon;
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO authenticated;
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO service_role;
-
-
---
--- Name: FUNCTION prevent_system_group_changes(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO postgres;
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO anon;
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO authenticated;
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO service_role;
-
-
---
--- Name: FUNCTION provision_account_tenant(p_user_id uuid, p_kind text, p_name text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO postgres;
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO anon;
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO authenticated;
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO service_role;
-
-
---
--- Name: FUNCTION reactivate_subscription(p_subscription_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION rebuild_owner_entitlements(p_owner_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION regexp_match(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_match(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_matches(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_matches(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_replace(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_replace(public.citext, public.citext, text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_array(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_array(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_table(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_table(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION replace(public.citext, public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION revoke_support_session(p_token text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO postgres;
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO anon;
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO authenticated;
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO service_role;
-
-
---
--- Name: FUNCTION rotate_patient_invite_token(p_new_token text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO postgres;
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO anon;
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO authenticated;
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO service_role;
-
-
---
--- Name: FUNCTION saas_votar_doc(p_doc_id uuid, p_util boolean); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO postgres;
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO anon;
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO authenticated;
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO service_role;
-
-
---
--- Name: FUNCTION seed_determined_commitments(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION set_limit(real); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_limit(real) TO postgres;
-GRANT ALL ON FUNCTION public.set_limit(real) TO anon;
-GRANT ALL ON FUNCTION public.set_limit(real) TO authenticated;
-GRANT ALL ON FUNCTION public.set_limit(real) TO service_role;
-
-
---
--- Name: FUNCTION set_owner_id(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_owner_id() TO postgres;
-GRANT ALL ON FUNCTION public.set_owner_id() TO anon;
-GRANT ALL ON FUNCTION public.set_owner_id() TO authenticated;
-GRANT ALL ON FUNCTION public.set_owner_id() TO service_role;
-
-
---
--- Name: FUNCTION set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO postgres;
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO anon;
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO authenticated;
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO service_role;
-
-
---
--- Name: FUNCTION set_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.set_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.set_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.set_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION set_updated_at_recurrence(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO postgres;
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO anon;
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO authenticated;
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO service_role;
-
-
---
--- Name: FUNCTION show_limit(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.show_limit() TO postgres;
-GRANT ALL ON FUNCTION public.show_limit() TO anon;
-GRANT ALL ON FUNCTION public.show_limit() TO authenticated;
-GRANT ALL ON FUNCTION public.show_limit() TO service_role;
-
-
---
--- Name: FUNCTION show_trgm(text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.show_trgm(text) TO postgres;
-GRANT ALL ON FUNCTION public.show_trgm(text) TO anon;
-GRANT ALL ON FUNCTION public.show_trgm(text) TO authenticated;
-GRANT ALL ON FUNCTION public.show_trgm(text) TO service_role;
-
-
---
--- Name: FUNCTION similarity(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.similarity(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.similarity(text, text) TO anon;
-GRANT ALL ON FUNCTION public.similarity(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.similarity(text, text) TO service_role;
-
-
---
--- Name: FUNCTION similarity_dist(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO anon;
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO service_role;
-
-
---
--- Name: FUNCTION similarity_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION split_part(public.citext, public.citext, integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO postgres;
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO anon;
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO authenticated;
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO service_role;
-
-
---
--- Name: FUNCTION split_recurrence_at(p_recurrence_id uuid, p_from_date date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO postgres;
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO anon;
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO authenticated;
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_dist_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_dist_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strpos(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION subscription_intents_view_insert(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO postgres;
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO anon;
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO authenticated;
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO service_role;
-
-
---
--- Name: FUNCTION subscriptions_validate_scope(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO postgres;
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO anon;
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO authenticated;
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO service_role;
-
-
---
--- Name: FUNCTION sync_busy_mirror_agenda_eventos(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO postgres;
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO anon;
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO authenticated;
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO service_role;
-
-
---
--- Name: FUNCTION tenant_accept_invite(p_token uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO service_role;
-
-
---
--- Name: TABLE tenant_members; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_members TO postgres;
-GRANT SELECT,REFERENCES,TRIGGER,TRUNCATE,MAINTAIN ON TABLE public.tenant_members TO authenticated;
-GRANT ALL ON TABLE public.tenant_members TO service_role;
-
-
---
--- Name: FUNCTION tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_feature_allowed(p_tenant_id uuid, p_feature_key text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_feature_enabled(p_tenant_id uuid, p_feature_key text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_features_guard_with_plan(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO postgres;
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO anon;
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO service_role;
-
-
---
--- Name: FUNCTION tenant_has_feature(_tenant_id uuid, _feature text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) FROM PUBLIC;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO service_role;
-
-
---
--- Name: FUNCTION texticlike(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticlike(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION texticnlike(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticnlike(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION texticregexeq(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticregexeq(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION texticregexne(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticregexne(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION time_dist(time without time zone, time without time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO postgres;
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO anon;
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO service_role;
-
-
---
--- Name: FUNCTION toggle_plan(owner uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO postgres;
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO anon;
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO service_role;
-
-
---
--- Name: FUNCTION transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO postgres;
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO anon;
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO authenticated;
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO service_role;
-
-
---
--- Name: FUNCTION translate(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION ts_dist(timestamp without time zone, timestamp without time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO postgres;
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO anon;
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO service_role;
-
-
---
--- Name: FUNCTION tstz_dist(timestamp with time zone, timestamp with time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO postgres;
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO anon;
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO service_role;
-
-
---
--- Name: FUNCTION update_payment_settings_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION update_professional_pricing_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION user_has_feature(_user_id uuid, _feature text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO postgres;
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO anon;
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO authenticated;
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO service_role;
-
-
---
--- Name: FUNCTION validate_support_session(p_token text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO postgres;
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO anon;
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO authenticated;
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO service_role;
-
-
---
--- Name: FUNCTION whoami(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.whoami() TO postgres;
-GRANT ALL ON FUNCTION public.whoami() TO anon;
-GRANT ALL ON FUNCTION public.whoami() TO authenticated;
-GRANT ALL ON FUNCTION public.whoami() TO service_role;
-
-
---
--- Name: FUNCTION word_similarity(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_dist_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_dist_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION apply_rls(wal jsonb, max_record_bytes integer); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO postgres;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO anon;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO authenticated;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO service_role;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text) TO postgres;
-GRANT ALL ON FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text) TO dashboard_user;
-
-
---
--- Name: FUNCTION build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO postgres;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO anon;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO authenticated;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO service_role;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION "cast"(val text, type_ regtype); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO postgres;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO anon;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO authenticated;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO service_role;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO postgres;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO anon;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO authenticated;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO service_role;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO postgres;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO anon;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO authenticated;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO service_role;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO postgres;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO anon;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO authenticated;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO service_role;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION quote_wal2json(entity regclass); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO postgres;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO anon;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO authenticated;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO service_role;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION send(payload jsonb, event text, topic text, private boolean); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean) TO postgres;
-GRANT ALL ON FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean) TO dashboard_user;
-
-
---
--- Name: FUNCTION subscription_check_filters(); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO postgres;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO anon;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO authenticated;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO service_role;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION to_regrole(role_name text); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO postgres;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO anon;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO authenticated;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO service_role;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION topic(); Type: ACL; Schema: realtime; Owner: supabase_realtime_admin
---
-
-GRANT ALL ON FUNCTION realtime.topic() TO postgres;
-GRANT ALL ON FUNCTION realtime.topic() TO dashboard_user;
-
-
---
--- Name: FUNCTION http_request(); Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-REVOKE ALL ON FUNCTION supabase_functions.http_request() FROM PUBLIC;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO postgres;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO anon;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO authenticated;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO service_role;
-
-
---
--- Name: FUNCTION _crypto_aead_det_decrypt(message bytea, additional bytea, key_id bigint, context bytea, nonce bytea); Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION vault._crypto_aead_det_decrypt(message bytea, additional bytea, key_id bigint, context bytea, nonce bytea) TO postgres WITH GRANT OPTION;
-GRANT ALL ON FUNCTION vault._crypto_aead_det_decrypt(message bytea, additional bytea, key_id bigint, context bytea, nonce bytea) TO service_role;
-
-
---
--- Name: FUNCTION create_secret(new_secret text, new_name text, new_description text, new_key_id uuid); Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION vault.create_secret(new_secret text, new_name text, new_description text, new_key_id uuid) TO postgres WITH GRANT OPTION;
-GRANT ALL ON FUNCTION vault.create_secret(new_secret text, new_name text, new_description text, new_key_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION update_secret(secret_id uuid, new_secret text, new_name text, new_description text, new_key_id uuid); Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION vault.update_secret(secret_id uuid, new_secret text, new_name text, new_description text, new_key_id uuid) TO postgres WITH GRANT OPTION;
-GRANT ALL ON FUNCTION vault.update_secret(secret_id uuid, new_secret text, new_name text, new_description text, new_key_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION max(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.max(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.max(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.max(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.max(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION min(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.min(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.min(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.min(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.min(public.citext) TO service_role;
-
-
---
--- Name: TABLE audit_log_entries; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.audit_log_entries TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.audit_log_entries TO postgres;
-GRANT SELECT ON TABLE auth.audit_log_entries TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE flow_state; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.flow_state TO postgres;
-GRANT SELECT ON TABLE auth.flow_state TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.flow_state TO dashboard_user;
-
-
---
--- Name: TABLE identities; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.identities TO postgres;
-GRANT SELECT ON TABLE auth.identities TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.identities TO dashboard_user;
-
-
---
--- Name: TABLE instances; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.instances TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.instances TO postgres;
-GRANT SELECT ON TABLE auth.instances TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE mfa_amr_claims; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.mfa_amr_claims TO postgres;
-GRANT SELECT ON TABLE auth.mfa_amr_claims TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.mfa_amr_claims TO dashboard_user;
-
-
---
--- Name: TABLE mfa_challenges; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.mfa_challenges TO postgres;
-GRANT SELECT ON TABLE auth.mfa_challenges TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.mfa_challenges TO dashboard_user;
-
-
---
--- Name: TABLE mfa_factors; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.mfa_factors TO postgres;
-GRANT SELECT ON TABLE auth.mfa_factors TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.mfa_factors TO dashboard_user;
-
-
---
--- Name: TABLE oauth_authorizations; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_authorizations TO postgres;
-GRANT ALL ON TABLE auth.oauth_authorizations TO dashboard_user;
-
-
---
--- Name: TABLE oauth_client_states; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_client_states TO postgres;
-GRANT ALL ON TABLE auth.oauth_client_states TO dashboard_user;
-
-
---
--- Name: TABLE oauth_clients; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_clients TO postgres;
-GRANT ALL ON TABLE auth.oauth_clients TO dashboard_user;
-
-
---
--- Name: TABLE oauth_consents; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_consents TO postgres;
-GRANT ALL ON TABLE auth.oauth_consents TO dashboard_user;
-
-
---
--- Name: TABLE one_time_tokens; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.one_time_tokens TO postgres;
-GRANT SELECT ON TABLE auth.one_time_tokens TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.one_time_tokens TO dashboard_user;
-
-
---
--- Name: TABLE refresh_tokens; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.refresh_tokens TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.refresh_tokens TO postgres;
-GRANT SELECT ON TABLE auth.refresh_tokens TO postgres WITH GRANT OPTION;
-
-
---
--- Name: SEQUENCE refresh_tokens_id_seq; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON SEQUENCE auth.refresh_tokens_id_seq TO dashboard_user;
-GRANT ALL ON SEQUENCE auth.refresh_tokens_id_seq TO postgres;
-
-
---
--- Name: TABLE saml_providers; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.saml_providers TO postgres;
-GRANT SELECT ON TABLE auth.saml_providers TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.saml_providers TO dashboard_user;
-
-
---
--- Name: TABLE saml_relay_states; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.saml_relay_states TO postgres;
-GRANT SELECT ON TABLE auth.saml_relay_states TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.saml_relay_states TO dashboard_user;
-
-
---
--- Name: TABLE schema_migrations; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT SELECT ON TABLE auth.schema_migrations TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE sessions; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.sessions TO postgres;
-GRANT SELECT ON TABLE auth.sessions TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.sessions TO dashboard_user;
-
-
---
--- Name: TABLE sso_domains; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.sso_domains TO postgres;
-GRANT SELECT ON TABLE auth.sso_domains TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.sso_domains TO dashboard_user;
-
-
---
--- Name: TABLE sso_providers; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.sso_providers TO postgres;
-GRANT SELECT ON TABLE auth.sso_providers TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.sso_providers TO dashboard_user;
-
-
---
--- Name: TABLE users; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.users TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.users TO postgres;
-GRANT SELECT ON TABLE auth.users TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE pg_stat_statements; Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE extensions.pg_stat_statements TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE pg_stat_statements_info; Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE extensions.pg_stat_statements_info TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE agenda_bloqueios; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_bloqueios TO postgres;
-GRANT ALL ON TABLE public.agenda_bloqueios TO anon;
-GRANT ALL ON TABLE public.agenda_bloqueios TO authenticated;
-GRANT ALL ON TABLE public.agenda_bloqueios TO service_role;
-
-
---
--- Name: TABLE agenda_configuracoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_configuracoes TO postgres;
-GRANT ALL ON TABLE public.agenda_configuracoes TO anon;
-GRANT ALL ON TABLE public.agenda_configuracoes TO authenticated;
-GRANT ALL ON TABLE public.agenda_configuracoes TO service_role;
-
-
---
--- Name: TABLE agenda_eventos; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_eventos TO postgres;
-GRANT ALL ON TABLE public.agenda_eventos TO anon;
-GRANT ALL ON TABLE public.agenda_eventos TO authenticated;
-GRANT ALL ON TABLE public.agenda_eventos TO service_role;
-
-
---
--- Name: TABLE agenda_excecoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_excecoes TO postgres;
-GRANT ALL ON TABLE public.agenda_excecoes TO anon;
-GRANT ALL ON TABLE public.agenda_excecoes TO authenticated;
-GRANT ALL ON TABLE public.agenda_excecoes TO service_role;
-
-
---
--- Name: TABLE agenda_online_slots; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_online_slots TO postgres;
-GRANT ALL ON TABLE public.agenda_online_slots TO anon;
-GRANT ALL ON TABLE public.agenda_online_slots TO authenticated;
-GRANT ALL ON TABLE public.agenda_online_slots TO service_role;
-
-
---
--- Name: SEQUENCE agenda_online_slots_id_seq; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO postgres;
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO anon;
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO authenticated;
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO service_role;
-
-
---
--- Name: TABLE agenda_regras_semanais; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_regras_semanais TO postgres;
-GRANT ALL ON TABLE public.agenda_regras_semanais TO anon;
-GRANT ALL ON TABLE public.agenda_regras_semanais TO authenticated;
-GRANT ALL ON TABLE public.agenda_regras_semanais TO service_role;
-
-
---
--- Name: TABLE agenda_slots_bloqueados_semanais; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO postgres;
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO anon;
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO authenticated;
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO service_role;
-
-
---
--- Name: TABLE agenda_slots_regras; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_slots_regras TO postgres;
-GRANT ALL ON TABLE public.agenda_slots_regras TO anon;
-GRANT ALL ON TABLE public.agenda_slots_regras TO authenticated;
-GRANT ALL ON TABLE public.agenda_slots_regras TO service_role;
-
-
---
--- Name: TABLE agendador_configuracoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agendador_configuracoes TO postgres;
-GRANT ALL ON TABLE public.agendador_configuracoes TO anon;
-GRANT ALL ON TABLE public.agendador_configuracoes TO authenticated;
-GRANT ALL ON TABLE public.agendador_configuracoes TO service_role;
-
-
---
--- Name: TABLE agendador_solicitacoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agendador_solicitacoes TO postgres;
-GRANT ALL ON TABLE public.agendador_solicitacoes TO anon;
-GRANT ALL ON TABLE public.agendador_solicitacoes TO authenticated;
-GRANT ALL ON TABLE public.agendador_solicitacoes TO service_role;
-
-
---
--- Name: TABLE commitment_time_logs; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.commitment_time_logs TO postgres;
-GRANT ALL ON TABLE public.commitment_time_logs TO anon;
-GRANT ALL ON TABLE public.commitment_time_logs TO authenticated;
-GRANT ALL ON TABLE public.commitment_time_logs TO service_role;
-
-
---
--- Name: TABLE current_tenant_id; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.current_tenant_id TO postgres;
-GRANT ALL ON TABLE public.current_tenant_id TO anon;
-GRANT ALL ON TABLE public.current_tenant_id TO authenticated;
-GRANT ALL ON TABLE public.current_tenant_id TO service_role;
-
-
---
--- Name: TABLE determined_commitment_fields; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.determined_commitment_fields TO postgres;
-GRANT ALL ON TABLE public.determined_commitment_fields TO anon;
-GRANT ALL ON TABLE public.determined_commitment_fields TO authenticated;
-GRANT ALL ON TABLE public.determined_commitment_fields TO service_role;
-
-
---
--- Name: TABLE determined_commitments; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.determined_commitments TO postgres;
-GRANT ALL ON TABLE public.determined_commitments TO anon;
-GRANT ALL ON TABLE public.determined_commitments TO authenticated;
-GRANT ALL ON TABLE public.determined_commitments TO service_role;
-
-
---
--- Name: TABLE dev_user_credentials; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.dev_user_credentials TO postgres;
-GRANT ALL ON TABLE public.dev_user_credentials TO anon;
-GRANT ALL ON TABLE public.dev_user_credentials TO authenticated;
-GRANT ALL ON TABLE public.dev_user_credentials TO service_role;
-
-
---
--- Name: TABLE entitlements_invalidation; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.entitlements_invalidation TO postgres;
-GRANT ALL ON TABLE public.entitlements_invalidation TO anon;
-GRANT ALL ON TABLE public.entitlements_invalidation TO authenticated;
-GRANT ALL ON TABLE public.entitlements_invalidation TO service_role;
-
-
---
--- Name: TABLE features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.features TO postgres;
-GRANT ALL ON TABLE public.features TO anon;
-GRANT ALL ON TABLE public.features TO authenticated;
-GRANT ALL ON TABLE public.features TO service_role;
-
-
---
--- Name: TABLE feriados; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.feriados TO postgres;
-GRANT ALL ON TABLE public.feriados TO anon;
-GRANT ALL ON TABLE public.feriados TO authenticated;
-GRANT ALL ON TABLE public.feriados TO service_role;
-
-
---
--- Name: TABLE module_features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.module_features TO postgres;
-GRANT ALL ON TABLE public.module_features TO anon;
-GRANT ALL ON TABLE public.module_features TO authenticated;
-GRANT ALL ON TABLE public.module_features TO service_role;
-
-
---
--- Name: TABLE modules; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.modules TO postgres;
-GRANT ALL ON TABLE public.modules TO anon;
-GRANT ALL ON TABLE public.modules TO authenticated;
-GRANT ALL ON TABLE public.modules TO service_role;
-
-
---
--- Name: TABLE plan_features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_features TO postgres;
-GRANT ALL ON TABLE public.plan_features TO anon;
-GRANT ALL ON TABLE public.plan_features TO authenticated;
-GRANT ALL ON TABLE public.plan_features TO service_role;
-
-
---
--- Name: TABLE tenant_modules; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_modules TO postgres;
-GRANT ALL ON TABLE public.tenant_modules TO anon;
-GRANT ALL ON TABLE public.tenant_modules TO authenticated;
-GRANT ALL ON TABLE public.tenant_modules TO service_role;
-
-
---
--- Name: TABLE owner_feature_entitlements; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.owner_feature_entitlements TO postgres;
-GRANT ALL ON TABLE public.owner_feature_entitlements TO anon;
-GRANT ALL ON TABLE public.owner_feature_entitlements TO authenticated;
-GRANT ALL ON TABLE public.owner_feature_entitlements TO service_role;
-
-
---
--- Name: TABLE owner_users; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.owner_users TO postgres;
-GRANT ALL ON TABLE public.owner_users TO anon;
-GRANT ALL ON TABLE public.owner_users TO authenticated;
-GRANT ALL ON TABLE public.owner_users TO service_role;
-
-
---
--- Name: TABLE patient_group_patient; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_group_patient TO postgres;
-GRANT ALL ON TABLE public.patient_group_patient TO anon;
-GRANT ALL ON TABLE public.patient_group_patient TO authenticated;
-GRANT ALL ON TABLE public.patient_group_patient TO service_role;
-
-
---
--- Name: TABLE patient_groups; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_groups TO postgres;
-GRANT ALL ON TABLE public.patient_groups TO anon;
-GRANT ALL ON TABLE public.patient_groups TO authenticated;
-GRANT ALL ON TABLE public.patient_groups TO service_role;
-
-
---
--- Name: TABLE patient_intake_requests; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_intake_requests TO postgres;
-GRANT ALL ON TABLE public.patient_intake_requests TO authenticated;
-GRANT ALL ON TABLE public.patient_intake_requests TO service_role;
-
-
---
--- Name: TABLE patient_invites; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_invites TO postgres;
-GRANT ALL ON TABLE public.patient_invites TO authenticated;
-GRANT ALL ON TABLE public.patient_invites TO service_role;
-
-
---
--- Name: TABLE patient_patient_tag; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_patient_tag TO postgres;
-GRANT ALL ON TABLE public.patient_patient_tag TO anon;
-GRANT ALL ON TABLE public.patient_patient_tag TO authenticated;
-GRANT ALL ON TABLE public.patient_patient_tag TO service_role;
-
-
---
--- Name: TABLE patient_tags; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_tags TO postgres;
-GRANT ALL ON TABLE public.patient_tags TO anon;
-GRANT ALL ON TABLE public.patient_tags TO authenticated;
-GRANT ALL ON TABLE public.patient_tags TO service_role;
-
-
---
--- Name: TABLE patients; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patients TO postgres;
-GRANT ALL ON TABLE public.patients TO anon;
-GRANT ALL ON TABLE public.patients TO authenticated;
-GRANT ALL ON TABLE public.patients TO service_role;
-
-
---
--- Name: TABLE payment_settings; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.payment_settings TO postgres;
-GRANT ALL ON TABLE public.payment_settings TO anon;
-GRANT ALL ON TABLE public.payment_settings TO authenticated;
-GRANT ALL ON TABLE public.payment_settings TO service_role;
-
-
---
--- Name: TABLE plan_prices; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_prices TO postgres;
-GRANT ALL ON TABLE public.plan_prices TO anon;
-GRANT ALL ON TABLE public.plan_prices TO authenticated;
-GRANT ALL ON TABLE public.plan_prices TO service_role;
-
-
---
--- Name: TABLE plan_public; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_public TO postgres;
-GRANT ALL ON TABLE public.plan_public TO anon;
-GRANT ALL ON TABLE public.plan_public TO authenticated;
-GRANT ALL ON TABLE public.plan_public TO service_role;
-
-
---
--- Name: TABLE plan_public_bullets; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_public_bullets TO postgres;
-GRANT ALL ON TABLE public.plan_public_bullets TO anon;
-GRANT ALL ON TABLE public.plan_public_bullets TO authenticated;
-GRANT ALL ON TABLE public.plan_public_bullets TO service_role;
-
-
---
--- Name: TABLE plans; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plans TO postgres;
-GRANT ALL ON TABLE public.plans TO anon;
-GRANT ALL ON TABLE public.plans TO authenticated;
-GRANT ALL ON TABLE public.plans TO service_role;
-
-
---
--- Name: TABLE professional_pricing; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.professional_pricing TO postgres;
-GRANT ALL ON TABLE public.professional_pricing TO anon;
-GRANT ALL ON TABLE public.professional_pricing TO authenticated;
-GRANT ALL ON TABLE public.professional_pricing TO service_role;
-
-
---
--- Name: TABLE profiles; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.profiles TO postgres;
-GRANT ALL ON TABLE public.profiles TO anon;
-GRANT ALL ON TABLE public.profiles TO authenticated;
-GRANT ALL ON TABLE public.profiles TO service_role;
-
-
---
--- Name: TABLE recurrence_exceptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.recurrence_exceptions TO postgres;
-GRANT ALL ON TABLE public.recurrence_exceptions TO anon;
-GRANT ALL ON TABLE public.recurrence_exceptions TO authenticated;
-GRANT ALL ON TABLE public.recurrence_exceptions TO service_role;
-
-
---
--- Name: TABLE recurrence_rules; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.recurrence_rules TO postgres;
-GRANT ALL ON TABLE public.recurrence_rules TO anon;
-GRANT ALL ON TABLE public.recurrence_rules TO authenticated;
-GRANT ALL ON TABLE public.recurrence_rules TO service_role;
-
-
---
--- Name: TABLE saas_admins; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_admins TO postgres;
-GRANT ALL ON TABLE public.saas_admins TO anon;
-GRANT ALL ON TABLE public.saas_admins TO authenticated;
-GRANT ALL ON TABLE public.saas_admins TO service_role;
-
-
---
--- Name: TABLE saas_doc_votos; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_doc_votos TO postgres;
-GRANT ALL ON TABLE public.saas_doc_votos TO anon;
-GRANT ALL ON TABLE public.saas_doc_votos TO authenticated;
-GRANT ALL ON TABLE public.saas_doc_votos TO service_role;
-
-
---
--- Name: TABLE saas_docs; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_docs TO postgres;
-GRANT ALL ON TABLE public.saas_docs TO anon;
-GRANT ALL ON TABLE public.saas_docs TO authenticated;
-GRANT ALL ON TABLE public.saas_docs TO service_role;
-
-
---
--- Name: TABLE saas_faq; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_faq TO postgres;
-GRANT ALL ON TABLE public.saas_faq TO anon;
-GRANT ALL ON TABLE public.saas_faq TO authenticated;
-GRANT ALL ON TABLE public.saas_faq TO service_role;
-
-
---
--- Name: TABLE saas_faq_itens; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_faq_itens TO postgres;
-GRANT ALL ON TABLE public.saas_faq_itens TO anon;
-GRANT ALL ON TABLE public.saas_faq_itens TO authenticated;
-GRANT ALL ON TABLE public.saas_faq_itens TO service_role;
-
-
---
--- Name: TABLE subscription_events; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_events TO postgres;
-GRANT ALL ON TABLE public.subscription_events TO anon;
-GRANT ALL ON TABLE public.subscription_events TO authenticated;
-GRANT ALL ON TABLE public.subscription_events TO service_role;
-
-
---
--- Name: TABLE subscription_intents_personal; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents_personal TO postgres;
-GRANT ALL ON TABLE public.subscription_intents_personal TO anon;
-GRANT ALL ON TABLE public.subscription_intents_personal TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents_personal TO service_role;
-
-
---
--- Name: TABLE subscription_intents_tenant; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents_tenant TO postgres;
-GRANT ALL ON TABLE public.subscription_intents_tenant TO anon;
-GRANT ALL ON TABLE public.subscription_intents_tenant TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents_tenant TO service_role;
-
-
---
--- Name: TABLE subscription_intents; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents TO postgres;
-GRANT ALL ON TABLE public.subscription_intents TO anon;
-GRANT ALL ON TABLE public.subscription_intents TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents TO service_role;
-
-
---
--- Name: TABLE subscription_intents_legacy; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents_legacy TO postgres;
-GRANT ALL ON TABLE public.subscription_intents_legacy TO anon;
-GRANT ALL ON TABLE public.subscription_intents_legacy TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents_legacy TO service_role;
-
-
---
--- Name: TABLE support_sessions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.support_sessions TO postgres;
-GRANT ALL ON TABLE public.support_sessions TO anon;
-GRANT ALL ON TABLE public.support_sessions TO authenticated;
-GRANT ALL ON TABLE public.support_sessions TO service_role;
-
-
---
--- Name: TABLE tenant_feature_exceptions_log; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO postgres;
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO anon;
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO authenticated;
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO service_role;
-
-
---
--- Name: TABLE tenant_features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_features TO postgres;
-GRANT ALL ON TABLE public.tenant_features TO anon;
-GRANT ALL ON TABLE public.tenant_features TO authenticated;
-GRANT ALL ON TABLE public.tenant_features TO service_role;
-
-
---
--- Name: TABLE tenant_invites; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_invites TO postgres;
-GRANT ALL ON TABLE public.tenant_invites TO authenticated;
-GRANT ALL ON TABLE public.tenant_invites TO service_role;
-
-
---
--- Name: TABLE tenants; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenants TO postgres;
-GRANT ALL ON TABLE public.tenants TO anon;
-GRANT ALL ON TABLE public.tenants TO authenticated;
-GRANT ALL ON TABLE public.tenants TO service_role;
-
-
---
--- Name: TABLE user_settings; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.user_settings TO postgres;
-GRANT ALL ON TABLE public.user_settings TO anon;
-GRANT ALL ON TABLE public.user_settings TO authenticated;
-GRANT ALL ON TABLE public.user_settings TO service_role;
-
-
---
--- Name: TABLE v_auth_users_public; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_auth_users_public TO postgres;
-GRANT ALL ON TABLE public.v_auth_users_public TO anon;
-GRANT ALL ON TABLE public.v_auth_users_public TO authenticated;
-GRANT ALL ON TABLE public.v_auth_users_public TO service_role;
-
-
---
--- Name: TABLE v_commitment_totals; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_commitment_totals TO postgres;
-GRANT ALL ON TABLE public.v_commitment_totals TO anon;
-GRANT ALL ON TABLE public.v_commitment_totals TO authenticated;
-GRANT ALL ON TABLE public.v_commitment_totals TO service_role;
-
-
---
--- Name: TABLE v_patient_groups_with_counts; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO postgres;
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO anon;
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO authenticated;
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO service_role;
-
-
---
--- Name: TABLE v_plan_active_prices; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_plan_active_prices TO postgres;
-GRANT ALL ON TABLE public.v_plan_active_prices TO anon;
-GRANT ALL ON TABLE public.v_plan_active_prices TO authenticated;
-GRANT ALL ON TABLE public.v_plan_active_prices TO service_role;
-
-
---
--- Name: TABLE v_public_pricing; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_public_pricing TO postgres;
-GRANT ALL ON TABLE public.v_public_pricing TO anon;
-GRANT ALL ON TABLE public.v_public_pricing TO authenticated;
-GRANT ALL ON TABLE public.v_public_pricing TO service_role;
-
-
---
--- Name: TABLE v_subscription_feature_mismatch; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO postgres;
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO anon;
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO authenticated;
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO service_role;
-
-
---
--- Name: TABLE v_subscription_health; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_subscription_health TO postgres;
-GRANT ALL ON TABLE public.v_subscription_health TO anon;
-GRANT ALL ON TABLE public.v_subscription_health TO authenticated;
-GRANT ALL ON TABLE public.v_subscription_health TO service_role;
-
-
---
--- Name: TABLE v_subscription_health_v2; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO postgres;
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO anon;
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO authenticated;
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO service_role;
-
-
---
--- Name: TABLE v_tag_patient_counts; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tag_patient_counts TO postgres;
-GRANT ALL ON TABLE public.v_tag_patient_counts TO anon;
-GRANT ALL ON TABLE public.v_tag_patient_counts TO authenticated;
-GRANT ALL ON TABLE public.v_tag_patient_counts TO service_role;
-
-
---
--- Name: TABLE v_tenant_active_subscription; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO postgres;
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO anon;
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO service_role;
-
-
---
--- Name: TABLE v_tenant_entitlements; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_entitlements TO postgres;
-GRANT ALL ON TABLE public.v_tenant_entitlements TO anon;
-GRANT ALL ON TABLE public.v_tenant_entitlements TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_entitlements TO service_role;
-
-
---
--- Name: TABLE v_tenant_entitlements_full; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO postgres;
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO anon;
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO service_role;
-
-
---
--- Name: TABLE v_tenant_entitlements_json; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO postgres;
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO anon;
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO service_role;
-
-
---
--- Name: TABLE v_tenant_feature_exceptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO postgres;
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO anon;
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO service_role;
-
-
---
--- Name: TABLE v_tenant_feature_mismatch; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO postgres;
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO anon;
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO service_role;
-
-
---
--- Name: TABLE v_tenant_members_with_profiles; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO postgres;
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO anon;
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO service_role;
-
-
---
--- Name: TABLE v_tenant_people; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_people TO postgres;
-GRANT ALL ON TABLE public.v_tenant_people TO anon;
-GRANT ALL ON TABLE public.v_tenant_people TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_people TO service_role;
-
-
---
--- Name: TABLE v_tenant_staff; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_staff TO postgres;
-GRANT ALL ON TABLE public.v_tenant_staff TO anon;
-GRANT ALL ON TABLE public.v_tenant_staff TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_staff TO service_role;
-
-
---
--- Name: TABLE v_user_active_subscription; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_user_active_subscription TO postgres;
-GRANT ALL ON TABLE public.v_user_active_subscription TO anon;
-GRANT ALL ON TABLE public.v_user_active_subscription TO authenticated;
-GRANT ALL ON TABLE public.v_user_active_subscription TO service_role;
-
-
---
--- Name: TABLE v_user_entitlements; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_user_entitlements TO postgres;
-GRANT ALL ON TABLE public.v_user_entitlements TO anon;
-GRANT ALL ON TABLE public.v_user_entitlements TO authenticated;
-GRANT ALL ON TABLE public.v_user_entitlements TO service_role;
-
-
---
--- Name: TABLE messages; Type: ACL; Schema: realtime; Owner: supabase_realtime_admin
---
-
-GRANT ALL ON TABLE realtime.messages TO postgres;
-GRANT ALL ON TABLE realtime.messages TO dashboard_user;
-GRANT SELECT,INSERT,UPDATE ON TABLE realtime.messages TO anon;
-GRANT SELECT,INSERT,UPDATE ON TABLE realtime.messages TO authenticated;
-GRANT SELECT,INSERT,UPDATE ON TABLE realtime.messages TO service_role;
-
-
---
--- Name: TABLE messages_2026_03_09; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_09 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_09 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_10; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_10 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_10 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_11; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_11 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_11 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_12; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_12 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_12 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_13; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_13 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_13 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_14; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_14 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_14 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_15; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_15 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_15 TO dashboard_user;
-
-
---
--- Name: TABLE schema_migrations; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.schema_migrations TO postgres;
-GRANT ALL ON TABLE realtime.schema_migrations TO dashboard_user;
-GRANT SELECT ON TABLE realtime.schema_migrations TO anon;
-GRANT SELECT ON TABLE realtime.schema_migrations TO authenticated;
-GRANT SELECT ON TABLE realtime.schema_migrations TO service_role;
-GRANT ALL ON TABLE realtime.schema_migrations TO supabase_realtime_admin;
-
-
---
--- Name: TABLE subscription; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.subscription TO postgres;
-GRANT ALL ON TABLE realtime.subscription TO dashboard_user;
-GRANT SELECT ON TABLE realtime.subscription TO anon;
-GRANT SELECT ON TABLE realtime.subscription TO authenticated;
-GRANT SELECT ON TABLE realtime.subscription TO service_role;
-GRANT ALL ON TABLE realtime.subscription TO supabase_realtime_admin;
-
-
---
--- Name: SEQUENCE subscription_id_seq; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON SEQUENCE realtime.subscription_id_seq TO postgres;
-GRANT ALL ON SEQUENCE realtime.subscription_id_seq TO dashboard_user;
-GRANT USAGE ON SEQUENCE realtime.subscription_id_seq TO anon;
-GRANT USAGE ON SEQUENCE realtime.subscription_id_seq TO authenticated;
-GRANT USAGE ON SEQUENCE realtime.subscription_id_seq TO service_role;
-GRANT ALL ON SEQUENCE realtime.subscription_id_seq TO supabase_realtime_admin;
-
-
---
--- Name: TABLE buckets; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.buckets TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE storage.buckets TO service_role;
-GRANT ALL ON TABLE storage.buckets TO authenticated;
-GRANT ALL ON TABLE storage.buckets TO anon;
-
-
---
--- Name: TABLE buckets_analytics; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.buckets_analytics TO service_role;
-GRANT ALL ON TABLE storage.buckets_analytics TO authenticated;
-GRANT ALL ON TABLE storage.buckets_analytics TO anon;
-
-
---
--- Name: TABLE buckets_vectors; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT SELECT ON TABLE storage.buckets_vectors TO service_role;
-GRANT SELECT ON TABLE storage.buckets_vectors TO authenticated;
-GRANT SELECT ON TABLE storage.buckets_vectors TO anon;
-
-
---
--- Name: TABLE iceberg_namespaces; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.iceberg_namespaces TO service_role;
-GRANT SELECT ON TABLE storage.iceberg_namespaces TO authenticated;
-GRANT SELECT ON TABLE storage.iceberg_namespaces TO anon;
-
-
---
--- Name: TABLE iceberg_tables; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.iceberg_tables TO service_role;
-GRANT SELECT ON TABLE storage.iceberg_tables TO authenticated;
-GRANT SELECT ON TABLE storage.iceberg_tables TO anon;
-
-
---
--- Name: TABLE objects; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.objects TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE storage.objects TO service_role;
-GRANT ALL ON TABLE storage.objects TO authenticated;
-GRANT ALL ON TABLE storage.objects TO anon;
-
-
---
--- Name: TABLE s3_multipart_uploads; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.s3_multipart_uploads TO service_role;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads TO authenticated;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads TO anon;
-
-
---
--- Name: TABLE s3_multipart_uploads_parts; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.s3_multipart_uploads_parts TO service_role;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads_parts TO authenticated;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads_parts TO anon;
-
-
---
--- Name: TABLE vector_indexes; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT SELECT ON TABLE storage.vector_indexes TO service_role;
-GRANT SELECT ON TABLE storage.vector_indexes TO authenticated;
-GRANT SELECT ON TABLE storage.vector_indexes TO anon;
-
-
---
--- Name: TABLE hooks; Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-GRANT ALL ON TABLE supabase_functions.hooks TO postgres;
-GRANT ALL ON TABLE supabase_functions.hooks TO anon;
-GRANT ALL ON TABLE supabase_functions.hooks TO authenticated;
-GRANT ALL ON TABLE supabase_functions.hooks TO service_role;
-
-
---
--- Name: SEQUENCE hooks_id_seq; Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO postgres;
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO anon;
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO authenticated;
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO service_role;
-
-
---
--- Name: TABLE migrations; Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-GRANT ALL ON TABLE supabase_functions.migrations TO postgres;
-GRANT ALL ON TABLE supabase_functions.migrations TO anon;
-GRANT ALL ON TABLE supabase_functions.migrations TO authenticated;
-GRANT ALL ON TABLE supabase_functions.migrations TO service_role;
-
-
---
--- Name: TABLE secrets; Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT SELECT,REFERENCES,DELETE,TRUNCATE ON TABLE vault.secrets TO postgres WITH GRANT OPTION;
-GRANT SELECT,DELETE ON TABLE vault.secrets TO service_role;
-
-
---
--- Name: TABLE decrypted_secrets; Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT SELECT,REFERENCES,DELETE,TRUNCATE ON TABLE vault.decrypted_secrets TO postgres WITH GRANT OPTION;
-GRANT SELECT,DELETE ON TABLE vault.decrypted_secrets TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON SEQUENCES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON FUNCTIONS TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON TABLES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON SEQUENCES TO postgres WITH GRANT OPTION;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON FUNCTIONS TO postgres WITH GRANT OPTION;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON TABLES TO postgres WITH GRANT OPTION;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: public; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: public; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: public; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON SEQUENCES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON FUNCTIONS TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON TABLES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: storage; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: storage; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: storage; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: supabase_functions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: supabase_functions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: supabase_functions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: issue_graphql_placeholder; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_graphql_placeholder ON sql_drop
- WHEN TAG IN ('DROP EXTENSION')
- EXECUTE FUNCTION extensions.set_graphql_placeholder();
-
-
-ALTER EVENT TRIGGER issue_graphql_placeholder OWNER TO supabase_admin;
-
---
--- Name: issue_pg_cron_access; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_pg_cron_access ON ddl_command_end
- WHEN TAG IN ('CREATE EXTENSION')
- EXECUTE FUNCTION extensions.grant_pg_cron_access();
-
-
-ALTER EVENT TRIGGER issue_pg_cron_access OWNER TO supabase_admin;
-
---
--- Name: issue_pg_graphql_access; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_pg_graphql_access ON ddl_command_end
- WHEN TAG IN ('CREATE FUNCTION')
- EXECUTE FUNCTION extensions.grant_pg_graphql_access();
-
-
-ALTER EVENT TRIGGER issue_pg_graphql_access OWNER TO supabase_admin;
-
---
--- Name: issue_pg_net_access; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_pg_net_access ON ddl_command_end
- WHEN TAG IN ('CREATE EXTENSION')
- EXECUTE FUNCTION extensions.grant_pg_net_access();
-
-
-ALTER EVENT TRIGGER issue_pg_net_access OWNER TO supabase_admin;
-
---
--- Name: pgrst_ddl_watch; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER pgrst_ddl_watch ON ddl_command_end
- EXECUTE FUNCTION extensions.pgrst_ddl_watch();
-
-
-ALTER EVENT TRIGGER pgrst_ddl_watch OWNER TO supabase_admin;
-
---
--- Name: pgrst_drop_watch; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER pgrst_drop_watch ON sql_drop
- EXECUTE FUNCTION extensions.pgrst_drop_watch();
-
-
-ALTER EVENT TRIGGER pgrst_drop_watch OWNER TO supabase_admin;
-
---
--- PostgreSQL database dump complete
---
-
-\unrestrict 9bHVG2mCJlFIsM9VG52U52tbNZAgdYvv06RBgjMuM391ZzgcAGwa0O040leLtAl
-
diff --git a/DBS/2026-03-14/schema.sql b/DBS/2026-03-14/schema.sql
deleted file mode 100644
index 8bfb3c2..0000000
--- a/DBS/2026-03-14/schema.sql
+++ /dev/null
@@ -1,21773 +0,0 @@
---
--- PostgreSQL database dump
---
-
-\restrict yeY9H8V42lbJiLOWXgm32d7gqvrbttAXIQpuhmJAUW6CcywchAbLQWIAldNEVsZ
-
--- Dumped from database version 17.6
--- Dumped by pg_dump version 17.6
-
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET idle_in_transaction_session_timeout = 0;
-SET transaction_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = on;
-SELECT pg_catalog.set_config('search_path', '', false);
-SET check_function_bodies = false;
-SET xmloption = content;
-SET client_min_messages = warning;
-SET row_security = off;
-
---
--- Name: _realtime; Type: SCHEMA; Schema: -; Owner: postgres
---
-
-CREATE SCHEMA _realtime;
-
-
-ALTER SCHEMA _realtime OWNER TO postgres;
-
---
--- Name: auth; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA auth;
-
-
-ALTER SCHEMA auth OWNER TO supabase_admin;
-
---
--- Name: extensions; Type: SCHEMA; Schema: -; Owner: postgres
---
-
-CREATE SCHEMA extensions;
-
-
-ALTER SCHEMA extensions OWNER TO postgres;
-
---
--- Name: graphql; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA graphql;
-
-
-ALTER SCHEMA graphql OWNER TO supabase_admin;
-
---
--- Name: graphql_public; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA graphql_public;
-
-
-ALTER SCHEMA graphql_public OWNER TO supabase_admin;
-
---
--- Name: pg_net; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_net WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION pg_net; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_net IS 'Async HTTP';
-
-
---
--- Name: pgbouncer; Type: SCHEMA; Schema: -; Owner: pgbouncer
---
-
-CREATE SCHEMA pgbouncer;
-
-
-ALTER SCHEMA pgbouncer OWNER TO pgbouncer;
-
---
--- Name: realtime; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA realtime;
-
-
-ALTER SCHEMA realtime OWNER TO supabase_admin;
-
---
--- Name: storage; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA storage;
-
-
-ALTER SCHEMA storage OWNER TO supabase_admin;
-
---
--- Name: supabase_functions; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA supabase_functions;
-
-
-ALTER SCHEMA supabase_functions OWNER TO supabase_admin;
-
---
--- Name: vault; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA vault;
-
-
-ALTER SCHEMA vault OWNER TO supabase_admin;
-
---
--- Name: btree_gist; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS btree_gist WITH SCHEMA public;
-
-
---
--- Name: EXTENSION btree_gist; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION btree_gist IS 'support for indexing common datatypes in GiST';
-
-
---
--- Name: citext; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;
-
-
---
--- Name: EXTENSION citext; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION citext IS 'data type for case-insensitive character strings';
-
-
---
--- Name: pg_graphql; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_graphql WITH SCHEMA graphql;
-
-
---
--- Name: EXTENSION pg_graphql; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_graphql IS 'pg_graphql: GraphQL support';
-
-
---
--- Name: pg_stat_statements; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION pg_stat_statements; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_stat_statements IS 'track planning and execution statistics of all SQL statements executed';
-
-
---
--- Name: pg_trgm; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA public;
-
-
---
--- Name: EXTENSION pg_trgm; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_trgm IS 'text similarity measurement and index searching based on trigrams';
-
-
---
--- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';
-
-
---
--- Name: supabase_vault; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS supabase_vault WITH SCHEMA vault;
-
-
---
--- Name: EXTENSION supabase_vault; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION supabase_vault IS 'Supabase Vault Extension';
-
-
---
--- Name: uuid-ossp; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION "uuid-ossp"; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)';
-
-
---
--- Name: aal_level; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.aal_level AS ENUM (
- 'aal1',
- 'aal2',
- 'aal3'
-);
-
-
-ALTER TYPE auth.aal_level OWNER TO supabase_auth_admin;
-
---
--- Name: code_challenge_method; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.code_challenge_method AS ENUM (
- 's256',
- 'plain'
-);
-
-
-ALTER TYPE auth.code_challenge_method OWNER TO supabase_auth_admin;
-
---
--- Name: factor_status; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.factor_status AS ENUM (
- 'unverified',
- 'verified'
-);
-
-
-ALTER TYPE auth.factor_status OWNER TO supabase_auth_admin;
-
---
--- Name: factor_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.factor_type AS ENUM (
- 'totp',
- 'webauthn',
- 'phone'
-);
-
-
-ALTER TYPE auth.factor_type OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_authorization_status; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_authorization_status AS ENUM (
- 'pending',
- 'approved',
- 'denied',
- 'expired'
-);
-
-
-ALTER TYPE auth.oauth_authorization_status OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_client_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_client_type AS ENUM (
- 'public',
- 'confidential'
-);
-
-
-ALTER TYPE auth.oauth_client_type OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_registration_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_registration_type AS ENUM (
- 'dynamic',
- 'manual'
-);
-
-
-ALTER TYPE auth.oauth_registration_type OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_response_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_response_type AS ENUM (
- 'code'
-);
-
-
-ALTER TYPE auth.oauth_response_type OWNER TO supabase_auth_admin;
-
---
--- Name: one_time_token_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.one_time_token_type AS ENUM (
- 'confirmation_token',
- 'reauthentication_token',
- 'recovery_token',
- 'email_change_token_new',
- 'email_change_token_current',
- 'phone_change_token'
-);
-
-
-ALTER TYPE auth.one_time_token_type OWNER TO supabase_auth_admin;
-
---
--- Name: commitment_log_source; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.commitment_log_source AS ENUM (
- 'manual',
- 'auto'
-);
-
-
-ALTER TYPE public.commitment_log_source OWNER TO supabase_admin;
-
---
--- Name: determined_field_type; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.determined_field_type AS ENUM (
- 'text',
- 'textarea',
- 'number',
- 'date',
- 'select',
- 'boolean'
-);
-
-
-ALTER TYPE public.determined_field_type OWNER TO supabase_admin;
-
---
--- Name: recurrence_exception_type; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.recurrence_exception_type AS ENUM (
- 'cancel_session',
- 'reschedule_session',
- 'patient_missed',
- 'therapist_canceled',
- 'holiday_block'
-);
-
-
-ALTER TYPE public.recurrence_exception_type OWNER TO supabase_admin;
-
---
--- Name: recurrence_type; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.recurrence_type AS ENUM (
- 'weekly',
- 'biweekly',
- 'monthly',
- 'yearly',
- 'custom_weekdays'
-);
-
-
-ALTER TYPE public.recurrence_type OWNER TO supabase_admin;
-
---
--- Name: status_agenda_serie; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.status_agenda_serie AS ENUM (
- 'ativo',
- 'pausado',
- 'cancelado'
-);
-
-
-ALTER TYPE public.status_agenda_serie OWNER TO supabase_admin;
-
---
--- Name: status_evento_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.status_evento_agenda AS ENUM (
- 'agendado',
- 'realizado',
- 'faltou',
- 'cancelado',
- 'remarcar'
-);
-
-
-ALTER TYPE public.status_evento_agenda OWNER TO supabase_admin;
-
---
--- Name: status_excecao_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.status_excecao_agenda AS ENUM (
- 'pendente',
- 'ativo',
- 'arquivado'
-);
-
-
-ALTER TYPE public.status_excecao_agenda OWNER TO supabase_admin;
-
---
--- Name: tipo_evento_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.tipo_evento_agenda AS ENUM (
- 'sessao',
- 'bloqueio'
-);
-
-
-ALTER TYPE public.tipo_evento_agenda OWNER TO supabase_admin;
-
---
--- Name: tipo_excecao_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.tipo_excecao_agenda AS ENUM (
- 'bloqueio',
- 'horario_extra'
-);
-
-
-ALTER TYPE public.tipo_excecao_agenda OWNER TO supabase_admin;
-
---
--- Name: action; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.action AS ENUM (
- 'INSERT',
- 'UPDATE',
- 'DELETE',
- 'TRUNCATE',
- 'ERROR'
-);
-
-
-ALTER TYPE realtime.action OWNER TO supabase_admin;
-
---
--- Name: equality_op; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.equality_op AS ENUM (
- 'eq',
- 'neq',
- 'lt',
- 'lte',
- 'gt',
- 'gte',
- 'in'
-);
-
-
-ALTER TYPE realtime.equality_op OWNER TO supabase_admin;
-
---
--- Name: user_defined_filter; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.user_defined_filter AS (
- column_name text,
- op realtime.equality_op,
- value text
-);
-
-
-ALTER TYPE realtime.user_defined_filter OWNER TO supabase_admin;
-
---
--- Name: wal_column; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.wal_column AS (
- name text,
- type_name text,
- type_oid oid,
- value jsonb,
- is_pkey boolean,
- is_selectable boolean
-);
-
-
-ALTER TYPE realtime.wal_column OWNER TO supabase_admin;
-
---
--- Name: wal_rls; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.wal_rls AS (
- wal jsonb,
- is_rls_enabled boolean,
- subscription_ids uuid[],
- errors text[]
-);
-
-
-ALTER TYPE realtime.wal_rls OWNER TO supabase_admin;
-
---
--- Name: buckettype; Type: TYPE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TYPE storage.buckettype AS ENUM (
- 'STANDARD',
- 'ANALYTICS',
- 'VECTOR'
-);
-
-
-ALTER TYPE storage.buckettype OWNER TO supabase_storage_admin;
-
---
--- Name: email(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.email() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim.email', true), ''),
- (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'email')
- )::text
-$$;
-
-
-ALTER FUNCTION auth.email() OWNER TO supabase_auth_admin;
-
---
--- Name: FUNCTION email(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON FUNCTION auth.email() IS 'Deprecated. Use auth.jwt() -> ''email'' instead.';
-
-
---
--- Name: jwt(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.jwt() RETURNS jsonb
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim', true), ''),
- nullif(current_setting('request.jwt.claims', true), '')
- )::jsonb
-$$;
-
-
-ALTER FUNCTION auth.jwt() OWNER TO supabase_auth_admin;
-
---
--- Name: role(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.role() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim.role', true), ''),
- (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'role')
- )::text
-$$;
-
-
-ALTER FUNCTION auth.role() OWNER TO supabase_auth_admin;
-
---
--- Name: FUNCTION role(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON FUNCTION auth.role() IS 'Deprecated. Use auth.jwt() -> ''role'' instead.';
-
-
---
--- Name: uid(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.uid() RETURNS uuid
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim.sub', true), ''),
- (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'sub')
- )::uuid
-$$;
-
-
-ALTER FUNCTION auth.uid() OWNER TO supabase_auth_admin;
-
---
--- Name: FUNCTION uid(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON FUNCTION auth.uid() IS 'Deprecated. Use auth.jwt() -> ''sub'' instead.';
-
-
---
--- Name: grant_pg_cron_access(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.grant_pg_cron_access() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF EXISTS (
- SELECT
- FROM pg_event_trigger_ddl_commands() AS ev
- JOIN pg_extension AS ext
- ON ev.objid = ext.oid
- WHERE ext.extname = 'pg_cron'
- )
- THEN
- grant usage on schema cron to postgres with grant option;
-
- alter default privileges in schema cron grant all on tables to postgres with grant option;
- alter default privileges in schema cron grant all on functions to postgres with grant option;
- alter default privileges in schema cron grant all on sequences to postgres with grant option;
-
- alter default privileges for user supabase_admin in schema cron grant all
- on sequences to postgres with grant option;
- alter default privileges for user supabase_admin in schema cron grant all
- on tables to postgres with grant option;
- alter default privileges for user supabase_admin in schema cron grant all
- on functions to postgres with grant option;
-
- grant all privileges on all tables in schema cron to postgres with grant option;
- revoke all on table cron.job from postgres;
- grant select on table cron.job to postgres with grant option;
- END IF;
-END;
-$$;
-
-
-ALTER FUNCTION extensions.grant_pg_cron_access() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION grant_pg_cron_access(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.grant_pg_cron_access() IS 'Grants access to pg_cron';
-
-
---
--- Name: grant_pg_graphql_access(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.grant_pg_graphql_access() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $_$
-DECLARE
- func_is_graphql_resolve bool;
-BEGIN
- func_is_graphql_resolve = (
- SELECT n.proname = 'resolve'
- FROM pg_event_trigger_ddl_commands() AS ev
- LEFT JOIN pg_catalog.pg_proc AS n
- ON ev.objid = n.oid
- );
-
- IF func_is_graphql_resolve
- THEN
- -- Update public wrapper to pass all arguments through to the pg_graphql resolve func
- DROP FUNCTION IF EXISTS graphql_public.graphql;
- create or replace function graphql_public.graphql(
- "operationName" text default null,
- query text default null,
- variables jsonb default null,
- extensions jsonb default null
- )
- returns jsonb
- language sql
- as $$
- select graphql.resolve(
- query := query,
- variables := coalesce(variables, '{}'),
- "operationName" := "operationName",
- extensions := extensions
- );
- $$;
-
- -- This hook executes when `graphql.resolve` is created. That is not necessarily the last
- -- function in the extension so we need to grant permissions on existing entities AND
- -- update default permissions to any others that are created after `graphql.resolve`
- grant usage on schema graphql to postgres, anon, authenticated, service_role;
- grant select on all tables in schema graphql to postgres, anon, authenticated, service_role;
- grant execute on all functions in schema graphql to postgres, anon, authenticated, service_role;
- grant all on all sequences in schema graphql to postgres, anon, authenticated, service_role;
- alter default privileges in schema graphql grant all on tables to postgres, anon, authenticated, service_role;
- alter default privileges in schema graphql grant all on functions to postgres, anon, authenticated, service_role;
- alter default privileges in schema graphql grant all on sequences to postgres, anon, authenticated, service_role;
-
- -- Allow postgres role to allow granting usage on graphql and graphql_public schemas to custom roles
- grant usage on schema graphql_public to postgres with grant option;
- grant usage on schema graphql to postgres with grant option;
- END IF;
-
-END;
-$_$;
-
-
-ALTER FUNCTION extensions.grant_pg_graphql_access() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION grant_pg_graphql_access(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.grant_pg_graphql_access() IS 'Grants access to pg_graphql';
-
-
---
--- Name: grant_pg_net_access(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.grant_pg_net_access() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF EXISTS (
- SELECT 1
- FROM pg_event_trigger_ddl_commands() AS ev
- JOIN pg_extension AS ext
- ON ev.objid = ext.oid
- WHERE ext.extname = 'pg_net'
- )
- THEN
- GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role;
-
- ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
- ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
-
- ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
- ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
-
- REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
- REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
-
- GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
- GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
- END IF;
-END;
-$$;
-
-
-ALTER FUNCTION extensions.grant_pg_net_access() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION grant_pg_net_access(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.grant_pg_net_access() IS 'Grants access to pg_net';
-
-
---
--- Name: pgrst_ddl_watch(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.pgrst_ddl_watch() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- cmd record;
-BEGIN
- FOR cmd IN SELECT * FROM pg_event_trigger_ddl_commands()
- LOOP
- IF cmd.command_tag IN (
- 'CREATE SCHEMA', 'ALTER SCHEMA'
- , 'CREATE TABLE', 'CREATE TABLE AS', 'SELECT INTO', 'ALTER TABLE'
- , 'CREATE FOREIGN TABLE', 'ALTER FOREIGN TABLE'
- , 'CREATE VIEW', 'ALTER VIEW'
- , 'CREATE MATERIALIZED VIEW', 'ALTER MATERIALIZED VIEW'
- , 'CREATE FUNCTION', 'ALTER FUNCTION'
- , 'CREATE TRIGGER'
- , 'CREATE TYPE', 'ALTER TYPE'
- , 'CREATE RULE'
- , 'COMMENT'
- )
- -- don't notify in case of CREATE TEMP table or other objects created on pg_temp
- AND cmd.schema_name is distinct from 'pg_temp'
- THEN
- NOTIFY pgrst, 'reload schema';
- END IF;
- END LOOP;
-END; $$;
-
-
-ALTER FUNCTION extensions.pgrst_ddl_watch() OWNER TO supabase_admin;
-
---
--- Name: pgrst_drop_watch(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.pgrst_drop_watch() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- obj record;
-BEGIN
- FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects()
- LOOP
- IF obj.object_type IN (
- 'schema'
- , 'table'
- , 'foreign table'
- , 'view'
- , 'materialized view'
- , 'function'
- , 'trigger'
- , 'type'
- , 'rule'
- )
- AND obj.is_temporary IS false -- no pg_temp objects
- THEN
- NOTIFY pgrst, 'reload schema';
- END IF;
- END LOOP;
-END; $$;
-
-
-ALTER FUNCTION extensions.pgrst_drop_watch() OWNER TO supabase_admin;
-
---
--- Name: set_graphql_placeholder(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.set_graphql_placeholder() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $_$
- DECLARE
- graphql_is_dropped bool;
- BEGIN
- graphql_is_dropped = (
- SELECT ev.schema_name = 'graphql_public'
- FROM pg_event_trigger_dropped_objects() AS ev
- WHERE ev.schema_name = 'graphql_public'
- );
-
- IF graphql_is_dropped
- THEN
- create or replace function graphql_public.graphql(
- "operationName" text default null,
- query text default null,
- variables jsonb default null,
- extensions jsonb default null
- )
- returns jsonb
- language plpgsql
- as $$
- DECLARE
- server_version float;
- BEGIN
- server_version = (SELECT (SPLIT_PART((select version()), ' ', 2))::float);
-
- IF server_version >= 14 THEN
- RETURN jsonb_build_object(
- 'errors', jsonb_build_array(
- jsonb_build_object(
- 'message', 'pg_graphql extension is not enabled.'
- )
- )
- );
- ELSE
- RETURN jsonb_build_object(
- 'errors', jsonb_build_array(
- jsonb_build_object(
- 'message', 'pg_graphql is only available on projects running Postgres 14 onwards.'
- )
- )
- );
- END IF;
- END;
- $$;
- END IF;
-
- END;
-$_$;
-
-
-ALTER FUNCTION extensions.set_graphql_placeholder() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION set_graphql_placeholder(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.set_graphql_placeholder() IS 'Reintroduces placeholder function for graphql_public.graphql';
-
-
---
--- Name: get_auth(text); Type: FUNCTION; Schema: pgbouncer; Owner: supabase_admin
---
-
-CREATE FUNCTION pgbouncer.get_auth(p_usename text) RETURNS TABLE(username text, password text)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO ''
- AS $_$
-begin
- raise debug 'PgBouncer auth request: %', p_usename;
-
- return query
- select
- rolname::text,
- case when rolvaliduntil < now()
- then null
- else rolpassword::text
- end
- from pg_authid
- where rolname=$1 and rolcanlogin;
-end;
-$_$;
-
-
-ALTER FUNCTION pgbouncer.get_auth(p_usename text) OWNER TO supabase_admin;
-
---
--- Name: __rls_ping(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.__rls_ping() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select 'ok'::text;
-$$;
-
-
-ALTER FUNCTION public.__rls_ping() OWNER TO supabase_admin;
-
-SET default_tablespace = '';
-
-SET default_table_access_method = heap;
-
---
--- Name: subscriptions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscriptions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid,
- plan_id uuid NOT NULL,
- status text DEFAULT 'active'::text NOT NULL,
- current_period_start timestamp with time zone,
- current_period_end timestamp with time zone,
- cancel_at_period_end boolean DEFAULT false NOT NULL,
- provider text DEFAULT 'manual'::text NOT NULL,
- provider_customer_id text,
- provider_subscription_id text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid,
- plan_key text,
- "interval" text,
- source text DEFAULT 'manual'::text NOT NULL,
- started_at timestamp with time zone DEFAULT now() NOT NULL,
- canceled_at timestamp with time zone,
- activated_at timestamp with time zone,
- past_due_since timestamp with time zone,
- suspended_at timestamp with time zone,
- suspended_reason text,
- cancelled_at timestamp with time zone,
- cancel_reason text,
- expired_at timestamp with time zone,
- CONSTRAINT subscriptions_interval_check CHECK (("interval" = ANY (ARRAY['month'::text, 'year'::text]))),
- CONSTRAINT subscriptions_owner_xor CHECK ((((tenant_id IS NOT NULL) AND (user_id IS NULL)) OR ((tenant_id IS NULL) AND (user_id IS NOT NULL)))),
- CONSTRAINT subscriptions_status_check CHECK ((status = ANY (ARRAY['pending'::text, 'active'::text, 'past_due'::text, 'suspended'::text, 'cancelled'::text, 'expired'::text])))
-);
-
-
-ALTER TABLE public.subscriptions OWNER TO supabase_admin;
-
---
--- Name: activate_subscription_from_intent(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_intent record;
- v_sub public.subscriptions;
- v_days int;
- v_user_id uuid;
- v_plan_id uuid;
- v_target text;
-begin
- -- lê pela VIEW unificada
- select * into v_intent
- from public.subscription_intents
- where id = p_intent_id;
-
- if not found then
- raise exception 'Intent não encontrado: %', p_intent_id;
- end if;
-
- if v_intent.status <> 'paid' then
- raise exception 'Intent precisa estar paid para ativar assinatura';
- end if;
-
- -- resolve target e plan_id via plans.key
- select p.id, p.target
- into v_plan_id, v_target
- from public.plans p
- where p.key = v_intent.plan_key
- limit 1;
-
- if v_plan_id is null then
- raise exception 'Plano não encontrado em plans.key = %', v_intent.plan_key;
- end if;
-
- v_target := lower(coalesce(v_target, ''));
-
- -- ✅ supervisor adicionado
- if v_target not in ('clinic', 'therapist', 'supervisor') then
- raise exception 'Target inválido em plans.target: %', v_target;
- end if;
-
- -- regra por target
- if v_target = 'clinic' then
- if v_intent.tenant_id is null then
- raise exception 'Intent sem tenant_id';
- end if;
- else
- -- therapist ou supervisor: vinculado ao user
- v_user_id := v_intent.user_id;
- if v_user_id is null then
- v_user_id := v_intent.created_by_user_id;
- end if;
- end if;
-
- if v_target in ('therapist', 'supervisor') and v_user_id is null then
- raise exception 'Não foi possível determinar user_id para assinatura %.', v_target;
- end if;
-
- -- cancela assinatura ativa anterior
- if v_target = 'clinic' then
- update public.subscriptions
- set status = 'cancelled',
- cancelled_at = now()
- where tenant_id = v_intent.tenant_id
- and plan_id = v_plan_id
- and status = 'active';
- else
- -- therapist ou supervisor
- update public.subscriptions
- set status = 'cancelled',
- cancelled_at = now()
- where user_id = v_user_id
- and plan_id = v_plan_id
- and status = 'active'
- and tenant_id is null;
- end if;
-
- -- duração do plano (30 dias para mensal)
- v_days := case
- when lower(coalesce(v_intent.interval, 'month')) = 'year' then 365
- else 30
- end;
-
- -- cria nova assinatura
- insert into public.subscriptions (
- user_id,
- plan_id,
- status,
- started_at,
- expires_at,
- cancelled_at,
- activated_at,
- tenant_id,
- plan_key,
- interval,
- source,
- created_at,
- updated_at
- )
- values (
- case when v_target = 'clinic' then null else v_user_id end,
- v_plan_id,
- 'active',
- now(),
- now() + make_interval(days => v_days),
- null,
- now(),
- case when v_target = 'clinic' then v_intent.tenant_id else null end,
- v_intent.plan_key,
- v_intent.interval,
- 'manual',
- now(),
- now()
- )
- returning * into v_sub;
-
- -- grava vínculo intent → subscription
- if v_target = 'clinic' then
- update public.subscription_intents_tenant
- set subscription_id = v_sub.id
- where id = p_intent_id;
- else
- update public.subscription_intents_personal
- set subscription_id = v_sub.id
- where id = p_intent_id;
- end if;
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) OWNER TO supabase_admin;
-
---
--- Name: admin_fix_plan_target(text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_plan_id uuid;
-begin
- -- (opcional) restringe targets válidos
- if p_new_target not in ('clinic','therapist') then
- raise exception 'Target inválido: %', p_new_target using errcode='P0001';
- end if;
-
- -- trava o plano
- select id into v_plan_id
- from public.plans
- where key = p_plan_key
- for update;
-
- if v_plan_id is null then
- raise exception 'Plano não encontrado: %', p_plan_key using errcode='P0001';
- end if;
-
- -- segurança: não mexer se existe subscription
- if exists (select 1 from public.subscriptions s where s.plan_id = v_plan_id) then
- raise exception 'Plano % possui subscriptions. Migração bloqueada.', p_plan_key using errcode='P0001';
- end if;
-
- -- liga bypass SOMENTE nesta transação
- perform set_config('app.plan_migration_bypass', '1', true);
-
- update public.plans
- set target = p_new_target
- where id = v_plan_id;
-
-end
-$$;
-
-
-ALTER FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) OWNER TO supabase_admin;
-
---
--- Name: agenda_cfg_sync(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agenda_cfg_sync() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if new.agenda_view_mode = 'custom' then
- new.usar_horario_admin_custom := true;
- new.admin_inicio_visualizacao := new.agenda_custom_start;
- new.admin_fim_visualizacao := new.agenda_custom_end;
- else
- new.usar_horario_admin_custom := false;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.agenda_cfg_sync() OWNER TO supabase_admin;
-
---
--- Name: agendador_dias_disponiveis(text, integer, integer); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) RETURNS TABLE(data date, tem_slots boolean)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_owner_id uuid;
- v_antecedencia int;
- v_agora timestamptz;
- v_data date;
- v_data_inicio date;
- v_data_fim date;
- v_db_dow int;
- v_tem_slot boolean;
-BEGIN
- SELECT c.owner_id, c.antecedencia_minima_horas
- INTO v_owner_id, v_antecedencia
- FROM public.agendador_configuracoes c
- WHERE c.link_slug = p_slug AND c.ativo = true
- LIMIT 1;
-
- IF v_owner_id IS NULL THEN RETURN; END IF;
-
- v_agora := now();
- v_data_inicio := make_date(p_ano, p_mes, 1);
- v_data_fim := (v_data_inicio + interval '1 month' - interval '1 day')::date;
-
- v_data := v_data_inicio;
- WHILE v_data <= v_data_fim LOOP
- v_db_dow := extract(dow from v_data::timestamp)::int;
-
- SELECT EXISTS (
- SELECT 1 FROM public.agenda_online_slots s
- WHERE s.owner_id = v_owner_id
- AND s.weekday = v_db_dow
- AND s.enabled = true
- AND (v_data::text || ' ' || s.time::text)::timestamp
- AT TIME ZONE 'America/Sao_Paulo'
- >= v_agora + (v_antecedencia || ' hours')::interval
- ) INTO v_tem_slot;
-
- IF v_tem_slot THEN
- data := v_data;
- tem_slots := true;
- RETURN NEXT;
- END IF;
-
- v_data := v_data + 1;
- END LOOP;
-END;
-$$;
-
-
-ALTER FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) OWNER TO supabase_admin;
-
---
--- Name: agendador_gerar_slug(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agendador_gerar_slug() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_slug text;
- v_exists boolean;
-BEGIN
- -- só gera se ativou e não tem slug ainda
- IF NEW.ativo = true AND (NEW.link_slug IS NULL OR NEW.link_slug = '') THEN
- LOOP
- v_slug := lower(substring(replace(gen_random_uuid()::text, '-', ''), 1, 8));
- SELECT EXISTS (
- SELECT 1 FROM public.agendador_configuracoes
- WHERE link_slug = v_slug AND owner_id <> NEW.owner_id
- ) INTO v_exists;
- EXIT WHEN NOT v_exists;
- END LOOP;
- NEW.link_slug := v_slug;
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.agendador_gerar_slug() OWNER TO supabase_admin;
-
---
--- Name: agendador_slots_disponiveis(text, date); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) RETURNS TABLE(hora time without time zone, disponivel boolean)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_owner_id uuid;
- v_duracao int;
- v_antecedencia int;
- v_agora timestamptz;
- v_db_dow int;
- v_slot time;
- v_slot_fim time;
- v_slot_ts timestamptz;
- v_ocupado boolean;
- -- loop de recorrências
- v_rule RECORD;
- v_rule_start_dow int;
- v_first_occ date;
- v_day_diff int;
- v_ex_type text;
-BEGIN
- SELECT c.owner_id, c.duracao_sessao_min, c.antecedencia_minima_horas
- INTO v_owner_id, v_duracao, v_antecedencia
- FROM public.agendador_configuracoes c
- WHERE c.link_slug = p_slug AND c.ativo = true
- LIMIT 1;
-
- IF v_owner_id IS NULL THEN RETURN; END IF;
-
- v_agora := now();
- v_db_dow := extract(dow from p_data::timestamp)::int;
-
- FOR v_slot IN
- SELECT s.time
- FROM public.agenda_online_slots s
- WHERE s.owner_id = v_owner_id
- AND s.weekday = v_db_dow
- AND s.enabled = true
- ORDER BY s.time
- LOOP
- v_slot_fim := v_slot + (v_duracao || ' minutes')::interval;
- v_ocupado := false;
-
- -- ── Antecedência mínima ──────────────────────────────────────────────────
- v_slot_ts := (p_data::text || ' ' || v_slot::text)::timestamp
- AT TIME ZONE 'America/Sao_Paulo';
- IF v_slot_ts < v_agora + (v_antecedencia || ' hours')::interval THEN
- v_ocupado := true;
- END IF;
-
- -- ── Eventos avulsos internos (agenda_eventos) ────────────────────────────
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1 FROM public.agenda_eventos e
- WHERE e.owner_id = v_owner_id
- AND e.status::text NOT IN ('cancelado', 'faltou')
- AND (e.inicio_em AT TIME ZONE 'America/Sao_Paulo')::date = p_data
- AND (e.inicio_em AT TIME ZONE 'America/Sao_Paulo')::time < v_slot_fim
- AND (e.fim_em AT TIME ZONE 'America/Sao_Paulo')::time > v_slot
- ) INTO v_ocupado;
- END IF;
-
- -- ── Recorrências ativas (recurrence_rules) ───────────────────────────────
- -- Loop explícito para evitar erros de tipo no cálculo do ciclo semanal
- IF NOT v_ocupado THEN
- FOR v_rule IN
- SELECT
- r.id,
- r.start_date::date AS start_date,
- r.end_date::date AS end_date,
- r.start_time::time AS start_time,
- r.end_time::time AS end_time,
- COALESCE(r.interval, 1)::int AS interval
- FROM public.recurrence_rules r
- WHERE r.owner_id = v_owner_id
- AND r.status = 'ativo'
- AND p_data >= r.start_date::date
- AND (r.end_date IS NULL OR p_data <= r.end_date::date)
- AND v_db_dow = ANY(r.weekdays)
- AND r.start_time::time < v_slot_fim
- AND r.end_time::time > v_slot
- LOOP
- -- Calcula a primeira ocorrência do dia-da-semana a partir do start_date
- v_rule_start_dow := extract(dow from v_rule.start_date)::int;
- v_first_occ := v_rule.start_date
- + (((v_db_dow - v_rule_start_dow + 7) % 7))::int;
- v_day_diff := (p_data - v_first_occ)::int;
-
- -- Ocorrência válida: diff >= 0 e divisível pelo ciclo semanal
- IF v_day_diff >= 0 AND v_day_diff % (7 * v_rule.interval) = 0 THEN
-
- -- Verifica se há exceção para esta data
- v_ex_type := NULL;
- SELECT ex.type INTO v_ex_type
- FROM public.recurrence_exceptions ex
- WHERE ex.recurrence_id = v_rule.id
- AND ex.original_date = p_data
- LIMIT 1;
-
- -- Sem exceção, ou exceção que não cancela → bloqueia o slot
- IF v_ex_type IS NULL OR v_ex_type NOT IN (
- 'cancel_session', 'patient_missed',
- 'therapist_canceled', 'holiday_block',
- 'reschedule_session'
- ) THEN
- v_ocupado := true;
- EXIT; -- já basta uma regra que conflite
- END IF;
-
- END IF;
- END LOOP;
- END IF;
-
- -- ── Recorrências remarcadas para este dia (reschedule → new_date = p_data) ─
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1
- FROM public.recurrence_exceptions ex
- JOIN public.recurrence_rules r ON r.id = ex.recurrence_id
- WHERE r.owner_id = v_owner_id
- AND r.status = 'ativo'
- AND ex.type = 'reschedule_session'
- AND ex.new_date = p_data
- AND COALESCE(ex.new_start_time, r.start_time)::time < v_slot_fim
- AND COALESCE(ex.new_end_time, r.end_time)::time > v_slot
- ) INTO v_ocupado;
- END IF;
-
- -- ── Solicitações públicas pendentes ──────────────────────────────────────
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1 FROM public.agendador_solicitacoes sol
- WHERE sol.owner_id = v_owner_id
- AND sol.status = 'pendente'
- AND sol.data_solicitada = p_data
- AND sol.hora_solicitada = v_slot
- AND (sol.reservado_ate IS NULL OR sol.reservado_ate > v_agora)
- ) INTO v_ocupado;
- END IF;
-
- hora := v_slot;
- disponivel := NOT v_ocupado;
- RETURN NEXT;
- END LOOP;
-END;
-$$;
-
-
-ALTER FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) OWNER TO supabase_admin;
-
---
--- Name: cancel_recurrence_from(uuid, date); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-BEGIN
- UPDATE public.recurrence_rules
- SET
- end_date = p_from_date - INTERVAL '1 day',
- open_ended = false,
- status = CASE
- WHEN p_from_date <= start_date THEN 'cancelado'
- ELSE status
- END,
- updated_at = now()
- WHERE id = p_recurrence_id;
-END;
-$$;
-
-
-ALTER FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) OWNER TO supabase_admin;
-
---
--- Name: cancel_subscription(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.cancel_subscription(p_subscription_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_owner_type text;
- v_owner_ref uuid;
-begin
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- if v_sub.status = 'canceled' then
- return v_sub;
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set status = 'canceled',
- cancel_at_period_end = false,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'canceled',
- v_sub.plan_id,
- v_sub.plan_id,
- auth.uid(),
- 'Cancelamento manual via admin',
- 'admin_panel',
- jsonb_build_object('previous_status', 'active')
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation(owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-
-end;
-$$;
-
-
-ALTER FUNCTION public.cancel_subscription(p_subscription_id uuid) OWNER TO supabase_admin;
-
---
--- Name: cancelar_eventos_serie(uuid, timestamp with time zone); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone DEFAULT now()) RETURNS integer
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-DECLARE
- v_count integer;
-BEGIN
- UPDATE public.agenda_eventos
- SET status = 'cancelado',
- updated_at = now()
- WHERE serie_id = p_serie_id
- AND inicio_em >= p_a_partir_de
- AND status NOT IN ('realizado', 'cancelado');
-
- GET DIAGNOSTICS v_count = ROW_COUNT;
- RETURN v_count;
-END;
-$$;
-
-
-ALTER FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) OWNER TO supabase_admin;
-
---
--- Name: FUNCTION cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone); Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) IS 'Cancela todos os eventos futuros de uma série a partir de p_a_partir_de (inclusive).
- Não cancela eventos já realizados.';
-
-
---
--- Name: change_subscription_plan(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_old_plan uuid;
- v_new_key text;
-
- v_owner_type text;
- v_owner_ref uuid;
-
- v_new_target text;
- v_sub_target text;
-begin
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- v_old_plan := v_sub.plan_id;
-
- if v_old_plan = p_new_plan_id then
- return v_sub;
- end if;
-
- select key, target
- into v_new_key, v_new_target
- from public.plans
- where id = p_new_plan_id;
-
- if v_new_key is null then
- raise exception 'Plano não encontrado';
- end if;
-
- v_new_target := lower(coalesce(v_new_target, ''));
-
- v_sub_target := case
- when v_sub.tenant_id is not null then 'clinic'
- else 'therapist'
- end;
-
- if v_new_target <> v_sub_target then
- raise exception 'Plano inválido para este tipo de assinatura. Assinatura é % e o plano é %.',
- v_sub_target, v_new_target
- using errcode = 'P0001';
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set plan_id = p_new_plan_id,
- plan_key = v_new_key,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'plan_changed',
- v_old_plan,
- p_new_plan_id,
- auth.uid(),
- 'Plan change via DEV menu',
- 'dev_menu',
- jsonb_build_object(
- 'previous_plan', v_old_plan,
- 'new_plan', p_new_plan_id,
- 'new_plan_key', v_new_key,
- 'new_plan_target', v_new_target
- )
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation (owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) OWNER TO supabase_admin;
-
---
--- Name: create_clinic_tenant(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_clinic_tenant(p_name text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_uid uuid;
- v_tenant uuid;
- v_name text;
-begin
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'Not authenticated';
- end if;
-
- v_name := nullif(trim(coalesce(p_name, '')), '');
- if v_name is null then
- v_name := 'Clínica';
- end if;
-
- insert into public.tenants (name, kind, created_at)
- values (v_name, 'clinic', now())
- returning id into v_tenant;
-
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_tenant, v_uid, 'tenant_admin', 'active', now());
-
- return v_tenant;
-end;
-$$;
-
-
-ALTER FUNCTION public.create_clinic_tenant(p_name text) OWNER TO supabase_admin;
-
---
--- Name: create_patient_intake_request(text, text, text, text, text, boolean); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text DEFAULT NULL::text, p_phone text DEFAULT NULL::text, p_notes text DEFAULT NULL::text, p_consent boolean DEFAULT false) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_owner uuid;
- v_active boolean;
- v_expires timestamptz;
- v_max_uses int;
- v_uses int;
- v_id uuid;
-begin
- select owner_id, active, expires_at, max_uses, uses
- into v_owner, v_active, v_expires, v_max_uses, v_uses
- from public.patient_invites
- where token = p_token
- limit 1;
-
- if v_owner is null then
- raise exception 'Token inválido';
- end if;
-
- if v_active is not true then
- raise exception 'Link desativado';
- end if;
-
- if v_expires is not null and now() > v_expires then
- raise exception 'Link expirado';
- end if;
-
- if v_max_uses is not null and v_uses >= v_max_uses then
- raise exception 'Limite de uso atingido';
- end if;
-
- if p_name is null or length(trim(p_name)) = 0 then
- raise exception 'Nome é obrigatório';
- end if;
-
- insert into public.patient_intake_requests
- (owner_id, token, name, email, phone, notes, consent, status)
- values
- (v_owner, p_token, trim(p_name),
- nullif(lower(trim(p_email)), ''),
- nullif(trim(p_phone), ''),
- nullif(trim(p_notes), ''),
- coalesce(p_consent, false),
- 'new')
- returning id into v_id;
-
- update public.patient_invites
- set uses = uses + 1
- where token = p_token;
-
- return v_id;
-end;
-$$;
-
-
-ALTER FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) OWNER TO supabase_admin;
-
---
--- Name: create_patient_intake_request_v2(text, jsonb); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $_$
-declare
- v_owner_id uuid;
- v_intake_id uuid;
- v_birth_raw text;
- v_birth date;
-begin
- select owner_id
- into v_owner_id
- from public.patient_invites
- where token = p_token;
-
- if v_owner_id is null then
- raise exception 'Token inválido ou expirado';
- end if;
-
- v_birth_raw := nullif(trim(coalesce(
- p_payload->>'data_nascimento',
- ''
- )), '');
-
- v_birth := case
- when v_birth_raw is null then null
- when v_birth_raw ~ '^\d{4}-\d{2}-\d{2}$' then v_birth_raw::date
- when v_birth_raw ~ '^\d{2}-\d{2}-\d{4}$' then to_date(v_birth_raw, 'DD-MM-YYYY')
- else null
- end;
-
- insert into public.patient_intake_requests (
- owner_id,
- token,
- status,
- consent,
-
- nome_completo,
- email_principal,
- telefone,
-
- avatar_url, -- 🔥 AQUI
-
- data_nascimento,
- cpf,
- rg,
- genero,
- estado_civil,
- profissao,
- escolaridade,
- nacionalidade,
- naturalidade,
-
- cep,
- pais,
- cidade,
- estado,
- endereco,
- numero,
- complemento,
- bairro,
-
- observacoes,
- notas_internas,
-
- encaminhado_por,
- onde_nos_conheceu
- )
- values (
- v_owner_id,
- p_token,
- 'new',
- coalesce((p_payload->>'consent')::boolean, false),
-
- nullif(trim(p_payload->>'nome_completo'), ''),
- nullif(trim(p_payload->>'email_principal'), ''),
- nullif(regexp_replace(coalesce(p_payload->>'telefone',''), '\D', '', 'g'), ''),
-
- nullif(trim(p_payload->>'avatar_url'), ''), -- 🔥 AQUI
-
- v_birth,
- nullif(regexp_replace(coalesce(p_payload->>'cpf',''), '\D', '', 'g'), ''),
- nullif(trim(p_payload->>'rg'), ''),
- nullif(trim(p_payload->>'genero'), ''),
- nullif(trim(p_payload->>'estado_civil'), ''),
- nullif(trim(p_payload->>'profissao'), ''),
- nullif(trim(p_payload->>'escolaridade'), ''),
- nullif(trim(p_payload->>'nacionalidade'), ''),
- nullif(trim(p_payload->>'naturalidade'), ''),
-
- nullif(regexp_replace(coalesce(p_payload->>'cep',''), '\D', '', 'g'), ''),
- nullif(trim(p_payload->>'pais'), ''),
- nullif(trim(p_payload->>'cidade'), ''),
- nullif(trim(p_payload->>'estado'), ''),
- nullif(trim(p_payload->>'endereco'), ''),
- nullif(trim(p_payload->>'numero'), ''),
- nullif(trim(p_payload->>'complemento'), ''),
- nullif(trim(p_payload->>'bairro'), ''),
-
- nullif(trim(p_payload->>'observacoes'), ''),
- nullif(trim(p_payload->>'notas_internas'), ''),
-
- nullif(trim(p_payload->>'encaminhado_por'), ''),
- nullif(trim(p_payload->>'onde_nos_conheceu'), '')
- )
- returning id into v_intake_id;
-
- return v_intake_id;
-end;
-$_$;
-
-
-ALTER FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) OWNER TO supabase_admin;
-
---
--- Name: create_support_session(uuid, integer); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer DEFAULT 60) RETURNS json
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_admin_id uuid;
- v_role text;
- v_token text;
- v_expires timestamp with time zone;
- v_session support_sessions;
-BEGIN
- -- Verifica autenticação
- v_admin_id := auth.uid();
- IF v_admin_id IS NULL THEN
- RAISE EXCEPTION 'Não autenticado.' USING ERRCODE = 'P0001';
- END IF;
-
- -- Verifica role saas_admin
- SELECT role INTO v_role
- FROM public.profiles
- WHERE id = v_admin_id;
-
- IF v_role <> 'saas_admin' THEN
- RAISE EXCEPTION 'Acesso negado. Somente saas_admin pode criar sessões de suporte.'
- USING ERRCODE = 'P0002';
- END IF;
-
- -- Valida TTL (1 a 120 minutos)
- IF p_ttl_minutes < 1 OR p_ttl_minutes > 120 THEN
- RAISE EXCEPTION 'TTL inválido. Use entre 1 e 120 minutos.'
- USING ERRCODE = 'P0003';
- END IF;
-
- -- Valida tenant
- IF NOT EXISTS (SELECT 1 FROM public.tenants WHERE id = p_tenant_id) THEN
- RAISE EXCEPTION 'Tenant não encontrado.'
- USING ERRCODE = 'P0004';
- END IF;
-
- -- Gera token único (64 chars hex, sem pgcrypto)
- v_token := replace(gen_random_uuid()::text, '-', '') || replace(gen_random_uuid()::text, '-', '');
- v_expires := now() + (p_ttl_minutes || ' minutes')::interval;
-
- -- Insere sessão
- INSERT INTO public.support_sessions (tenant_id, admin_id, token, expires_at)
- VALUES (p_tenant_id, v_admin_id, v_token, v_expires)
- RETURNING * INTO v_session;
-
- RETURN json_build_object(
- 'token', v_session.token,
- 'expires_at', v_session.expires_at,
- 'session_id', v_session.id
- );
-END;
-$$;
-
-
-ALTER FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) OWNER TO supabase_admin;
-
---
--- Name: current_member_id(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.current_member_id(p_tenant_id uuid) RETURNS uuid
- LANGUAGE sql STABLE
- AS $$
- select tm.id
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- limit 1
-$$;
-
-
-ALTER FUNCTION public.current_member_id(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: current_member_role(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.current_member_role(p_tenant_id uuid) RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select tm.role
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- limit 1
-$$;
-
-
-ALTER FUNCTION public.current_member_role(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: delete_commitment_full(uuid, uuid); Type: FUNCTION; Schema: public; Owner: postgres
---
-
-CREATE FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_is_native boolean;
- v_fields int := 0;
- v_logs int := 0;
- v_parent int := 0;
-begin
- if auth.uid() is null then
- raise exception 'Not authenticated';
- end if;
-
- if not exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.status = 'active'
- ) then
- raise exception 'Not allowed';
- end if;
-
- select dc.is_native
- into v_is_native
- from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
-
- if v_is_native is null then
- raise exception 'Commitment not found';
- end if;
-
- if v_is_native = true then
- raise exception 'Cannot delete native commitment';
- end if;
-
- delete from public.determined_commitment_fields
- where tenant_id = p_tenant_id
- and commitment_id = p_commitment_id;
- get diagnostics v_fields = row_count;
-
- delete from public.commitment_time_logs
- where tenant_id = p_tenant_id
- and commitment_id = p_commitment_id;
- get diagnostics v_logs = row_count;
-
- delete from public.determined_commitments
- where tenant_id = p_tenant_id
- and id = p_commitment_id;
- get diagnostics v_parent = row_count;
-
- if v_parent <> 1 then
- raise exception 'Parent not deleted (RLS/owner issue).';
- end if;
-
- return jsonb_build_object(
- 'ok', true,
- 'deleted', jsonb_build_object(
- 'fields', v_fields,
- 'logs', v_logs,
- 'commitment', v_parent
- )
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) OWNER TO postgres;
-
---
--- Name: delete_determined_commitment(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_is_native boolean;
- v_fields_deleted int := 0;
- v_logs_deleted int := 0;
- v_commitment_deleted int := 0;
-begin
- if auth.uid() is null then
- raise exception 'Not authenticated';
- end if;
-
- if not exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.status = 'active'
- ) then
- raise exception 'Not allowed';
- end if;
-
- select dc.is_native
- into v_is_native
- from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
-
- if v_is_native is null then
- raise exception 'Commitment not found for tenant';
- end if;
-
- if v_is_native = true then
- raise exception 'Cannot delete native commitment';
- end if;
-
- delete from public.determined_commitment_fields f
- where f.tenant_id = p_tenant_id
- and f.commitment_id = p_commitment_id;
- get diagnostics v_fields_deleted = row_count;
-
- delete from public.commitment_time_logs l
- where l.tenant_id = p_tenant_id
- and l.commitment_id = p_commitment_id;
- get diagnostics v_logs_deleted = row_count;
-
- delete from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
- get diagnostics v_commitment_deleted = row_count;
-
- if v_commitment_deleted <> 1 then
- raise exception 'Delete did not remove the commitment (tenant mismatch?)';
- end if;
-
- return jsonb_build_object(
- 'ok', true,
- 'tenant_id', p_tenant_id,
- 'commitment_id', p_commitment_id,
- 'deleted', jsonb_build_object(
- 'fields', v_fields_deleted,
- 'logs', v_logs_deleted,
- 'commitment', v_commitment_deleted
- )
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) OWNER TO supabase_admin;
-
---
--- Name: dev_list_auth_users(integer); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_list_auth_users(p_limit integer DEFAULT 50) RETURNS TABLE(id uuid, email text, created_at timestamp with time zone)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-begin
- -- só saas_admin pode ver
- if not exists (
- select 1
- from public.profiles p
- where p.id = auth.uid()
- and p.role = 'saas_admin'
- ) then
- return;
- end if;
-
- return query
- select
- u.id,
- u.email,
- u.created_at
- from auth.users u
- order by u.created_at desc
- limit greatest(1, least(coalesce(p_limit, 50), 500));
-end;
-$$;
-
-
-ALTER FUNCTION public.dev_list_auth_users(p_limit integer) OWNER TO supabase_admin;
-
---
--- Name: dev_list_custom_users(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_list_custom_users() RETURNS TABLE(user_id uuid, email text, created_at timestamp with time zone, global_role text, tenant_role text, tenant_id uuid, password_dev text, kind text)
- LANGUAGE sql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
- with base as (
- select
- u.id as user_id,
- lower(u.email) as email,
- u.created_at
- from auth.users u
- where lower(u.email) not in (
- 'clinic@agenciapsi.com.br',
- 'therapist@agenciapsi.com.br',
- 'patient@agenciapsi.com.br',
- 'saas@agenciapsi.com.br'
- )
- ),
- prof as (
- select p.id, p.role as global_role
- from public.profiles p
- ),
- last_membership as (
- select distinct on (tm.user_id)
- tm.user_id,
- tm.tenant_id,
- tm.role as tenant_role,
- tm.created_at
- from public.tenant_members tm
- where tm.status = 'active'
- order by tm.user_id, tm.created_at desc
- )
- select
- b.user_id,
- b.email,
- b.created_at,
- pr.global_role,
- lm.tenant_role,
- lm.tenant_id,
- dc.password_dev,
- dc.kind
- from base b
- left join prof pr on pr.id = b.user_id
- left join last_membership lm on lm.user_id = b.user_id
- left join public.dev_user_credentials dc on lower(dc.email) = b.email
- order by b.created_at desc;
-$$;
-
-
-ALTER FUNCTION public.dev_list_custom_users() OWNER TO supabase_admin;
-
---
--- Name: dev_list_intent_leads(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_list_intent_leads() RETURNS TABLE(email text, last_intent_at timestamp with time zone, plan_key text, billing_interval text, status text, tenant_id uuid)
- LANGUAGE sql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
- select
- lower(si.email) as email,
- max(si.created_at) as last_intent_at,
- (array_agg(si.plan_key order by si.created_at desc))[1] as plan_key,
- (array_agg(si.interval order by si.created_at desc))[1] as billing_interval,
- (array_agg(si.status order by si.created_at desc))[1] as status,
- (array_agg(si.tenant_id order by si.created_at desc))[1] as tenant_id
- from public.subscription_intents si
- where si.email is not null
- and not exists (
- select 1
- from auth.users au
- where lower(au.email) = lower(si.email)
- )
- group by lower(si.email)
- order by max(si.created_at) desc;
-$$;
-
-
-ALTER FUNCTION public.dev_list_intent_leads() OWNER TO supabase_admin;
-
---
--- Name: dev_public_debug_snapshot(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_public_debug_snapshot() RETURNS TABLE(users_total integer, tenants_total integer, intents_new_total integer, latest_intents jsonb)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $_$
-declare
- v_latest jsonb;
-begin
- select jsonb_agg(
- jsonb_build_object(
- 'created_at', si.created_at,
- 'email_masked',
- regexp_replace(lower(si.email), '(^.).*(@.*$)', '\1***\2'),
- 'plan_key', si.plan_key,
- 'status', si.status
- )
- order by si.created_at desc
- )
- into v_latest
- from (
- select si.*
- from public.subscription_intents si
- where si.email is not null
- order by si.created_at desc
- limit 5
- ) si;
-
- return query
- select
- (select count(*)::int from auth.users) as users_total,
- (select count(*)::int from public.tenants) as tenants_total,
- (select count(*)::int from public.subscription_intents where status = 'new') as intents_new_total,
- coalesce(v_latest, '[]'::jsonb) as latest_intents;
-end;
-$_$;
-
-
-ALTER FUNCTION public.dev_public_debug_snapshot() OWNER TO supabase_admin;
-
---
--- Name: ensure_personal_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.ensure_personal_tenant() RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-DECLARE
- v_uid uuid;
- v_existing uuid;
-BEGIN
- v_uid := auth.uid();
- IF v_uid IS NULL THEN
- RAISE EXCEPTION 'Not authenticated';
- END IF;
-
- SELECT tm.tenant_id INTO v_existing
- FROM public.tenant_members tm
- JOIN public.tenants t ON t.id = tm.tenant_id
- WHERE tm.user_id = v_uid
- AND tm.status = 'active'
- AND t.kind IN ('therapist', 'saas')
- ORDER BY tm.created_at DESC
- LIMIT 1;
-
- IF v_existing IS NOT NULL THEN
- RETURN v_existing;
- END IF;
-
- RETURN public.provision_account_tenant(v_uid, 'therapist');
-END;
-$$;
-
-
-ALTER FUNCTION public.ensure_personal_tenant() OWNER TO supabase_admin;
-
---
--- Name: ensure_personal_tenant_for_user(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_uid uuid;
- v_existing uuid;
- v_tenant uuid;
- v_email text;
- v_name text;
-begin
- v_uid := p_user_id;
- if v_uid is null then
- raise exception 'Missing user id';
- end if;
-
- -- só considera tenant pessoal (kind='saas')
- select tm.tenant_id
- into v_existing
- from public.tenant_members tm
- join public.tenants t on t.id = tm.tenant_id
- where tm.user_id = v_uid
- and tm.status = 'active'
- and t.kind = 'saas'
- order by tm.created_at desc
- limit 1;
-
- if v_existing is not null then
- return v_existing;
- end if;
-
- select email into v_email
- from auth.users
- where id = v_uid;
-
- v_name := coalesce(split_part(v_email, '@', 1), 'Conta');
-
- insert into public.tenants (name, kind, created_at)
- values (v_name || ' (Pessoal)', 'saas', now())
- returning id into v_tenant;
-
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_tenant, v_uid, 'tenant_admin', 'active', now());
-
- return v_tenant;
-end;
-$$;
-
-
-ALTER FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: faq_votar(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.faq_votar(faq_id uuid) RETURNS void
- LANGUAGE sql SECURITY DEFINER
- AS $$
- update public.saas_faq
- set votos = votos + 1,
- updated_at = now()
- where id = faq_id
- and ativo = true;
-$$;
-
-
-ALTER FUNCTION public.faq_votar(faq_id uuid) OWNER TO supabase_admin;
-
---
--- Name: fix_all_subscription_mismatches(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.fix_all_subscription_mismatches() RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- r record;
-begin
- for r in
- select distinct s.user_id as owner_id
- from public.subscriptions s
- where s.status = 'active'
- and s.user_id is not null
- loop
- perform public.rebuild_owner_entitlements(r.owner_id);
- end loop;
-end;
-$$;
-
-
-ALTER FUNCTION public.fix_all_subscription_mismatches() OWNER TO supabase_admin;
-
---
--- Name: fn_agenda_regras_semanais_no_overlap(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.fn_agenda_regras_semanais_no_overlap() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- v_count int;
-begin
- if new.ativo is false then
- return new;
- end if;
-
- select count(*) into v_count
- from public.agenda_regras_semanais r
- where r.owner_id = new.owner_id
- and r.dia_semana = new.dia_semana
- and r.ativo is true
- and (tg_op = 'INSERT' or r.id <> new.id)
- and (new.hora_inicio < r.hora_fim and new.hora_fim > r.hora_inicio);
-
- if v_count > 0 then
- raise exception 'Janela sobreposta: já existe uma regra ativa nesse intervalo.';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.fn_agenda_regras_semanais_no_overlap() OWNER TO supabase_admin;
-
---
--- Name: get_my_email(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.get_my_email() RETURNS text
- LANGUAGE sql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
- select lower(email)
- from auth.users
- where id = auth.uid();
-$$;
-
-
-ALTER FUNCTION public.get_my_email() OWNER TO supabase_admin;
-
---
--- Name: guard_account_type_immutable(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_account_type_immutable() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF OLD.account_type <> 'free' AND NEW.account_type IS DISTINCT FROM OLD.account_type THEN
- RAISE EXCEPTION 'account_type é imutável após escolha (atual: "%" para tentativa: "%"). Para mudar de perfil, crie uma nova conta.', OLD.account_type, NEW.account_type
- USING ERRCODE = 'P0001';
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.guard_account_type_immutable() OWNER TO supabase_admin;
-
---
--- Name: guard_locked_commitment(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_locked_commitment() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if (old.is_locked = true) then
- if (tg_op = 'DELETE') then
- raise exception 'Compromisso bloqueado não pode ser excluído.';
- end if;
-
- if (tg_op = 'UPDATE') then
- if (new.active = false) then
- raise exception 'Compromisso bloqueado não pode ser desativado.';
- end if;
-
- -- trava renomear (mantém o "Sessão" sempre igual)
- if (new.name is distinct from old.name) then
- raise exception 'Compromisso bloqueado não pode ser renomeado.';
- end if;
-
- -- se quiser travar descrição também, descomente:
- -- if (new.description is distinct from old.description) then
- -- raise exception 'Compromisso bloqueado não pode alterar descrição.';
- -- end if;
- end if;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.guard_locked_commitment() OWNER TO supabase_admin;
-
---
--- Name: guard_no_change_core_plan_key(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_no_change_core_plan_key() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if old.key in ('clinic_free','clinic_pro','therapist_free','therapist_pro')
- and new.key is distinct from old.key then
- raise exception 'Não é permitido alterar a key do plano padrão (%).', old.key
- using errcode = 'P0001';
- end if;
-
- return new;
-end $$;
-
-
-ALTER FUNCTION public.guard_no_change_core_plan_key() OWNER TO supabase_admin;
-
---
--- Name: guard_no_change_plan_target(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_no_change_plan_target() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- v_bypass text;
-begin
- -- bypass controlado por sessão/transação:
- -- só passa se app.plan_migration_bypass = '1'
- v_bypass := current_setting('app.plan_migration_bypass', true);
-
- if v_bypass = '1' then
- return new;
- end if;
-
- -- comportamento original (bloqueia qualquer mudança)
- if new.target is distinct from old.target then
- raise exception 'Não é permitido alterar target do plano (%) de % para %.',
- old.key, old.target, new.target
- using errcode = 'P0001';
- end if;
-
- return new;
-end
-$$;
-
-
-ALTER FUNCTION public.guard_no_change_plan_target() OWNER TO supabase_admin;
-
---
--- Name: guard_no_delete_core_plans(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_no_delete_core_plans() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if old.key in ('clinic_free','clinic_pro','therapist_free','therapist_pro') then
- raise exception 'Plano padrão (%) não pode ser removido.', old.key
- using errcode = 'P0001';
- end if;
-
- return old;
-end $$;
-
-
-ALTER FUNCTION public.guard_no_delete_core_plans() OWNER TO supabase_admin;
-
---
--- Name: guard_patient_cannot_own_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_patient_cannot_own_tenant() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_account_type text;
-BEGIN
- SELECT account_type INTO v_account_type
- FROM public.profiles
- WHERE id = NEW.user_id;
-
- IF v_account_type = 'patient' AND NEW.role IN ('tenant_admin', 'therapist') THEN
- RAISE EXCEPTION 'Usuário com perfil "patient" não pode ser proprietário ou terapeuta de um tenant. Se tornou profissional? Crie uma nova conta.'
- USING ERRCODE = 'P0001';
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.guard_patient_cannot_own_tenant() OWNER TO supabase_admin;
-
---
--- Name: guard_tenant_kind_immutable(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_tenant_kind_immutable() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF NEW.kind IS DISTINCT FROM OLD.kind THEN
- RAISE EXCEPTION 'tenants.kind é imutável após criação. Tentativa de alterar "%" para "%".', OLD.kind, NEW.kind
- USING ERRCODE = 'P0001';
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.guard_tenant_kind_immutable() OWNER TO supabase_admin;
-
---
--- Name: handle_new_user(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.handle_new_user() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-BEGIN
- INSERT INTO public.profiles (id, role, account_type)
- VALUES (NEW.id, 'portal_user', 'free')
- ON CONFLICT (id) DO NOTHING;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.handle_new_user() OWNER TO supabase_admin;
-
---
--- Name: handle_new_user_create_personal_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.handle_new_user_create_personal_tenant() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-BEGIN
- -- Desabilitado. Tenant criado no onboarding via provision_account_tenant().
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.handle_new_user_create_personal_tenant() OWNER TO supabase_admin;
-
---
--- Name: has_feature(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.owner_feature_entitlements e
- where e.owner_id = p_owner_id
- and e.feature_key = p_feature_key
- );
-$$;
-
-
-ALTER FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) OWNER TO supabase_admin;
-
---
--- Name: is_clinic_tenant(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_clinic_tenant(_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- SELECT EXISTS (
- SELECT 1 FROM public.tenants t
- WHERE t.id = _tenant_id
- AND t.kind IN ('clinic', 'clinic_coworking', 'clinic_reception', 'clinic_full')
- );
-$$;
-
-
-ALTER FUNCTION public.is_clinic_tenant(_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: is_saas_admin(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_saas_admin() RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1 from public.saas_admins sa
- where sa.user_id = auth.uid()
- );
-$$;
-
-
-ALTER FUNCTION public.is_saas_admin() OWNER TO supabase_admin;
-
---
--- Name: is_tenant_admin(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_tenant_admin(p_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
- select exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.role = 'tenant_admin'
- and tm.status = 'active'
- );
-$$;
-
-
-ALTER FUNCTION public.is_tenant_admin(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: is_tenant_member(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_tenant_member(_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.tenant_members m
- where m.tenant_id = _tenant_id
- and m.user_id = auth.uid()
- and m.status = 'active'
- );
-$$;
-
-
-ALTER FUNCTION public.is_tenant_member(_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: is_therapist_tenant(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_therapist_tenant(_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- SELECT EXISTS (
- SELECT 1 FROM public.tenants t
- WHERE t.id = _tenant_id AND t.kind = 'therapist'
- );
-$$;
-
-
-ALTER FUNCTION public.is_therapist_tenant(_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: jwt_email(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.jwt_email() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select nullif(lower(current_setting('request.jwt.claim.email', true)), '');
-$$;
-
-
-ALTER FUNCTION public.jwt_email() OWNER TO supabase_admin;
-
---
--- Name: my_tenants(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.my_tenants() RETURNS TABLE(tenant_id uuid, role text, status text, kind text)
- LANGUAGE sql STABLE
- AS $$
- select
- tm.tenant_id,
- tm.role,
- tm.status,
- t.kind
- from public.tenant_members tm
- join public.tenants t on t.id = tm.tenant_id
- where tm.user_id = auth.uid();
-$$;
-
-
-ALTER FUNCTION public.my_tenants() OWNER TO supabase_admin;
-
---
--- Name: on_new_user_seed_patient_groups(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.on_new_user_seed_patient_groups() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
- BEGIN
- PERFORM public.seed_default_patient_groups(NEW.id);
- RETURN NEW;
- END;
- $$;
-
-
-ALTER FUNCTION public.on_new_user_seed_patient_groups() OWNER TO supabase_admin;
-
---
--- Name: patients_validate_member_consistency(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.patients_validate_member_consistency() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_tenant_responsible uuid;
- v_tenant_therapist uuid;
-BEGIN
- -- responsible_member sempre deve existir e ser do tenant
- SELECT tenant_id INTO v_tenant_responsible
- FROM public.tenant_members
- WHERE id = NEW.responsible_member_id;
-
- IF v_tenant_responsible IS NULL THEN
- RAISE EXCEPTION 'Responsible member not found';
- END IF;
-
- IF NEW.tenant_id IS NULL THEN
- RAISE EXCEPTION 'tenant_id is required';
- END IF;
-
- IF v_tenant_responsible <> NEW.tenant_id THEN
- RAISE EXCEPTION 'Responsible member must belong to the same tenant';
- END IF;
-
- -- therapist scope: therapist_member_id deve existir e ser do mesmo tenant
- IF NEW.patient_scope = 'therapist' THEN
- IF NEW.therapist_member_id IS NULL THEN
- RAISE EXCEPTION 'therapist_member_id is required when patient_scope=therapist';
- END IF;
-
- SELECT tenant_id INTO v_tenant_therapist
- FROM public.tenant_members
- WHERE id = NEW.therapist_member_id;
-
- IF v_tenant_therapist IS NULL THEN
- RAISE EXCEPTION 'Therapist member not found';
- END IF;
-
- IF v_tenant_therapist <> NEW.tenant_id THEN
- RAISE EXCEPTION 'Therapist member must belong to the same tenant';
- END IF;
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.patients_validate_member_consistency() OWNER TO supabase_admin;
-
---
--- Name: patients_validate_responsible_member_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.patients_validate_responsible_member_tenant() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- m_tenant uuid;
-begin
- select tenant_id into m_tenant
- from public.tenant_members
- where id = new.responsible_member_id;
-
- if m_tenant is null then
- raise exception 'Responsible member not found';
- end if;
-
- if new.tenant_id is null then
- raise exception 'tenant_id is required';
- end if;
-
- if m_tenant <> new.tenant_id then
- raise exception 'Responsible member must belong to the same tenant';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.patients_validate_responsible_member_tenant() OWNER TO supabase_admin;
-
---
--- Name: prevent_promoting_to_system(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.prevent_promoting_to_system() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if new.is_system = true and old.is_system is distinct from true then
- raise exception 'Não é permitido transformar um grupo comum em grupo do sistema.';
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.prevent_promoting_to_system() OWNER TO supabase_admin;
-
---
--- Name: prevent_saas_membership(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.prevent_saas_membership() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF EXISTS (
- SELECT 1
- FROM public.profiles
- WHERE id = NEW.user_id
- AND role = 'saas_admin'
- ) THEN
- RAISE EXCEPTION 'SaaS admin cannot belong to tenant';
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.prevent_saas_membership() OWNER TO supabase_admin;
-
---
--- Name: prevent_system_group_changes(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.prevent_system_group_changes() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- -- Se for grupo do sistema, regras rígidas:
- if old.is_system = true then
-
- -- nunca pode deletar
- if tg_op = 'DELETE' then
- raise exception 'Grupos padrão do sistema não podem ser alterados ou excluídos.';
- end if;
-
- if tg_op = 'UPDATE' then
- -- permite SOMENTE mudar tenant_id e/ou updated_at
- -- qualquer mudança de conteúdo permanece proibida
- if
- new.nome is distinct from old.nome or
- new.descricao is distinct from old.descricao or
- new.cor is distinct from old.cor or
- new.is_active is distinct from old.is_active or
- new.is_system is distinct from old.is_system or
- new.owner_id is distinct from old.owner_id or
- new.therapist_id is distinct from old.therapist_id or
- new.created_at is distinct from old.created_at
- then
- raise exception 'Grupos padrão do sistema não podem ser alterados ou excluídos.';
- end if;
-
- -- chegou aqui: só tenant_id/updated_at mudaram -> ok
- return new;
- end if;
-
- end if;
-
- -- não-system: deixa passar
- if tg_op = 'DELETE' then
- return old;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.prevent_system_group_changes() OWNER TO supabase_admin;
-
---
--- Name: provision_account_tenant(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text DEFAULT NULL::text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-DECLARE
- v_tenant_id uuid;
- v_account_type text;
- v_name text;
-BEGIN
- IF p_kind NOT IN ('therapist', 'clinic_coworking', 'clinic_reception', 'clinic_full') THEN
- RAISE EXCEPTION 'kind inválido: "%". Use: therapist, clinic_coworking, clinic_reception, clinic_full.', p_kind
- USING ERRCODE = 'P0001';
- END IF;
-
- v_account_type := CASE WHEN p_kind = 'therapist' THEN 'therapist' ELSE 'clinic' END;
-
- IF EXISTS (
- SELECT 1
- FROM public.tenant_members tm
- JOIN public.tenants t ON t.id = tm.tenant_id
- WHERE tm.user_id = p_user_id
- AND tm.role = 'tenant_admin'
- AND tm.status = 'active'
- AND t.kind = p_kind
- ) THEN
- RAISE EXCEPTION 'Usuário já possui um tenant do tipo "%".', p_kind
- USING ERRCODE = 'P0001';
- END IF;
-
- v_name := COALESCE(
- NULLIF(TRIM(p_name), ''),
- (
- SELECT COALESCE(NULLIF(TRIM(pr.full_name), ''), SPLIT_PART(au.email, '@', 1))
- FROM public.profiles pr
- JOIN auth.users au ON au.id = pr.id
- WHERE pr.id = p_user_id
- ),
- 'Conta'
- );
-
- INSERT INTO public.tenants (name, kind, created_at)
- VALUES (v_name, p_kind, now())
- RETURNING id INTO v_tenant_id;
-
- INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
- VALUES (v_tenant_id, p_user_id, 'tenant_admin', 'active', now());
-
- UPDATE public.profiles
- SET account_type = v_account_type
- WHERE id = p_user_id;
-
- PERFORM public.seed_determined_commitments(v_tenant_id);
-
- RETURN v_tenant_id;
-END;
-$$;
-
-
-ALTER FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) OWNER TO supabase_admin;
-
---
--- Name: FUNCTION provision_account_tenant(p_user_id uuid, p_kind text, p_name text); Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) IS 'Cria o tenant do tipo correto e atualiza account_type no profile. Chamar no onboarding após escolha/pagamento de plano therapist ou clinic. p_kind: therapist | clinic_coworking | clinic_reception | clinic_full';
-
-
---
--- Name: reactivate_subscription(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.reactivate_subscription(p_subscription_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_owner_type text;
- v_owner_ref uuid;
-begin
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- if v_sub.status = 'active' then
- return v_sub;
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set status = 'active',
- cancel_at_period_end = false,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'reactivated',
- v_sub.plan_id,
- v_sub.plan_id,
- auth.uid(),
- 'Reativação manual via admin',
- 'admin_panel',
- jsonb_build_object('previous_status', 'canceled')
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation(owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-
-end;
-$$;
-
-
-ALTER FUNCTION public.reactivate_subscription(p_subscription_id uuid) OWNER TO supabase_admin;
-
---
--- Name: rebuild_owner_entitlements(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_plan_id uuid;
-begin
- -- Plano ativo do owner (owner = subscriptions.user_id)
- select s.plan_id
- into v_plan_id
- from public.subscriptions s
- where s.user_id = p_owner_id
- and s.status = 'active'
- order by s.created_at desc
- limit 1;
-
- -- Sempre zera entitlements do owner (rebuild)
- delete from public.owner_feature_entitlements e
- where e.owner_id = p_owner_id;
-
- -- Se não tem assinatura ativa, acabou
- if v_plan_id is null then
- return;
- end if;
-
- -- Recria entitlements esperados pelo plano
- insert into public.owner_feature_entitlements (owner_id, feature_key, sources, limits_list)
- select
- p_owner_id as owner_id,
- f.key as feature_key,
- array['plan'::text] as sources,
- '{}'::jsonb as limits_list
- from public.plan_features pf
- join public.features f on f.id = pf.feature_id
- where pf.plan_id = v_plan_id;
-
-end;
-$$;
-
-
-ALTER FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) OWNER TO supabase_admin;
-
---
--- Name: revoke_support_session(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.revoke_support_session(p_token text) RETURNS boolean
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_admin_id uuid;
- v_role text;
-BEGIN
- v_admin_id := auth.uid();
- IF v_admin_id IS NULL THEN
- RAISE EXCEPTION 'Não autenticado.' USING ERRCODE = 'P0001';
- END IF;
-
- SELECT role INTO v_role FROM public.profiles WHERE id = v_admin_id;
- IF v_role <> 'saas_admin' THEN
- RAISE EXCEPTION 'Acesso negado.' USING ERRCODE = 'P0002';
- END IF;
-
- DELETE FROM public.support_sessions
- WHERE token = p_token
- AND admin_id = v_admin_id;
-
- RETURN FOUND;
-END;
-$$;
-
-
-ALTER FUNCTION public.revoke_support_session(p_token text) OWNER TO supabase_admin;
-
---
--- Name: rotate_patient_invite_token(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.rotate_patient_invite_token(p_new_token text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_uid uuid;
- v_id uuid;
-begin
- -- pega o usuário logado
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'Usuário não autenticado';
- end if;
-
- -- desativa tokens antigos ativos do usuário
- update public.patient_invites
- set active = false
- where owner_id = v_uid
- and active = true;
-
- -- cria novo token
- insert into public.patient_invites (owner_id, token, active)
- values (v_uid, p_new_token, true)
- returning id into v_id;
-
- return v_id;
-end;
-$$;
-
-
-ALTER FUNCTION public.rotate_patient_invite_token(p_new_token text) OWNER TO supabase_admin;
-
---
--- Name: saas_votar_doc(uuid, boolean); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_uid uuid := auth.uid();
- v_voto_antigo boolean;
-begin
- if v_uid is null then
- raise exception 'Não autenticado';
- end if;
-
- -- Verifica se já votou
- select util into v_voto_antigo
- from public.saas_doc_votos
- where doc_id = p_doc_id and user_id = v_uid;
-
- if found then
- -- Já votou igual → cancela o voto (toggle)
- if v_voto_antigo = p_util then
- delete from public.saas_doc_votos
- where doc_id = p_doc_id and user_id = v_uid;
-
- update public.saas_docs set
- votos_util = greatest(0, votos_util - (case when p_util then 1 else 0 end)),
- votos_nao_util = greatest(0, votos_nao_util - (case when not p_util then 1 else 0 end)),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'removido', 'util', null);
- else
- -- Mudou de voto
- update public.saas_doc_votos set util = p_util, updated_at = now()
- where doc_id = p_doc_id and user_id = v_uid;
-
- update public.saas_docs set
- votos_util = greatest(0, votos_util + (case when p_util then 1 else -1 end)),
- votos_nao_util = greatest(0, votos_nao_util + (case when not p_util then 1 else -1 end)),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'atualizado', 'util', p_util);
- end if;
- else
- -- Primeiro voto
- insert into public.saas_doc_votos (doc_id, user_id, util)
- values (p_doc_id, v_uid, p_util);
-
- update public.saas_docs set
- votos_util = votos_util + (case when p_util then 1 else 0 end),
- votos_nao_util = votos_nao_util + (case when not p_util then 1 else 0 end),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'registrado', 'util', p_util);
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) OWNER TO supabase_admin;
-
---
--- Name: seed_determined_commitments(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.seed_determined_commitments(p_tenant_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_id uuid;
-begin
- -- Sessão (locked + sempre ativa)
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'session'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'session', true, true, 'Sessão', 'Sessão com paciente');
- end if;
-
- -- Leitura
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'reading'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'reading', false, true, 'Leitura', 'Praticar leitura');
- end if;
-
- -- Supervisão
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'supervision'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'supervision', false, true, 'Supervisão', 'Supervisão');
- end if;
-
- -- Aula ✅ (corrigido)
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'class'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'class', false, false, 'Aula', 'Dar aula');
- end if;
-
- -- Análise pessoal
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'analysis'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'analysis', false, true, 'Análise Pessoal', 'Minha análise pessoal');
- end if;
-
- -- -------------------------------------------------------
- -- Campos padrão (idempotentes por (commitment_id, key))
- -- -------------------------------------------------------
-
- -- Leitura
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'reading'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'book') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'book', 'Livro', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'author') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'author', 'Autor', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Supervisão
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'supervision'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'supervisor') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'supervisor', 'Supervisor', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'topic') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'topic', 'Assunto', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Aula
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'class'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'theme') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'theme', 'Tema', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'group') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'group', 'Turma', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Análise
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'analysis'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'analyst') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'analyst', 'Analista', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'focus') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'focus', 'Foco', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.seed_determined_commitments(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: set_insurance_plans_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_insurance_plans_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN NEW.updated_at = now(); RETURN NEW; END; $$;
-
-
-ALTER FUNCTION public.set_insurance_plans_updated_at() OWNER TO supabase_admin;
-
---
--- Name: set_owner_id(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_owner_id() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if new.owner_id is null then
- new.owner_id := auth.uid();
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.set_owner_id() OWNER TO supabase_admin;
-
---
--- Name: set_services_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_services_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.set_services_updated_at() OWNER TO supabase_admin;
-
---
--- Name: set_tenant_feature_exception(uuid, text, boolean, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text DEFAULT NULL::text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-begin
- -- ✅ Só owner ou admin do tenant podem alterar features
- if not exists (
- select 1 from public.tenant_members
- where tenant_id = p_tenant_id
- and user_id = auth.uid()
- and role in ('owner', 'admin')
- and status = 'active'
- ) then
- raise exception 'Acesso negado: apenas owner/admin pode alterar features do tenant.';
- end if;
-
- insert into public.tenant_features (tenant_id, feature_key, enabled)
- values (p_tenant_id, p_feature_key, p_enabled)
- on conflict (tenant_id, feature_key)
- do update set enabled = excluded.enabled;
-
- insert into public.tenant_feature_exceptions_log (
- tenant_id, feature_key, enabled, reason, created_by
- ) values (
- p_tenant_id, p_feature_key, p_enabled, p_reason, auth.uid()
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) OWNER TO supabase_admin;
-
---
--- Name: set_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- new.updated_at = now();
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.set_updated_at() OWNER TO supabase_admin;
-
---
--- Name: set_updated_at_recurrence(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_updated_at_recurrence() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN NEW.updated_at = now(); RETURN NEW; END;
-$$;
-
-
-ALTER FUNCTION public.set_updated_at_recurrence() OWNER TO supabase_admin;
-
---
--- Name: split_recurrence_at(uuid, date); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_old public.recurrence_rules;
- v_new_id uuid;
-BEGIN
- -- busca a regra original
- SELECT * INTO v_old
- FROM public.recurrence_rules
- WHERE id = p_recurrence_id;
-
- IF NOT FOUND THEN
- RAISE EXCEPTION 'recurrence_rule % não encontrada', p_recurrence_id;
- END IF;
-
- -- encerra a regra antiga na data anterior
- UPDATE public.recurrence_rules
- SET
- end_date = p_from_date - INTERVAL '1 day',
- open_ended = false,
- updated_at = now()
- WHERE id = p_recurrence_id;
-
- -- cria nova regra a partir de p_from_date
- INSERT INTO public.recurrence_rules (
- tenant_id, owner_id, therapist_id, patient_id,
- determined_commitment_id, type, interval, weekdays,
- start_time, end_time, timezone, duration_min,
- start_date, end_date, max_occurrences, open_ended,
- modalidade, titulo_custom, observacoes, extra_fields, status
- )
- SELECT
- tenant_id, owner_id, therapist_id, patient_id,
- determined_commitment_id, type, interval, weekdays,
- start_time, end_time, timezone, duration_min,
- p_from_date, v_old.end_date, v_old.max_occurrences, v_old.open_ended,
- modalidade, titulo_custom, observacoes, extra_fields, status
- FROM public.recurrence_rules
- WHERE id = p_recurrence_id
- RETURNING id INTO v_new_id;
-
- RETURN v_new_id;
-END;
-$$;
-
-
-ALTER FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_view_insert(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.subscription_intents_view_insert() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_target text;
- v_plan_id uuid;
-begin
- select p.id, p.target into v_plan_id, v_target
- from public.plans p
- where p.key = new.plan_key;
-
- if v_plan_id is null then
- raise exception 'Plano inválido: plan_key=%', new.plan_key;
- end if;
-
- if lower(v_target) = 'clinic' then
- if new.tenant_id is null then
- raise exception 'Intenção clinic exige tenant_id.';
- end if;
-
- insert into public.subscription_intents_tenant (
- id, tenant_id, created_by_user_id, email,
- plan_id, plan_key, interval, amount_cents, currency,
- status, source, notes, created_at, paid_at
- ) values (
- coalesce(new.id, gen_random_uuid()),
- new.tenant_id, new.created_by_user_id, new.email,
- v_plan_id, new.plan_key, coalesce(new.interval,'month'),
- new.amount_cents, coalesce(new.currency,'BRL'),
- coalesce(new.status,'pending'), coalesce(new.source,'manual'),
- new.notes, coalesce(new.created_at, now()), new.paid_at
- );
-
- new.plan_target := 'clinic';
- return new;
- end if;
-
- -- therapist ou supervisor → tabela personal
- if lower(v_target) in ('therapist', 'supervisor') then
- insert into public.subscription_intents_personal (
- id, user_id, created_by_user_id, email,
- plan_id, plan_key, interval, amount_cents, currency,
- status, source, notes, created_at, paid_at
- ) values (
- coalesce(new.id, gen_random_uuid()),
- new.user_id, new.created_by_user_id, new.email,
- v_plan_id, new.plan_key, coalesce(new.interval,'month'),
- new.amount_cents, coalesce(new.currency,'BRL'),
- coalesce(new.status,'pending'), coalesce(new.source,'manual'),
- new.notes, coalesce(new.created_at, now()), new.paid_at
- );
-
- new.plan_target := lower(v_target); -- 'therapist' ou 'supervisor'
- return new;
- end if;
-
- raise exception 'Target de plano não suportado: %', v_target;
-end;
-$$;
-
-
-ALTER FUNCTION public.subscription_intents_view_insert() OWNER TO supabase_admin;
-
---
--- Name: subscriptions_validate_scope(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.subscriptions_validate_scope() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_target text;
-BEGIN
- SELECT lower(p.target) INTO v_target
- FROM public.plans p
- WHERE p.id = NEW.plan_id;
-
- IF v_target IS NULL THEN
- RAISE EXCEPTION 'Plano inválido (target nulo).';
- END IF;
-
- IF v_target = 'clinic' THEN
- IF NEW.tenant_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura clinic exige tenant_id.';
- END IF;
- IF NEW.user_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura clinic não pode ter user_id (XOR).';
- END IF;
-
- ELSIF v_target IN ('therapist', 'supervisor') THEN
- -- supervisor é pessoal como therapist
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura % não deve ter tenant_id.', v_target;
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura % exige user_id.', v_target;
- END IF;
-
- ELSIF v_target = 'patient' THEN
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura patient não deve ter tenant_id.';
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura patient exige user_id.';
- END IF;
-
- ELSE
- RAISE EXCEPTION 'Target de plano inválido: %', v_target;
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.subscriptions_validate_scope() OWNER TO supabase_admin;
-
---
--- Name: sync_busy_mirror_agenda_eventos(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.sync_busy_mirror_agenda_eventos() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- clinic_tenant uuid;
- is_personal boolean;
- should_mirror boolean;
-begin
- -- Anti-recursão: espelho não espelha
- if (tg_op <> 'DELETE') then
- if new.mirror_of_event_id is not null then
- return new;
- end if;
- else
- if old.mirror_of_event_id is not null then
- return old;
- end if;
- end if;
-
- -- Define se é pessoal e se deve espelhar
- if (tg_op = 'DELETE') then
- is_personal := (old.tenant_id = old.owner_id);
- should_mirror := (old.visibility_scope in ('busy_only','private'));
- else
- is_personal := (new.tenant_id = new.owner_id);
- should_mirror := (new.visibility_scope in ('busy_only','private'));
- end if;
-
- -- Se não é pessoal, não faz nada
- if not is_personal then
- if (tg_op = 'DELETE') then
- return old;
- end if;
- return new;
- end if;
-
- -- DELETE: remove espelhos existentes
- if (tg_op = 'DELETE') then
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = old.id
- and e.mirror_source = 'personal_busy_mirror';
-
- return old;
- end if;
-
- -- INSERT/UPDATE:
- -- Se não deve espelhar, remove espelhos e sai
- if not should_mirror then
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = new.id
- and e.mirror_source = 'personal_busy_mirror';
-
- return new;
- end if;
-
- -- Para cada clínica onde o usuário é therapist active, cria/atualiza o "Ocupado"
- for clinic_tenant in
- select tm.tenant_id
- from public.tenant_members tm
- where tm.user_id = new.owner_id
- and tm.role = 'therapist'
- and tm.status = 'active'
- and tm.tenant_id <> new.owner_id
- loop
- insert into public.agenda_eventos (
- tenant_id,
- owner_id,
- terapeuta_id,
- paciente_id,
- tipo,
- status,
- titulo,
- observacoes,
- inicio_em,
- fim_em,
- mirror_of_event_id,
- mirror_source,
- visibility_scope,
- created_at,
- updated_at
- ) values (
- clinic_tenant,
- new.owner_id,
- new.owner_id,
- null,
- 'bloqueio'::public.tipo_evento_agenda,
- 'agendado'::public.status_evento_agenda,
- 'Ocupado',
- null,
- new.inicio_em,
- new.fim_em,
- new.id,
- 'personal_busy_mirror',
- 'public',
- now(),
- now()
- )
- on conflict (tenant_id, mirror_of_event_id) where mirror_of_event_id is not null
- do update set
- owner_id = excluded.owner_id,
- terapeuta_id = excluded.terapeuta_id,
- tipo = excluded.tipo,
- status = excluded.status,
- titulo = excluded.titulo,
- observacoes = excluded.observacoes,
- inicio_em = excluded.inicio_em,
- fim_em = excluded.fim_em,
- updated_at = now();
- end loop;
-
- -- Limpa espelhos de clínicas onde o vínculo therapist active não existe mais
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = new.id
- and e.mirror_source = 'personal_busy_mirror'
- and not exists (
- select 1
- from public.tenant_members tm
- where tm.user_id = new.owner_id
- and tm.role = 'therapist'
- and tm.status = 'active'
- and tm.tenant_id = e.tenant_id
- );
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.sync_busy_mirror_agenda_eventos() OWNER TO supabase_admin;
-
---
--- Name: tenant_accept_invite(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_accept_invite(p_token uuid) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-declare
- v_uid uuid;
- v_email text;
- v_invite public.tenant_invites%rowtype;
-begin
- -- 1) precisa estar autenticado
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'not_authenticated' using errcode = 'P0001';
- end if;
-
- -- 2) pega email real do usuário logado sem depender do JWT claim
- select u.email
- into v_email
- from auth.users u
- where u.id = v_uid;
-
- if v_email is null or length(trim(v_email)) = 0 then
- raise exception 'missing_user_email' using errcode = 'P0001';
- end if;
-
- -- 3) carrega o invite e trava linha (evita 2 aceites concorrentes)
- select *
- into v_invite
- from public.tenant_invites i
- where i.token = p_token
- for update;
-
- if not found then
- raise exception 'invite_not_found' using errcode = 'P0001';
- end if;
-
- -- 4) validações de estado
- if v_invite.revoked_at is not null then
- raise exception 'invite_revoked' using errcode = 'P0001';
- end if;
-
- if v_invite.accepted_at is not null then
- raise exception 'invite_already_accepted' using errcode = 'P0001';
- end if;
-
- if v_invite.expires_at is not null and v_invite.expires_at <= now() then
- raise exception 'invite_expired' using errcode = 'P0001';
- end if;
-
- -- 5) valida email (case-insensitive)
- if lower(trim(v_invite.email)) <> lower(trim(v_email)) then
- raise exception 'email_mismatch' using errcode = 'P0001';
- end if;
-
- -- 6) consome o invite
- update public.tenant_invites
- set accepted_at = now(),
- accepted_by = v_uid
- where id = v_invite.id;
-
- -- 7) cria ou reativa o membership
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_invite.tenant_id, v_uid, v_invite.role, 'active', now())
- on conflict (tenant_id, user_id)
- do update set
- role = excluded.role,
- status = 'active';
-
- -- 8) retorno útil pro front (você já tenta ler tenant_id no AcceptInvitePage)
- return jsonb_build_object(
- 'ok', true,
- 'tenant_id', v_invite.tenant_id,
- 'role', v_invite.role
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_accept_invite(p_token uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_members; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_members (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- user_id uuid NOT NULL,
- role text NOT NULL,
- status text DEFAULT 'active'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_members OWNER TO supabase_admin;
-
---
--- Name: tenant_add_member_by_email(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text DEFAULT 'therapist'::text) RETURNS public.tenant_members
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-declare
- v_target_uid uuid;
- v_member public.tenant_members%rowtype;
- v_is_admin boolean;
- v_email text;
-begin
- if p_tenant_id is null then
- raise exception 'tenant_id é obrigatório';
- end if;
-
- v_email := lower(trim(coalesce(p_email, '')));
- if v_email = '' then
- raise exception 'email é obrigatório';
- end if;
-
- -- valida role permitida
- if p_role not in ('tenant_admin','therapist','secretary','patient') then
- raise exception 'role inválida: %', p_role;
- end if;
-
- -- apenas admin do tenant (role real no banco)
- select exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.role = 'tenant_admin'
- and coalesce(tm.status,'active') = 'active'
- ) into v_is_admin;
-
- if not v_is_admin then
- raise exception 'sem permissão: apenas admin da clínica pode adicionar membros';
- end if;
-
- -- acha usuário pelo e-mail no Supabase Auth
- select u.id
- into v_target_uid
- from auth.users u
- where lower(u.email) = v_email
- limit 1;
-
- if v_target_uid is null then
- raise exception 'nenhum usuário encontrado com este e-mail';
- end if;
-
- -- cria ou reativa membro
- insert into public.tenant_members (tenant_id, user_id, role, status)
- values (p_tenant_id, v_target_uid, p_role, 'active')
- on conflict (tenant_id, user_id)
- do update set
- role = excluded.role,
- status = 'active'
- returning * into v_member;
-
- return v_member;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) OWNER TO supabase_admin;
-
---
--- Name: tenant_feature_allowed(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.v_tenant_entitlements v
- where v.tenant_id = p_tenant_id
- and v.feature_key = p_feature_key
- and coalesce(v.allowed, false) = true
- );
-$$;
-
-
-ALTER FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) OWNER TO supabase_admin;
-
---
--- Name: tenant_feature_enabled(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select coalesce(
- (select tf.enabled
- from public.tenant_features tf
- where tf.tenant_id = p_tenant_id and tf.feature_key = p_feature_key),
- false
- );
-$$;
-
-
-ALTER FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) OWNER TO supabase_admin;
-
---
--- Name: tenant_features_guard_with_plan(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_features_guard_with_plan() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- v_allowed boolean;
-begin
- -- só valida quando está habilitando
- if new.enabled is distinct from true then
- return new;
- end if;
-
- -- permitido pelo plano do tenant?
- select exists (
- select 1
- from public.v_tenant_entitlements_full v
- where v.tenant_id = new.tenant_id
- and v.feature_key = new.feature_key
- and v.allowed = true
- )
- into v_allowed;
-
- if not v_allowed then
- raise exception 'Feature % não permitida pelo plano atual do tenant %.',
- new.feature_key, new.tenant_id
- using errcode = 'P0001';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_features_guard_with_plan() OWNER TO supabase_admin;
-
---
--- Name: tenant_has_feature(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select
- exists (
- select 1
- from public.v_tenant_entitlements e
- where e.tenant_id = _tenant_id
- and e.feature_key = _feature
- and e.allowed = true
- )
- or exists (
- select 1
- from public.tenant_features tf
- where tf.tenant_id = _tenant_id
- and tf.feature_key = _feature
- and tf.enabled = true
- );
-$$;
-
-
-ALTER FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) OWNER TO supabase_admin;
-
---
--- Name: tenant_invite_member_by_email(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-declare
- v_email text;
- v_my_email text;
- v_token uuid;
- v_updated int;
-begin
- -- validações básicas
- if p_tenant_id is null then
- raise exception 'tenant_id inválido' using errcode = 'P0001';
- end if;
-
- v_email := lower(trim(coalesce(p_email, '')));
- if v_email = '' then
- raise exception 'Informe um email' using errcode = 'P0001';
- end if;
-
- -- role permitido (ajuste se quiser)
- if p_role is null or p_role not in ('therapist', 'secretary') then
- raise exception 'Role inválido (use therapist/secretary)' using errcode = 'P0001';
- end if;
-
- -- ✅ bloqueio: auto-convite
- v_my_email := public.get_my_email();
- if v_my_email is not null and v_email = v_my_email then
- raise exception 'Você não pode convidar o seu próprio email.' using errcode = 'P0001';
- end if;
-
- -- ✅ bloqueio: já é membro ativo do tenant
- if exists (
- select 1
- from tenant_members tm
- join auth.users au on au.id = tm.user_id
- where tm.tenant_id = p_tenant_id
- and tm.status = 'active'
- and lower(au.email) = v_email
- ) then
- raise exception 'Este email já está vinculado a esta clínica.' using errcode = 'P0001';
- end if;
-
- -- ✅ permissão: só admin do tenant pode convidar
- if not exists (
- select 1
- from tenant_members me
- where me.tenant_id = p_tenant_id
- and me.user_id = auth.uid()
- and me.status = 'active'
- and me.role in ('tenant_admin','clinic_admin')
- ) then
- raise exception 'Sem permissão para convidar membros.' using errcode = 'P0001';
- end if;
-
- -- Gera token (reenvio simples / regeneração)
- v_token := gen_random_uuid();
-
- -- 1) tenta "regerar" um convite pendente existente (mesmo email)
- update tenant_invites
- set token = v_token,
- role = p_role,
- created_at = now(),
- expires_at = now() + interval '7 days',
- accepted_at = null,
- revoked_at = null
- where tenant_id = p_tenant_id
- and lower(email) = v_email
- and accepted_at is null
- and revoked_at is null;
-
- get diagnostics v_updated = row_count;
-
- -- 2) se não atualizou nada, cria convite novo
- if v_updated = 0 then
- insert into tenant_invites (tenant_id, email, role, token, created_at, expires_at)
- values (p_tenant_id, v_email, p_role, v_token, now(), now() + interval '7 days');
- end if;
-
- return v_token;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) OWNER TO supabase_admin;
-
---
--- Name: tenant_reactivate_member(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- update public.tenant_members
- set status = 'active'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_remove_member(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-declare
- v_role text;
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- if p_member_user_id = auth.uid() then
- raise exception 'cannot_remove_self';
- end if;
-
- -- pega role atual do membro (se não existir, erro)
- select role into v_role
- from public.tenant_members
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if v_role is null then
- raise exception 'membership_not_found';
- end if;
-
- -- trava: se for therapist, não pode remover com eventos futuros
- if v_role = 'therapist' then
- if exists (
- select 1
- from public.agenda_eventos e
- where e.owner_id = p_tenant_id
- and e.terapeuta_id = p_member_user_id
- and e.inicio_em >= now()
- and e.status::text not in ('cancelado','cancelled','canceled')
- limit 1
- ) then
- raise exception 'cannot_remove_therapist_with_future_events';
- end if;
- end if;
-
- update public.tenant_members
- set status = 'inactive'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_remove_member_soft(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- if p_member_user_id = auth.uid() then
- raise exception 'cannot_remove_self';
- end if;
-
- update public.tenant_members
- set status = 'inactive'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_revoke_invite(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-declare
- v_email text;
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- v_email := lower(trim(p_email));
-
- update public.tenant_invites
- set revoked_at = now(),
- revoked_by = auth.uid()
- where tenant_id = p_tenant_id
- and lower(email) = v_email
- and role = p_role
- and accepted_at is null
- and revoked_at is null;
-
- if not found then
- raise exception 'invite_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) OWNER TO supabase_admin;
-
---
--- Name: tenant_set_member_status(uuid, uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- -- valida status (adapte aos seus valores reais)
- if p_new_status not in ('active','inactive','suspended','invited') then
- raise exception 'invalid_status: %', p_new_status;
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- -- evita desativar a si mesmo (opcional)
- if p_member_user_id = auth.uid() and p_new_status <> 'active' then
- raise exception 'cannot_disable_self';
- end if;
-
- update public.tenant_members
- set status = p_new_status
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) OWNER TO supabase_admin;
-
---
--- Name: tenant_update_member_role(uuid, uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- -- exige auth
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- -- valida role
- if p_new_role not in ('tenant_admin','therapist','secretary','patient') then
- raise exception 'invalid_role: %', p_new_role;
- end if;
-
- -- somente tenant_admin ativo pode alterar role
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- -- evita o admin remover o próprio admin sem querer (opcional mas recomendado)
- if p_member_user_id = auth.uid() and p_new_role <> 'tenant_admin' then
- raise exception 'cannot_demote_self';
- end if;
-
- update public.tenant_members
- set role = p_new_role
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) OWNER TO supabase_admin;
-
---
--- Name: toggle_plan(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.toggle_plan(owner uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- current_key text;
- new_key text;
-begin
- select p.key into current_key
- from subscriptions s
- join plans p on p.id = s.plan_id
- where s.owner_id = owner
- and s.status = 'active';
-
- new_key := case
- when current_key = 'pro' then 'free'
- else 'pro'
- end;
-
- update subscriptions s
- set plan_id = p.id
- from plans p
- where p.key = new_key
- and s.owner_id = owner
- and s.status = 'active';
-end;
-$$;
-
-
-ALTER FUNCTION public.toggle_plan(owner uuid) OWNER TO supabase_admin;
-
---
--- Name: transition_subscription(uuid, text, text, jsonb); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text DEFAULT NULL::text, p_metadata jsonb DEFAULT NULL::jsonb) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_uid uuid;
- v_is_allowed boolean := false;
-begin
- v_uid := auth.uid();
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id;
-
- if not found then
- raise exception 'Assinatura não encontrada';
- end if;
-
- -- =====================================================
- -- 🔐 BLOCO DE AUTORIZAÇÃO
- -- =====================================================
-
- -- 1) SaaS admin pode tudo
- if is_saas_admin() then
- v_is_allowed := true;
- end if;
-
- -- 2) Assinatura pessoal (therapist)
- if not v_is_allowed
- and v_sub.tenant_id is null
- and v_sub.user_id = v_uid then
- v_is_allowed := true;
- end if;
-
- -- 3) Assinatura de clinic (tenant)
- if not v_is_allowed
- and v_sub.tenant_id is not null then
-
- if exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = v_sub.tenant_id
- and tm.user_id = v_uid
- and tm.status = 'active'
- and tm.role = 'tenant_admin'
- ) then
- v_is_allowed := true;
- end if;
-
- end if;
-
- if not v_is_allowed then
- raise exception 'Sem permissão para transicionar esta assinatura';
- end if;
-
- -- =====================================================
- -- 🧠 TRANSIÇÃO
- -- =====================================================
-
- update public.subscriptions
- set status = p_to_status,
- updated_at = now(),
- cancelled_at = case when p_to_status = 'cancelled' then now() else cancelled_at end,
- suspended_at = case when p_to_status = 'suspended' then now() else suspended_at end,
- past_due_since = case when p_to_status = 'past_due' then now() else past_due_since end,
- expired_at = case when p_to_status = 'expired' then now() else expired_at end,
- activated_at = case when p_to_status = 'active' then now() else activated_at end
- where id = p_subscription_id
- returning * into v_sub;
-
- -- =====================================================
- -- 🧾 EVENT LOG
- -- =====================================================
-
- insert into public.subscription_events (
- subscription_id,
- owner_id,
- event_type,
- created_at,
- created_by,
- source,
- reason,
- metadata,
- owner_type,
- owner_ref
- )
- values (
- v_sub.id,
- coalesce(v_sub.tenant_id, v_sub.user_id),
- 'status_changed',
- now(),
- v_uid,
- 'manual_transition',
- p_reason,
- p_metadata,
- case when v_sub.tenant_id is not null then 'tenant' else 'personal' end,
- coalesce(v_sub.tenant_id, v_sub.user_id)
- );
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) OWNER TO supabase_admin;
-
---
--- Name: update_payment_settings_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.update_payment_settings_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.update_payment_settings_updated_at() OWNER TO supabase_admin;
-
---
--- Name: update_professional_pricing_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.update_professional_pricing_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.update_professional_pricing_updated_at() OWNER TO supabase_admin;
-
---
--- Name: user_has_feature(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.user_has_feature(_user_id uuid, _feature text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.v_user_entitlements e
- where e.user_id = _user_id
- and e.feature_key = _feature
- and e.allowed = true
- );
-$$;
-
-
-ALTER FUNCTION public.user_has_feature(_user_id uuid, _feature text) OWNER TO supabase_admin;
-
---
--- Name: validate_support_session(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.validate_support_session(p_token text) RETURNS json
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_session support_sessions;
-BEGIN
- IF p_token IS NULL OR length(trim(p_token)) < 32 THEN
- RETURN json_build_object('valid', false, 'tenant_id', null);
- END IF;
-
- SELECT * INTO v_session
- FROM public.support_sessions
- WHERE token = p_token
- AND expires_at > now()
- LIMIT 1;
-
- IF NOT FOUND THEN
- RETURN json_build_object('valid', false, 'tenant_id', null);
- END IF;
-
- RETURN json_build_object(
- 'valid', true,
- 'tenant_id', v_session.tenant_id
- );
-END;
-$$;
-
-
-ALTER FUNCTION public.validate_support_session(p_token text) OWNER TO supabase_admin;
-
---
--- Name: whoami(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.whoami() RETURNS TABLE(uid uuid, role text)
- LANGUAGE sql STABLE
- AS $$
- select auth.uid() as uid, auth.role() as role;
-$$;
-
-
-ALTER FUNCTION public.whoami() OWNER TO supabase_admin;
-
---
--- Name: apply_rls(jsonb, integer); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer DEFAULT (1024 * 1024)) RETURNS SETOF realtime.wal_rls
- LANGUAGE plpgsql
- AS $$
-declare
--- Regclass of the table e.g. public.notes
-entity_ regclass = (quote_ident(wal ->> 'schema') || '.' || quote_ident(wal ->> 'table'))::regclass;
-
--- I, U, D, T: insert, update ...
-action realtime.action = (
- case wal ->> 'action'
- when 'I' then 'INSERT'
- when 'U' then 'UPDATE'
- when 'D' then 'DELETE'
- else 'ERROR'
- end
-);
-
--- Is row level security enabled for the table
-is_rls_enabled bool = relrowsecurity from pg_class where oid = entity_;
-
-subscriptions realtime.subscription[] = array_agg(subs)
- from
- realtime.subscription subs
- where
- subs.entity = entity_;
-
--- Subscription vars
-roles regrole[] = array_agg(distinct us.claims_role::text)
- from
- unnest(subscriptions) us;
-
-working_role regrole;
-claimed_role regrole;
-claims jsonb;
-
-subscription_id uuid;
-subscription_has_access bool;
-visible_to_subscription_ids uuid[] = '{}';
-
--- structured info for wal's columns
-columns realtime.wal_column[];
--- previous identity values for update/delete
-old_columns realtime.wal_column[];
-
-error_record_exceeds_max_size boolean = octet_length(wal::text) > max_record_bytes;
-
--- Primary jsonb output for record
-output jsonb;
-
-begin
-perform set_config('role', null, true);
-
-columns =
- array_agg(
- (
- x->>'name',
- x->>'type',
- x->>'typeoid',
- realtime.cast(
- (x->'value') #>> '{}',
- coalesce(
- (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4
- (x->>'type')::regtype
- )
- ),
- (pks ->> 'name') is not null,
- true
- )::realtime.wal_column
- )
- from
- jsonb_array_elements(wal -> 'columns') x
- left join jsonb_array_elements(wal -> 'pk') pks
- on (x ->> 'name') = (pks ->> 'name');
-
-old_columns =
- array_agg(
- (
- x->>'name',
- x->>'type',
- x->>'typeoid',
- realtime.cast(
- (x->'value') #>> '{}',
- coalesce(
- (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4
- (x->>'type')::regtype
- )
- ),
- (pks ->> 'name') is not null,
- true
- )::realtime.wal_column
- )
- from
- jsonb_array_elements(wal -> 'identity') x
- left join jsonb_array_elements(wal -> 'pk') pks
- on (x ->> 'name') = (pks ->> 'name');
-
-for working_role in select * from unnest(roles) loop
-
- -- Update `is_selectable` for columns and old_columns
- columns =
- array_agg(
- (
- c.name,
- c.type_name,
- c.type_oid,
- c.value,
- c.is_pkey,
- pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')
- )::realtime.wal_column
- )
- from
- unnest(columns) c;
-
- old_columns =
- array_agg(
- (
- c.name,
- c.type_name,
- c.type_oid,
- c.value,
- c.is_pkey,
- pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')
- )::realtime.wal_column
- )
- from
- unnest(old_columns) c;
-
- if action <> 'DELETE' and count(1) = 0 from unnest(columns) c where c.is_pkey then
- return next (
- jsonb_build_object(
- 'schema', wal ->> 'schema',
- 'table', wal ->> 'table',
- 'type', action
- ),
- is_rls_enabled,
- -- subscriptions is already filtered by entity
- (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),
- array['Error 400: Bad Request, no primary key']
- )::realtime.wal_rls;
-
- -- The claims role does not have SELECT permission to the primary key of entity
- elsif action <> 'DELETE' and sum(c.is_selectable::int) <> count(1) from unnest(columns) c where c.is_pkey then
- return next (
- jsonb_build_object(
- 'schema', wal ->> 'schema',
- 'table', wal ->> 'table',
- 'type', action
- ),
- is_rls_enabled,
- (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),
- array['Error 401: Unauthorized']
- )::realtime.wal_rls;
-
- else
- output = jsonb_build_object(
- 'schema', wal ->> 'schema',
- 'table', wal ->> 'table',
- 'type', action,
- 'commit_timestamp', to_char(
- ((wal ->> 'timestamp')::timestamptz at time zone 'utc'),
- 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'
- ),
- 'columns', (
- select
- jsonb_agg(
- jsonb_build_object(
- 'name', pa.attname,
- 'type', pt.typname
- )
- order by pa.attnum asc
- )
- from
- pg_attribute pa
- join pg_type pt
- on pa.atttypid = pt.oid
- where
- attrelid = entity_
- and attnum > 0
- and pg_catalog.has_column_privilege(working_role, entity_, pa.attname, 'SELECT')
- )
- )
- -- Add "record" key for insert and update
- || case
- when action in ('INSERT', 'UPDATE') then
- jsonb_build_object(
- 'record',
- (
- select
- jsonb_object_agg(
- -- if unchanged toast, get column name and value from old record
- coalesce((c).name, (oc).name),
- case
- when (c).name is null then (oc).value
- else (c).value
- end
- )
- from
- unnest(columns) c
- full outer join unnest(old_columns) oc
- on (c).name = (oc).name
- where
- coalesce((c).is_selectable, (oc).is_selectable)
- and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))
- )
- )
- else '{}'::jsonb
- end
- -- Add "old_record" key for update and delete
- || case
- when action = 'UPDATE' then
- jsonb_build_object(
- 'old_record',
- (
- select jsonb_object_agg((c).name, (c).value)
- from unnest(old_columns) c
- where
- (c).is_selectable
- and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))
- )
- )
- when action = 'DELETE' then
- jsonb_build_object(
- 'old_record',
- (
- select jsonb_object_agg((c).name, (c).value)
- from unnest(old_columns) c
- where
- (c).is_selectable
- and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))
- and ( not is_rls_enabled or (c).is_pkey ) -- if RLS enabled, we can't secure deletes so filter to pkey
- )
- )
- else '{}'::jsonb
- end;
-
- -- Create the prepared statement
- if is_rls_enabled and action <> 'DELETE' then
- if (select 1 from pg_prepared_statements where name = 'walrus_rls_stmt' limit 1) > 0 then
- deallocate walrus_rls_stmt;
- end if;
- execute realtime.build_prepared_statement_sql('walrus_rls_stmt', entity_, columns);
- end if;
-
- visible_to_subscription_ids = '{}';
-
- for subscription_id, claims in (
- select
- subs.subscription_id,
- subs.claims
- from
- unnest(subscriptions) subs
- where
- subs.entity = entity_
- and subs.claims_role = working_role
- and (
- realtime.is_visible_through_filters(columns, subs.filters)
- or (
- action = 'DELETE'
- and realtime.is_visible_through_filters(old_columns, subs.filters)
- )
- )
- ) loop
-
- if not is_rls_enabled or action = 'DELETE' then
- visible_to_subscription_ids = visible_to_subscription_ids || subscription_id;
- else
- -- Check if RLS allows the role to see the record
- perform
- -- Trim leading and trailing quotes from working_role because set_config
- -- doesn't recognize the role as valid if they are included
- set_config('role', trim(both '"' from working_role::text), true),
- set_config('request.jwt.claims', claims::text, true);
-
- execute 'execute walrus_rls_stmt' into subscription_has_access;
-
- if subscription_has_access then
- visible_to_subscription_ids = visible_to_subscription_ids || subscription_id;
- end if;
- end if;
- end loop;
-
- perform set_config('role', null, true);
-
- return next (
- output,
- is_rls_enabled,
- visible_to_subscription_ids,
- case
- when error_record_exceeds_max_size then array['Error 413: Payload Too Large']
- else '{}'
- end
- )::realtime.wal_rls;
-
- end if;
-end loop;
-
-perform set_config('role', null, true);
-end;
-$$;
-
-
-ALTER FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) OWNER TO supabase_admin;
-
---
--- Name: broadcast_changes(text, text, text, text, text, record, record, text); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text DEFAULT 'ROW'::text) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- -- Declare a variable to hold the JSONB representation of the row
- row_data jsonb := '{}'::jsonb;
-BEGIN
- IF level = 'STATEMENT' THEN
- RAISE EXCEPTION 'function can only be triggered for each row, not for each statement';
- END IF;
- -- Check the operation type and handle accordingly
- IF operation = 'INSERT' OR operation = 'UPDATE' OR operation = 'DELETE' THEN
- row_data := jsonb_build_object('old_record', OLD, 'record', NEW, 'operation', operation, 'table', table_name, 'schema', table_schema);
- PERFORM realtime.send (row_data, event_name, topic_name);
- ELSE
- RAISE EXCEPTION 'Unexpected operation type: %', operation;
- END IF;
-EXCEPTION
- WHEN OTHERS THEN
- RAISE EXCEPTION 'Failed to process the row: %', SQLERRM;
-END;
-
-$$;
-
-
-ALTER FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text) OWNER TO supabase_admin;
-
---
--- Name: build_prepared_statement_sql(text, regclass, realtime.wal_column[]); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) RETURNS text
- LANGUAGE sql
- AS $$
- /*
- Builds a sql string that, if executed, creates a prepared statement to
- tests retrive a row from *entity* by its primary key columns.
- Example
- select realtime.build_prepared_statement_sql('public.notes', '{"id"}'::text[], '{"bigint"}'::text[])
- */
- select
- 'prepare ' || prepared_statement_name || ' as
- select
- exists(
- select
- 1
- from
- ' || entity || '
- where
- ' || string_agg(quote_ident(pkc.name) || '=' || quote_nullable(pkc.value #>> '{}') , ' and ') || '
- )'
- from
- unnest(columns) pkc
- where
- pkc.is_pkey
- group by
- entity
- $$;
-
-
-ALTER FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) OWNER TO supabase_admin;
-
---
--- Name: cast(text, regtype); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime."cast"(val text, type_ regtype) RETURNS jsonb
- LANGUAGE plpgsql IMMUTABLE
- AS $$
- declare
- res jsonb;
- begin
- execute format('select to_jsonb(%L::'|| type_::text || ')', val) into res;
- return res;
- end
- $$;
-
-
-ALTER FUNCTION realtime."cast"(val text, type_ regtype) OWNER TO supabase_admin;
-
---
--- Name: check_equality_op(realtime.equality_op, regtype, text, text); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) RETURNS boolean
- LANGUAGE plpgsql IMMUTABLE
- AS $$
- /*
- Casts *val_1* and *val_2* as type *type_* and check the *op* condition for truthiness
- */
- declare
- op_symbol text = (
- case
- when op = 'eq' then '='
- when op = 'neq' then '!='
- when op = 'lt' then '<'
- when op = 'lte' then '<='
- when op = 'gt' then '>'
- when op = 'gte' then '>='
- when op = 'in' then '= any'
- else 'UNKNOWN OP'
- end
- );
- res boolean;
- begin
- execute format(
- 'select %L::'|| type_::text || ' ' || op_symbol
- || ' ( %L::'
- || (
- case
- when op = 'in' then type_::text || '[]'
- else type_::text end
- )
- || ')', val_1, val_2) into res;
- return res;
- end;
- $$;
-
-
-ALTER FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) OWNER TO supabase_admin;
-
---
--- Name: is_visible_through_filters(realtime.wal_column[], realtime.user_defined_filter[]); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) RETURNS boolean
- LANGUAGE sql IMMUTABLE
- AS $_$
- /*
- Should the record be visible (true) or filtered out (false) after *filters* are applied
- */
- select
- -- Default to allowed when no filters present
- $2 is null -- no filters. this should not happen because subscriptions has a default
- or array_length($2, 1) is null -- array length of an empty array is null
- or bool_and(
- coalesce(
- realtime.check_equality_op(
- op:=f.op,
- type_:=coalesce(
- col.type_oid::regtype, -- null when wal2json version <= 2.4
- col.type_name::regtype
- ),
- -- cast jsonb to text
- val_1:=col.value #>> '{}',
- val_2:=f.value
- ),
- false -- if null, filter does not match
- )
- )
- from
- unnest(filters) f
- join unnest(columns) col
- on f.column_name = col.name;
- $_$;
-
-
-ALTER FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) OWNER TO supabase_admin;
-
---
--- Name: list_changes(name, name, integer, integer); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) RETURNS SETOF realtime.wal_rls
- LANGUAGE sql
- SET log_min_messages TO 'fatal'
- AS $$
- with pub as (
- select
- concat_ws(
- ',',
- case when bool_or(pubinsert) then 'insert' else null end,
- case when bool_or(pubupdate) then 'update' else null end,
- case when bool_or(pubdelete) then 'delete' else null end
- ) as w2j_actions,
- coalesce(
- string_agg(
- realtime.quote_wal2json(format('%I.%I', schemaname, tablename)::regclass),
- ','
- ) filter (where ppt.tablename is not null and ppt.tablename not like '% %'),
- ''
- ) w2j_add_tables
- from
- pg_publication pp
- left join pg_publication_tables ppt
- on pp.pubname = ppt.pubname
- where
- pp.pubname = publication
- group by
- pp.pubname
- limit 1
- ),
- w2j as (
- select
- x.*, pub.w2j_add_tables
- from
- pub,
- pg_logical_slot_get_changes(
- slot_name, null, max_changes,
- 'include-pk', 'true',
- 'include-transaction', 'false',
- 'include-timestamp', 'true',
- 'include-type-oids', 'true',
- 'format-version', '2',
- 'actions', pub.w2j_actions,
- 'add-tables', pub.w2j_add_tables
- ) x
- )
- select
- xyz.wal,
- xyz.is_rls_enabled,
- xyz.subscription_ids,
- xyz.errors
- from
- w2j,
- realtime.apply_rls(
- wal := w2j.data::jsonb,
- max_record_bytes := max_record_bytes
- ) xyz(wal, is_rls_enabled, subscription_ids, errors)
- where
- w2j.w2j_add_tables <> ''
- and xyz.subscription_ids[1] is not null
- $$;
-
-
-ALTER FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) OWNER TO supabase_admin;
-
---
--- Name: quote_wal2json(regclass); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.quote_wal2json(entity regclass) RETURNS text
- LANGUAGE sql IMMUTABLE STRICT
- AS $$
- select
- (
- select string_agg('' || ch,'')
- from unnest(string_to_array(nsp.nspname::text, null)) with ordinality x(ch, idx)
- where
- not (x.idx = 1 and x.ch = '"')
- and not (
- x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)
- and x.ch = '"'
- )
- )
- || '.'
- || (
- select string_agg('' || ch,'')
- from unnest(string_to_array(pc.relname::text, null)) with ordinality x(ch, idx)
- where
- not (x.idx = 1 and x.ch = '"')
- and not (
- x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)
- and x.ch = '"'
- )
- )
- from
- pg_class pc
- join pg_namespace nsp
- on pc.relnamespace = nsp.oid
- where
- pc.oid = entity
- $$;
-
-
-ALTER FUNCTION realtime.quote_wal2json(entity regclass) OWNER TO supabase_admin;
-
---
--- Name: send(jsonb, text, text, boolean); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean DEFAULT true) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- generated_id uuid;
- final_payload jsonb;
-BEGIN
- BEGIN
- -- Generate a new UUID for the id
- generated_id := gen_random_uuid();
-
- -- Check if payload has an 'id' key, if not, add the generated UUID
- IF payload ? 'id' THEN
- final_payload := payload;
- ELSE
- final_payload := jsonb_set(payload, '{id}', to_jsonb(generated_id));
- END IF;
-
- -- Set the topic configuration
- EXECUTE format('SET LOCAL realtime.topic TO %L', topic);
-
- -- Attempt to insert the message
- INSERT INTO realtime.messages (id, payload, event, topic, private, extension)
- VALUES (generated_id, final_payload, event, topic, private, 'broadcast');
- EXCEPTION
- WHEN OTHERS THEN
- -- Capture and notify the error
- RAISE WARNING 'ErrorSendingBroadcastMessage: %', SQLERRM;
- END;
-END;
-$$;
-
-
-ALTER FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean) OWNER TO supabase_admin;
-
---
--- Name: subscription_check_filters(); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.subscription_check_filters() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
- /*
- Validates that the user defined filters for a subscription:
- - refer to valid columns that the claimed role may access
- - values are coercable to the correct column type
- */
- declare
- col_names text[] = coalesce(
- array_agg(c.column_name order by c.ordinal_position),
- '{}'::text[]
- )
- from
- information_schema.columns c
- where
- format('%I.%I', c.table_schema, c.table_name)::regclass = new.entity
- and pg_catalog.has_column_privilege(
- (new.claims ->> 'role'),
- format('%I.%I', c.table_schema, c.table_name)::regclass,
- c.column_name,
- 'SELECT'
- );
- filter realtime.user_defined_filter;
- col_type regtype;
-
- in_val jsonb;
- begin
- for filter in select * from unnest(new.filters) loop
- -- Filtered column is valid
- if not filter.column_name = any(col_names) then
- raise exception 'invalid column for filter %', filter.column_name;
- end if;
-
- -- Type is sanitized and safe for string interpolation
- col_type = (
- select atttypid::regtype
- from pg_catalog.pg_attribute
- where attrelid = new.entity
- and attname = filter.column_name
- );
- if col_type is null then
- raise exception 'failed to lookup type for column %', filter.column_name;
- end if;
-
- -- Set maximum number of entries for in filter
- if filter.op = 'in'::realtime.equality_op then
- in_val = realtime.cast(filter.value, (col_type::text || '[]')::regtype);
- if coalesce(jsonb_array_length(in_val), 0) > 100 then
- raise exception 'too many values for `in` filter. Maximum 100';
- end if;
- else
- -- raises an exception if value is not coercable to type
- perform realtime.cast(filter.value, col_type);
- end if;
-
- end loop;
-
- -- Apply consistent order to filters so the unique constraint on
- -- (subscription_id, entity, filters) can't be tricked by a different filter order
- new.filters = coalesce(
- array_agg(f order by f.column_name, f.op, f.value),
- '{}'
- ) from unnest(new.filters) f;
-
- return new;
- end;
- $$;
-
-
-ALTER FUNCTION realtime.subscription_check_filters() OWNER TO supabase_admin;
-
---
--- Name: to_regrole(text); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.to_regrole(role_name text) RETURNS regrole
- LANGUAGE sql IMMUTABLE
- AS $$ select role_name::regrole $$;
-
-
-ALTER FUNCTION realtime.to_regrole(role_name text) OWNER TO supabase_admin;
-
---
--- Name: topic(); Type: FUNCTION; Schema: realtime; Owner: supabase_realtime_admin
---
-
-CREATE FUNCTION realtime.topic() RETURNS text
- LANGUAGE sql STABLE
- AS $$
-select nullif(current_setting('realtime.topic', true), '')::text;
-$$;
-
-
-ALTER FUNCTION realtime.topic() OWNER TO supabase_realtime_admin;
-
---
--- Name: can_insert_object(text, text, uuid, jsonb); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.can_insert_object(bucketid text, name text, owner uuid, metadata jsonb) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- INSERT INTO "storage"."objects" ("bucket_id", "name", "owner", "metadata") VALUES (bucketid, name, owner, metadata);
- -- hack to rollback the successful insert
- RAISE sqlstate 'PT200' using
- message = 'ROLLBACK',
- detail = 'rollback successful insert';
-END
-$$;
-
-
-ALTER FUNCTION storage.can_insert_object(bucketid text, name text, owner uuid, metadata jsonb) OWNER TO supabase_storage_admin;
-
---
--- Name: enforce_bucket_name_length(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.enforce_bucket_name_length() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if length(new.name) > 100 then
- raise exception 'bucket name "%" is too long (% characters). Max is 100.', new.name, length(new.name);
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION storage.enforce_bucket_name_length() OWNER TO supabase_storage_admin;
-
---
--- Name: extension(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.extension(name text) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
-_parts text[];
-_filename text;
-BEGIN
- select string_to_array(name, '/') into _parts;
- select _parts[array_length(_parts,1)] into _filename;
- -- @todo return the last part instead of 2
- return reverse(split_part(reverse(_filename), '.', 1));
-END
-$$;
-
-
-ALTER FUNCTION storage.extension(name text) OWNER TO supabase_storage_admin;
-
---
--- Name: filename(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.filename(name text) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
-_parts text[];
-BEGIN
- select string_to_array(name, '/') into _parts;
- return _parts[array_length(_parts,1)];
-END
-$$;
-
-
-ALTER FUNCTION storage.filename(name text) OWNER TO supabase_storage_admin;
-
---
--- Name: foldername(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.foldername(name text) RETURNS text[]
- LANGUAGE plpgsql
- AS $$
-DECLARE
-_parts text[];
-BEGIN
- select string_to_array(name, '/') into _parts;
- return _parts[1:array_length(_parts,1)-1];
-END
-$$;
-
-
-ALTER FUNCTION storage.foldername(name text) OWNER TO supabase_storage_admin;
-
---
--- Name: get_common_prefix(text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.get_common_prefix(p_key text, p_prefix text, p_delimiter text) RETURNS text
- LANGUAGE sql IMMUTABLE
- AS $$
-SELECT CASE
- WHEN position(p_delimiter IN substring(p_key FROM length(p_prefix) + 1)) > 0
- THEN left(p_key, length(p_prefix) + position(p_delimiter IN substring(p_key FROM length(p_prefix) + 1)))
- ELSE NULL
-END;
-$$;
-
-
-ALTER FUNCTION storage.get_common_prefix(p_key text, p_prefix text, p_delimiter text) OWNER TO supabase_storage_admin;
-
---
--- Name: get_size_by_bucket(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.get_size_by_bucket() RETURNS TABLE(size bigint, bucket_id text)
- LANGUAGE plpgsql
- AS $$
-BEGIN
- return query
- select sum((metadata->>'size')::int) as size, obj.bucket_id
- from "storage".objects as obj
- group by obj.bucket_id;
-END
-$$;
-
-
-ALTER FUNCTION storage.get_size_by_bucket() OWNER TO supabase_storage_admin;
-
---
--- Name: list_multipart_uploads_with_delimiter(text, text, text, integer, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.list_multipart_uploads_with_delimiter(bucket_id text, prefix_param text, delimiter_param text, max_keys integer DEFAULT 100, next_key_token text DEFAULT ''::text, next_upload_token text DEFAULT ''::text) RETURNS TABLE(key text, id text, created_at timestamp with time zone)
- LANGUAGE plpgsql
- AS $_$
-BEGIN
- RETURN QUERY EXECUTE
- 'SELECT DISTINCT ON(key COLLATE "C") * from (
- SELECT
- CASE
- WHEN position($2 IN substring(key from length($1) + 1)) > 0 THEN
- substring(key from 1 for length($1) + position($2 IN substring(key from length($1) + 1)))
- ELSE
- key
- END AS key, id, created_at
- FROM
- storage.s3_multipart_uploads
- WHERE
- bucket_id = $5 AND
- key ILIKE $1 || ''%'' AND
- CASE
- WHEN $4 != '''' AND $6 = '''' THEN
- CASE
- WHEN position($2 IN substring(key from length($1) + 1)) > 0 THEN
- substring(key from 1 for length($1) + position($2 IN substring(key from length($1) + 1))) COLLATE "C" > $4
- ELSE
- key COLLATE "C" > $4
- END
- ELSE
- true
- END AND
- CASE
- WHEN $6 != '''' THEN
- id COLLATE "C" > $6
- ELSE
- true
- END
- ORDER BY
- key COLLATE "C" ASC, created_at ASC) as e order by key COLLATE "C" LIMIT $3'
- USING prefix_param, delimiter_param, max_keys, next_key_token, bucket_id, next_upload_token;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.list_multipart_uploads_with_delimiter(bucket_id text, prefix_param text, delimiter_param text, max_keys integer, next_key_token text, next_upload_token text) OWNER TO supabase_storage_admin;
-
---
--- Name: list_objects_with_delimiter(text, text, text, integer, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.list_objects_with_delimiter(_bucket_id text, prefix_param text, delimiter_param text, max_keys integer DEFAULT 100, start_after text DEFAULT ''::text, next_token text DEFAULT ''::text, sort_order text DEFAULT 'asc'::text) RETURNS TABLE(name text, id uuid, metadata jsonb, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone)
- LANGUAGE plpgsql STABLE
- AS $_$
-DECLARE
- v_peek_name TEXT;
- v_current RECORD;
- v_common_prefix TEXT;
-
- -- Configuration
- v_is_asc BOOLEAN;
- v_prefix TEXT;
- v_start TEXT;
- v_upper_bound TEXT;
- v_file_batch_size INT;
-
- -- Seek state
- v_next_seek TEXT;
- v_count INT := 0;
-
- -- Dynamic SQL for batch query only
- v_batch_query TEXT;
-
-BEGIN
- -- ========================================================================
- -- INITIALIZATION
- -- ========================================================================
- v_is_asc := lower(coalesce(sort_order, 'asc')) = 'asc';
- v_prefix := coalesce(prefix_param, '');
- v_start := CASE WHEN coalesce(next_token, '') <> '' THEN next_token ELSE coalesce(start_after, '') END;
- v_file_batch_size := LEAST(GREATEST(max_keys * 2, 100), 1000);
-
- -- Calculate upper bound for prefix filtering (bytewise, using COLLATE "C")
- IF v_prefix = '' THEN
- v_upper_bound := NULL;
- ELSIF right(v_prefix, 1) = delimiter_param THEN
- v_upper_bound := left(v_prefix, -1) || chr(ascii(delimiter_param) + 1);
- ELSE
- v_upper_bound := left(v_prefix, -1) || chr(ascii(right(v_prefix, 1)) + 1);
- END IF;
-
- -- Build batch query (dynamic SQL - called infrequently, amortized over many rows)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" >= $2 ' ||
- 'AND o.name COLLATE "C" < $3 ORDER BY o.name COLLATE "C" ASC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" >= $2 ' ||
- 'ORDER BY o.name COLLATE "C" ASC LIMIT $4';
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" < $2 ' ||
- 'AND o.name COLLATE "C" >= $3 ORDER BY o.name COLLATE "C" DESC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" < $2 ' ||
- 'ORDER BY o.name COLLATE "C" DESC LIMIT $4';
- END IF;
- END IF;
-
- -- ========================================================================
- -- SEEK INITIALIZATION: Determine starting position
- -- ========================================================================
- IF v_start = '' THEN
- IF v_is_asc THEN
- v_next_seek := v_prefix;
- ELSE
- -- DESC without cursor: find the last item in range
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_next_seek FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_prefix AND o.name COLLATE "C" < v_upper_bound
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix <> '' THEN
- SELECT o.name INTO v_next_seek FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_prefix
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_next_seek FROM storage.objects o
- WHERE o.bucket_id = _bucket_id
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- END IF;
-
- IF v_next_seek IS NOT NULL THEN
- v_next_seek := v_next_seek || delimiter_param;
- ELSE
- RETURN;
- END IF;
- END IF;
- ELSE
- -- Cursor provided: determine if it refers to a folder or leaf
- IF EXISTS (
- SELECT 1 FROM storage.objects o
- WHERE o.bucket_id = _bucket_id
- AND o.name COLLATE "C" LIKE v_start || delimiter_param || '%'
- LIMIT 1
- ) THEN
- -- Cursor refers to a folder
- IF v_is_asc THEN
- v_next_seek := v_start || chr(ascii(delimiter_param) + 1);
- ELSE
- v_next_seek := v_start || delimiter_param;
- END IF;
- ELSE
- -- Cursor refers to a leaf object
- IF v_is_asc THEN
- v_next_seek := v_start || delimiter_param;
- ELSE
- v_next_seek := v_start;
- END IF;
- END IF;
- END IF;
-
- -- ========================================================================
- -- MAIN LOOP: Hybrid peek-then-batch algorithm
- -- Uses STATIC SQL for peek (hot path) and DYNAMIC SQL for batch
- -- ========================================================================
- LOOP
- EXIT WHEN v_count >= max_keys;
-
- -- STEP 1: PEEK using STATIC SQL (plan cached, very fast)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_next_seek AND o.name COLLATE "C" < v_upper_bound
- ORDER BY o.name COLLATE "C" ASC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_next_seek
- ORDER BY o.name COLLATE "C" ASC LIMIT 1;
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" < v_next_seek AND o.name COLLATE "C" >= v_prefix
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix <> '' THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" < v_next_seek AND o.name COLLATE "C" >= v_prefix
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" < v_next_seek
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- END IF;
- END IF;
-
- EXIT WHEN v_peek_name IS NULL;
-
- -- STEP 2: Check if this is a FOLDER or FILE
- v_common_prefix := storage.get_common_prefix(v_peek_name, v_prefix, delimiter_param);
-
- IF v_common_prefix IS NOT NULL THEN
- -- FOLDER: Emit and skip to next folder (no heap access needed)
- name := rtrim(v_common_prefix, delimiter_param);
- id := NULL;
- updated_at := NULL;
- created_at := NULL;
- last_accessed_at := NULL;
- metadata := NULL;
- RETURN NEXT;
- v_count := v_count + 1;
-
- -- Advance seek past the folder range
- IF v_is_asc THEN
- v_next_seek := left(v_common_prefix, -1) || chr(ascii(delimiter_param) + 1);
- ELSE
- v_next_seek := v_common_prefix;
- END IF;
- ELSE
- -- FILE: Batch fetch using DYNAMIC SQL (overhead amortized over many rows)
- -- For ASC: upper_bound is the exclusive upper limit (< condition)
- -- For DESC: prefix is the inclusive lower limit (>= condition)
- FOR v_current IN EXECUTE v_batch_query USING _bucket_id, v_next_seek,
- CASE WHEN v_is_asc THEN COALESCE(v_upper_bound, v_prefix) ELSE v_prefix END, v_file_batch_size
- LOOP
- v_common_prefix := storage.get_common_prefix(v_current.name, v_prefix, delimiter_param);
-
- IF v_common_prefix IS NOT NULL THEN
- -- Hit a folder: exit batch, let peek handle it
- v_next_seek := v_current.name;
- EXIT;
- END IF;
-
- -- Emit file
- name := v_current.name;
- id := v_current.id;
- updated_at := v_current.updated_at;
- created_at := v_current.created_at;
- last_accessed_at := v_current.last_accessed_at;
- metadata := v_current.metadata;
- RETURN NEXT;
- v_count := v_count + 1;
-
- -- Advance seek past this file
- IF v_is_asc THEN
- v_next_seek := v_current.name || delimiter_param;
- ELSE
- v_next_seek := v_current.name;
- END IF;
-
- EXIT WHEN v_count >= max_keys;
- END LOOP;
- END IF;
- END LOOP;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.list_objects_with_delimiter(_bucket_id text, prefix_param text, delimiter_param text, max_keys integer, start_after text, next_token text, sort_order text) OWNER TO supabase_storage_admin;
-
---
--- Name: operation(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.operation() RETURNS text
- LANGUAGE plpgsql STABLE
- AS $$
-BEGIN
- RETURN current_setting('storage.operation', true);
-END;
-$$;
-
-
-ALTER FUNCTION storage.operation() OWNER TO supabase_storage_admin;
-
---
--- Name: protect_delete(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.protect_delete() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- -- Check if storage.allow_delete_query is set to 'true'
- IF COALESCE(current_setting('storage.allow_delete_query', true), 'false') != 'true' THEN
- RAISE EXCEPTION 'Direct deletion from storage tables is not allowed. Use the Storage API instead.'
- USING HINT = 'This prevents accidental data loss from orphaned objects.',
- ERRCODE = '42501';
- END IF;
- RETURN NULL;
-END;
-$$;
-
-
-ALTER FUNCTION storage.protect_delete() OWNER TO supabase_storage_admin;
-
---
--- Name: search(text, text, integer, integer, integer, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.search(prefix text, bucketname text, limits integer DEFAULT 100, levels integer DEFAULT 1, offsets integer DEFAULT 0, search text DEFAULT ''::text, sortcolumn text DEFAULT 'name'::text, sortorder text DEFAULT 'asc'::text) RETURNS TABLE(name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb)
- LANGUAGE plpgsql STABLE
- AS $_$
-DECLARE
- v_peek_name TEXT;
- v_current RECORD;
- v_common_prefix TEXT;
- v_delimiter CONSTANT TEXT := '/';
-
- -- Configuration
- v_limit INT;
- v_prefix TEXT;
- v_prefix_lower TEXT;
- v_is_asc BOOLEAN;
- v_order_by TEXT;
- v_sort_order TEXT;
- v_upper_bound TEXT;
- v_file_batch_size INT;
-
- -- Dynamic SQL for batch query only
- v_batch_query TEXT;
-
- -- Seek state
- v_next_seek TEXT;
- v_count INT := 0;
- v_skipped INT := 0;
-BEGIN
- -- ========================================================================
- -- INITIALIZATION
- -- ========================================================================
- v_limit := LEAST(coalesce(limits, 100), 1500);
- v_prefix := coalesce(prefix, '') || coalesce(search, '');
- v_prefix_lower := lower(v_prefix);
- v_is_asc := lower(coalesce(sortorder, 'asc')) = 'asc';
- v_file_batch_size := LEAST(GREATEST(v_limit * 2, 100), 1000);
-
- -- Validate sort column
- CASE lower(coalesce(sortcolumn, 'name'))
- WHEN 'name' THEN v_order_by := 'name';
- WHEN 'updated_at' THEN v_order_by := 'updated_at';
- WHEN 'created_at' THEN v_order_by := 'created_at';
- WHEN 'last_accessed_at' THEN v_order_by := 'last_accessed_at';
- ELSE v_order_by := 'name';
- END CASE;
-
- v_sort_order := CASE WHEN v_is_asc THEN 'asc' ELSE 'desc' END;
-
- -- ========================================================================
- -- NON-NAME SORTING: Use path_tokens approach (unchanged)
- -- ========================================================================
- IF v_order_by != 'name' THEN
- RETURN QUERY EXECUTE format(
- $sql$
- WITH folders AS (
- SELECT path_tokens[$1] AS folder
- FROM storage.objects
- WHERE objects.name ILIKE $2 || '%%'
- AND bucket_id = $3
- AND array_length(objects.path_tokens, 1) <> $1
- GROUP BY folder
- ORDER BY folder %s
- )
- (SELECT folder AS "name",
- NULL::uuid AS id,
- NULL::timestamptz AS updated_at,
- NULL::timestamptz AS created_at,
- NULL::timestamptz AS last_accessed_at,
- NULL::jsonb AS metadata FROM folders)
- UNION ALL
- (SELECT path_tokens[$1] AS "name",
- id, updated_at, created_at, last_accessed_at, metadata
- FROM storage.objects
- WHERE objects.name ILIKE $2 || '%%'
- AND bucket_id = $3
- AND array_length(objects.path_tokens, 1) = $1
- ORDER BY %I %s)
- LIMIT $4 OFFSET $5
- $sql$, v_sort_order, v_order_by, v_sort_order
- ) USING levels, v_prefix, bucketname, v_limit, offsets;
- RETURN;
- END IF;
-
- -- ========================================================================
- -- NAME SORTING: Hybrid skip-scan with batch optimization
- -- ========================================================================
-
- -- Calculate upper bound for prefix filtering
- IF v_prefix_lower = '' THEN
- v_upper_bound := NULL;
- ELSIF right(v_prefix_lower, 1) = v_delimiter THEN
- v_upper_bound := left(v_prefix_lower, -1) || chr(ascii(v_delimiter) + 1);
- ELSE
- v_upper_bound := left(v_prefix_lower, -1) || chr(ascii(right(v_prefix_lower, 1)) + 1);
- END IF;
-
- -- Build batch query (dynamic SQL - called infrequently, amortized over many rows)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" >= $2 ' ||
- 'AND lower(o.name) COLLATE "C" < $3 ORDER BY lower(o.name) COLLATE "C" ASC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" >= $2 ' ||
- 'ORDER BY lower(o.name) COLLATE "C" ASC LIMIT $4';
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" < $2 ' ||
- 'AND lower(o.name) COLLATE "C" >= $3 ORDER BY lower(o.name) COLLATE "C" DESC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" < $2 ' ||
- 'ORDER BY lower(o.name) COLLATE "C" DESC LIMIT $4';
- END IF;
- END IF;
-
- -- Initialize seek position
- IF v_is_asc THEN
- v_next_seek := v_prefix_lower;
- ELSE
- -- DESC: find the last item in range first (static SQL)
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_prefix_lower AND lower(o.name) COLLATE "C" < v_upper_bound
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix_lower <> '' THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_prefix_lower
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- END IF;
-
- IF v_peek_name IS NOT NULL THEN
- v_next_seek := lower(v_peek_name) || v_delimiter;
- ELSE
- RETURN;
- END IF;
- END IF;
-
- -- ========================================================================
- -- MAIN LOOP: Hybrid peek-then-batch algorithm
- -- Uses STATIC SQL for peek (hot path) and DYNAMIC SQL for batch
- -- ========================================================================
- LOOP
- EXIT WHEN v_count >= v_limit;
-
- -- STEP 1: PEEK using STATIC SQL (plan cached, very fast)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_next_seek AND lower(o.name) COLLATE "C" < v_upper_bound
- ORDER BY lower(o.name) COLLATE "C" ASC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_next_seek
- ORDER BY lower(o.name) COLLATE "C" ASC LIMIT 1;
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" < v_next_seek AND lower(o.name) COLLATE "C" >= v_prefix_lower
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix_lower <> '' THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" < v_next_seek AND lower(o.name) COLLATE "C" >= v_prefix_lower
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" < v_next_seek
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- END IF;
- END IF;
-
- EXIT WHEN v_peek_name IS NULL;
-
- -- STEP 2: Check if this is a FOLDER or FILE
- v_common_prefix := storage.get_common_prefix(lower(v_peek_name), v_prefix_lower, v_delimiter);
-
- IF v_common_prefix IS NOT NULL THEN
- -- FOLDER: Handle offset, emit if needed, skip to next folder
- IF v_skipped < offsets THEN
- v_skipped := v_skipped + 1;
- ELSE
- name := split_part(rtrim(v_common_prefix, v_delimiter), v_delimiter, levels);
- id := NULL;
- updated_at := NULL;
- created_at := NULL;
- last_accessed_at := NULL;
- metadata := NULL;
- RETURN NEXT;
- v_count := v_count + 1;
- END IF;
-
- -- Advance seek past the folder range
- IF v_is_asc THEN
- v_next_seek := lower(left(v_common_prefix, -1)) || chr(ascii(v_delimiter) + 1);
- ELSE
- v_next_seek := lower(v_common_prefix);
- END IF;
- ELSE
- -- FILE: Batch fetch using DYNAMIC SQL (overhead amortized over many rows)
- -- For ASC: upper_bound is the exclusive upper limit (< condition)
- -- For DESC: prefix_lower is the inclusive lower limit (>= condition)
- FOR v_current IN EXECUTE v_batch_query
- USING bucketname, v_next_seek,
- CASE WHEN v_is_asc THEN COALESCE(v_upper_bound, v_prefix_lower) ELSE v_prefix_lower END, v_file_batch_size
- LOOP
- v_common_prefix := storage.get_common_prefix(lower(v_current.name), v_prefix_lower, v_delimiter);
-
- IF v_common_prefix IS NOT NULL THEN
- -- Hit a folder: exit batch, let peek handle it
- v_next_seek := lower(v_current.name);
- EXIT;
- END IF;
-
- -- Handle offset skipping
- IF v_skipped < offsets THEN
- v_skipped := v_skipped + 1;
- ELSE
- -- Emit file
- name := split_part(v_current.name, v_delimiter, levels);
- id := v_current.id;
- updated_at := v_current.updated_at;
- created_at := v_current.created_at;
- last_accessed_at := v_current.last_accessed_at;
- metadata := v_current.metadata;
- RETURN NEXT;
- v_count := v_count + 1;
- END IF;
-
- -- Advance seek past this file
- IF v_is_asc THEN
- v_next_seek := lower(v_current.name) || v_delimiter;
- ELSE
- v_next_seek := lower(v_current.name);
- END IF;
-
- EXIT WHEN v_count >= v_limit;
- END LOOP;
- END IF;
- END LOOP;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.search(prefix text, bucketname text, limits integer, levels integer, offsets integer, search text, sortcolumn text, sortorder text) OWNER TO supabase_storage_admin;
-
---
--- Name: search_by_timestamp(text, text, integer, integer, text, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.search_by_timestamp(p_prefix text, p_bucket_id text, p_limit integer, p_level integer, p_start_after text, p_sort_order text, p_sort_column text, p_sort_column_after text) RETURNS TABLE(key text, name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb)
- LANGUAGE plpgsql STABLE
- AS $_$
-DECLARE
- v_cursor_op text;
- v_query text;
- v_prefix text;
-BEGIN
- v_prefix := coalesce(p_prefix, '');
-
- IF p_sort_order = 'asc' THEN
- v_cursor_op := '>';
- ELSE
- v_cursor_op := '<';
- END IF;
-
- v_query := format($sql$
- WITH raw_objects AS (
- SELECT
- o.name AS obj_name,
- o.id AS obj_id,
- o.updated_at AS obj_updated_at,
- o.created_at AS obj_created_at,
- o.last_accessed_at AS obj_last_accessed_at,
- o.metadata AS obj_metadata,
- storage.get_common_prefix(o.name, $1, '/') AS common_prefix
- FROM storage.objects o
- WHERE o.bucket_id = $2
- AND o.name COLLATE "C" LIKE $1 || '%%'
- ),
- -- Aggregate common prefixes (folders)
- -- Both created_at and updated_at use MIN(obj_created_at) to match the old prefixes table behavior
- aggregated_prefixes AS (
- SELECT
- rtrim(common_prefix, '/') AS name,
- NULL::uuid AS id,
- MIN(obj_created_at) AS updated_at,
- MIN(obj_created_at) AS created_at,
- NULL::timestamptz AS last_accessed_at,
- NULL::jsonb AS metadata,
- TRUE AS is_prefix
- FROM raw_objects
- WHERE common_prefix IS NOT NULL
- GROUP BY common_prefix
- ),
- leaf_objects AS (
- SELECT
- obj_name AS name,
- obj_id AS id,
- obj_updated_at AS updated_at,
- obj_created_at AS created_at,
- obj_last_accessed_at AS last_accessed_at,
- obj_metadata AS metadata,
- FALSE AS is_prefix
- FROM raw_objects
- WHERE common_prefix IS NULL
- ),
- combined AS (
- SELECT * FROM aggregated_prefixes
- UNION ALL
- SELECT * FROM leaf_objects
- ),
- filtered AS (
- SELECT *
- FROM combined
- WHERE (
- $5 = ''
- OR ROW(
- date_trunc('milliseconds', %I),
- name COLLATE "C"
- ) %s ROW(
- COALESCE(NULLIF($6, '')::timestamptz, 'epoch'::timestamptz),
- $5
- )
- )
- )
- SELECT
- split_part(name, '/', $3) AS key,
- name,
- id,
- updated_at,
- created_at,
- last_accessed_at,
- metadata
- FROM filtered
- ORDER BY
- COALESCE(date_trunc('milliseconds', %I), 'epoch'::timestamptz) %s,
- name COLLATE "C" %s
- LIMIT $4
- $sql$,
- p_sort_column,
- v_cursor_op,
- p_sort_column,
- p_sort_order,
- p_sort_order
- );
-
- RETURN QUERY EXECUTE v_query
- USING v_prefix, p_bucket_id, p_level, p_limit, p_start_after, p_sort_column_after;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.search_by_timestamp(p_prefix text, p_bucket_id text, p_limit integer, p_level integer, p_start_after text, p_sort_order text, p_sort_column text, p_sort_column_after text) OWNER TO supabase_storage_admin;
-
---
--- Name: search_v2(text, text, integer, integer, text, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.search_v2(prefix text, bucket_name text, limits integer DEFAULT 100, levels integer DEFAULT 1, start_after text DEFAULT ''::text, sort_order text DEFAULT 'asc'::text, sort_column text DEFAULT 'name'::text, sort_column_after text DEFAULT ''::text) RETURNS TABLE(key text, name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb)
- LANGUAGE plpgsql STABLE
- AS $$
-DECLARE
- v_sort_col text;
- v_sort_ord text;
- v_limit int;
-BEGIN
- -- Cap limit to maximum of 1500 records
- v_limit := LEAST(coalesce(limits, 100), 1500);
-
- -- Validate and normalize sort_order
- v_sort_ord := lower(coalesce(sort_order, 'asc'));
- IF v_sort_ord NOT IN ('asc', 'desc') THEN
- v_sort_ord := 'asc';
- END IF;
-
- -- Validate and normalize sort_column
- v_sort_col := lower(coalesce(sort_column, 'name'));
- IF v_sort_col NOT IN ('name', 'updated_at', 'created_at') THEN
- v_sort_col := 'name';
- END IF;
-
- -- Route to appropriate implementation
- IF v_sort_col = 'name' THEN
- -- Use list_objects_with_delimiter for name sorting (most efficient: O(k * log n))
- RETURN QUERY
- SELECT
- split_part(l.name, '/', levels) AS key,
- l.name AS name,
- l.id,
- l.updated_at,
- l.created_at,
- l.last_accessed_at,
- l.metadata
- FROM storage.list_objects_with_delimiter(
- bucket_name,
- coalesce(prefix, ''),
- '/',
- v_limit,
- start_after,
- '',
- v_sort_ord
- ) l;
- ELSE
- -- Use aggregation approach for timestamp sorting
- -- Not efficient for large datasets but supports correct pagination
- RETURN QUERY SELECT * FROM storage.search_by_timestamp(
- prefix, bucket_name, v_limit, levels, start_after,
- v_sort_ord, v_sort_col, sort_column_after
- );
- END IF;
-END;
-$$;
-
-
-ALTER FUNCTION storage.search_v2(prefix text, bucket_name text, limits integer, levels integer, start_after text, sort_order text, sort_column text, sort_column_after text) OWNER TO supabase_storage_admin;
-
---
--- Name: update_updated_at_column(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.update_updated_at_column() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION storage.update_updated_at_column() OWNER TO supabase_storage_admin;
-
---
--- Name: http_request(); Type: FUNCTION; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE FUNCTION supabase_functions.http_request() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'supabase_functions'
- AS $$
- DECLARE
- request_id bigint;
- payload jsonb;
- url text := TG_ARGV[0]::text;
- method text := TG_ARGV[1]::text;
- headers jsonb DEFAULT '{}'::jsonb;
- params jsonb DEFAULT '{}'::jsonb;
- timeout_ms integer DEFAULT 1000;
- BEGIN
- IF url IS NULL OR url = 'null' THEN
- RAISE EXCEPTION 'url argument is missing';
- END IF;
-
- IF method IS NULL OR method = 'null' THEN
- RAISE EXCEPTION 'method argument is missing';
- END IF;
-
- IF TG_ARGV[2] IS NULL OR TG_ARGV[2] = 'null' THEN
- headers = '{"Content-Type": "application/json"}'::jsonb;
- ELSE
- headers = TG_ARGV[2]::jsonb;
- END IF;
-
- IF TG_ARGV[3] IS NULL OR TG_ARGV[3] = 'null' THEN
- params = '{}'::jsonb;
- ELSE
- params = TG_ARGV[3]::jsonb;
- END IF;
-
- IF TG_ARGV[4] IS NULL OR TG_ARGV[4] = 'null' THEN
- timeout_ms = 1000;
- ELSE
- timeout_ms = TG_ARGV[4]::integer;
- END IF;
-
- CASE
- WHEN method = 'GET' THEN
- SELECT http_get INTO request_id FROM net.http_get(
- url,
- params,
- headers,
- timeout_ms
- );
- WHEN method = 'POST' THEN
- payload = jsonb_build_object(
- 'old_record', OLD,
- 'record', NEW,
- 'type', TG_OP,
- 'table', TG_TABLE_NAME,
- 'schema', TG_TABLE_SCHEMA
- );
-
- SELECT http_post INTO request_id FROM net.http_post(
- url,
- payload,
- params,
- headers,
- timeout_ms
- );
- ELSE
- RAISE EXCEPTION 'method argument % is invalid', method;
- END CASE;
-
- INSERT INTO supabase_functions.hooks
- (hook_table_id, hook_name, request_id)
- VALUES
- (TG_RELID, TG_NAME, request_id);
-
- RETURN NEW;
- END
-$$;
-
-
-ALTER FUNCTION supabase_functions.http_request() OWNER TO supabase_functions_admin;
-
---
--- Name: extensions; Type: TABLE; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE TABLE _realtime.extensions (
- id uuid NOT NULL,
- type text,
- settings jsonb,
- tenant_external_id text,
- inserted_at timestamp(0) without time zone NOT NULL,
- updated_at timestamp(0) without time zone NOT NULL
-);
-
-
-ALTER TABLE _realtime.extensions OWNER TO supabase_admin;
-
---
--- Name: schema_migrations; Type: TABLE; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE TABLE _realtime.schema_migrations (
- version bigint NOT NULL,
- inserted_at timestamp(0) without time zone
-);
-
-
-ALTER TABLE _realtime.schema_migrations OWNER TO supabase_admin;
-
---
--- Name: tenants; Type: TABLE; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE TABLE _realtime.tenants (
- id uuid NOT NULL,
- name text,
- external_id text,
- jwt_secret text,
- max_concurrent_users integer DEFAULT 200 NOT NULL,
- inserted_at timestamp(0) without time zone NOT NULL,
- updated_at timestamp(0) without time zone NOT NULL,
- max_events_per_second integer DEFAULT 100 NOT NULL,
- postgres_cdc_default text DEFAULT 'postgres_cdc_rls'::text,
- max_bytes_per_second integer DEFAULT 100000 NOT NULL,
- max_channels_per_client integer DEFAULT 100 NOT NULL,
- max_joins_per_second integer DEFAULT 500 NOT NULL,
- suspend boolean DEFAULT false,
- jwt_jwks jsonb,
- notify_private_alpha boolean DEFAULT false,
- private_only boolean DEFAULT false NOT NULL,
- migrations_ran integer DEFAULT 0,
- broadcast_adapter character varying(255) DEFAULT 'gen_rpc'::character varying,
- max_presence_events_per_second integer DEFAULT 1000,
- max_payload_size_in_kb integer DEFAULT 3000,
- CONSTRAINT jwt_secret_or_jwt_jwks_required CHECK (((jwt_secret IS NOT NULL) OR (jwt_jwks IS NOT NULL)))
-);
-
-
-ALTER TABLE _realtime.tenants OWNER TO supabase_admin;
-
---
--- Name: audit_log_entries; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.audit_log_entries (
- instance_id uuid,
- id uuid NOT NULL,
- payload json,
- created_at timestamp with time zone,
- ip_address character varying(64) DEFAULT ''::character varying NOT NULL
-);
-
-
-ALTER TABLE auth.audit_log_entries OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE audit_log_entries; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.audit_log_entries IS 'Auth: Audit trail for user actions.';
-
-
---
--- Name: flow_state; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.flow_state (
- id uuid NOT NULL,
- user_id uuid,
- auth_code text,
- code_challenge_method auth.code_challenge_method,
- code_challenge text,
- provider_type text NOT NULL,
- provider_access_token text,
- provider_refresh_token text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- authentication_method text NOT NULL,
- auth_code_issued_at timestamp with time zone,
- invite_token text,
- referrer text,
- oauth_client_state_id uuid,
- linking_target_id uuid,
- email_optional boolean DEFAULT false NOT NULL
-);
-
-
-ALTER TABLE auth.flow_state OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE flow_state; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.flow_state IS 'Stores metadata for all OAuth/SSO login flows';
-
-
---
--- Name: identities; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.identities (
- provider_id text NOT NULL,
- user_id uuid NOT NULL,
- identity_data jsonb NOT NULL,
- provider text NOT NULL,
- last_sign_in_at timestamp with time zone,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- email text GENERATED ALWAYS AS (lower((identity_data ->> 'email'::text))) STORED,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE auth.identities OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE identities; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.identities IS 'Auth: Stores identities associated to a user.';
-
-
---
--- Name: COLUMN identities.email; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.identities.email IS 'Auth: Email is a generated column that references the optional email property in the identity_data';
-
-
---
--- Name: instances; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.instances (
- id uuid NOT NULL,
- uuid uuid,
- raw_base_config text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone
-);
-
-
-ALTER TABLE auth.instances OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE instances; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.instances IS 'Auth: Manages users across multiple sites.';
-
-
---
--- Name: mfa_amr_claims; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.mfa_amr_claims (
- session_id uuid NOT NULL,
- created_at timestamp with time zone NOT NULL,
- updated_at timestamp with time zone NOT NULL,
- authentication_method text NOT NULL,
- id uuid NOT NULL
-);
-
-
-ALTER TABLE auth.mfa_amr_claims OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE mfa_amr_claims; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.mfa_amr_claims IS 'auth: stores authenticator method reference claims for multi factor authentication';
-
-
---
--- Name: mfa_challenges; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.mfa_challenges (
- id uuid NOT NULL,
- factor_id uuid NOT NULL,
- created_at timestamp with time zone NOT NULL,
- verified_at timestamp with time zone,
- ip_address inet NOT NULL,
- otp_code text,
- web_authn_session_data jsonb
-);
-
-
-ALTER TABLE auth.mfa_challenges OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE mfa_challenges; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.mfa_challenges IS 'auth: stores metadata about challenge requests made';
-
-
---
--- Name: mfa_factors; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.mfa_factors (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- friendly_name text,
- factor_type auth.factor_type NOT NULL,
- status auth.factor_status NOT NULL,
- created_at timestamp with time zone NOT NULL,
- updated_at timestamp with time zone NOT NULL,
- secret text,
- phone text,
- last_challenged_at timestamp with time zone,
- web_authn_credential jsonb,
- web_authn_aaguid uuid,
- last_webauthn_challenge_data jsonb
-);
-
-
-ALTER TABLE auth.mfa_factors OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE mfa_factors; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.mfa_factors IS 'auth: stores metadata about factors';
-
-
---
--- Name: COLUMN mfa_factors.last_webauthn_challenge_data; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.mfa_factors.last_webauthn_challenge_data IS 'Stores the latest WebAuthn challenge data including attestation/assertion for customer verification';
-
-
---
--- Name: oauth_authorizations; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_authorizations (
- id uuid NOT NULL,
- authorization_id text NOT NULL,
- client_id uuid NOT NULL,
- user_id uuid,
- redirect_uri text NOT NULL,
- scope text NOT NULL,
- state text,
- resource text,
- code_challenge text,
- code_challenge_method auth.code_challenge_method,
- response_type auth.oauth_response_type DEFAULT 'code'::auth.oauth_response_type NOT NULL,
- status auth.oauth_authorization_status DEFAULT 'pending'::auth.oauth_authorization_status NOT NULL,
- authorization_code text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- expires_at timestamp with time zone DEFAULT (now() + '00:03:00'::interval) NOT NULL,
- approved_at timestamp with time zone,
- nonce text,
- CONSTRAINT oauth_authorizations_authorization_code_length CHECK ((char_length(authorization_code) <= 255)),
- CONSTRAINT oauth_authorizations_code_challenge_length CHECK ((char_length(code_challenge) <= 128)),
- CONSTRAINT oauth_authorizations_expires_at_future CHECK ((expires_at > created_at)),
- CONSTRAINT oauth_authorizations_nonce_length CHECK ((char_length(nonce) <= 255)),
- CONSTRAINT oauth_authorizations_redirect_uri_length CHECK ((char_length(redirect_uri) <= 2048)),
- CONSTRAINT oauth_authorizations_resource_length CHECK ((char_length(resource) <= 2048)),
- CONSTRAINT oauth_authorizations_scope_length CHECK ((char_length(scope) <= 4096)),
- CONSTRAINT oauth_authorizations_state_length CHECK ((char_length(state) <= 4096))
-);
-
-
-ALTER TABLE auth.oauth_authorizations OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_client_states; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_client_states (
- id uuid NOT NULL,
- provider_type text NOT NULL,
- code_verifier text,
- created_at timestamp with time zone NOT NULL
-);
-
-
-ALTER TABLE auth.oauth_client_states OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE oauth_client_states; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.oauth_client_states IS 'Stores OAuth states for third-party provider authentication flows where Supabase acts as the OAuth client.';
-
-
---
--- Name: oauth_clients; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_clients (
- id uuid NOT NULL,
- client_secret_hash text,
- registration_type auth.oauth_registration_type NOT NULL,
- redirect_uris text NOT NULL,
- grant_types text NOT NULL,
- client_name text,
- client_uri text,
- logo_uri text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- deleted_at timestamp with time zone,
- client_type auth.oauth_client_type DEFAULT 'confidential'::auth.oauth_client_type NOT NULL,
- token_endpoint_auth_method text NOT NULL,
- CONSTRAINT oauth_clients_client_name_length CHECK ((char_length(client_name) <= 1024)),
- CONSTRAINT oauth_clients_client_uri_length CHECK ((char_length(client_uri) <= 2048)),
- CONSTRAINT oauth_clients_logo_uri_length CHECK ((char_length(logo_uri) <= 2048)),
- CONSTRAINT oauth_clients_token_endpoint_auth_method_check CHECK ((token_endpoint_auth_method = ANY (ARRAY['client_secret_basic'::text, 'client_secret_post'::text, 'none'::text])))
-);
-
-
-ALTER TABLE auth.oauth_clients OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_consents; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_consents (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- client_id uuid NOT NULL,
- scopes text NOT NULL,
- granted_at timestamp with time zone DEFAULT now() NOT NULL,
- revoked_at timestamp with time zone,
- CONSTRAINT oauth_consents_revoked_after_granted CHECK (((revoked_at IS NULL) OR (revoked_at >= granted_at))),
- CONSTRAINT oauth_consents_scopes_length CHECK ((char_length(scopes) <= 2048)),
- CONSTRAINT oauth_consents_scopes_not_empty CHECK ((char_length(TRIM(BOTH FROM scopes)) > 0))
-);
-
-
-ALTER TABLE auth.oauth_consents OWNER TO supabase_auth_admin;
-
---
--- Name: one_time_tokens; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.one_time_tokens (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- token_type auth.one_time_token_type NOT NULL,
- token_hash text NOT NULL,
- relates_to text NOT NULL,
- created_at timestamp without time zone DEFAULT now() NOT NULL,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- CONSTRAINT one_time_tokens_token_hash_check CHECK ((char_length(token_hash) > 0))
-);
-
-
-ALTER TABLE auth.one_time_tokens OWNER TO supabase_auth_admin;
-
---
--- Name: refresh_tokens; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.refresh_tokens (
- instance_id uuid,
- id bigint NOT NULL,
- token character varying(255),
- user_id character varying(255),
- revoked boolean,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- parent character varying(255),
- session_id uuid
-);
-
-
-ALTER TABLE auth.refresh_tokens OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE refresh_tokens; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.refresh_tokens IS 'Auth: Store of tokens used to refresh JWT tokens once they expire.';
-
-
---
--- Name: refresh_tokens_id_seq; Type: SEQUENCE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE SEQUENCE auth.refresh_tokens_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER SEQUENCE auth.refresh_tokens_id_seq OWNER TO supabase_auth_admin;
-
---
--- Name: refresh_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER SEQUENCE auth.refresh_tokens_id_seq OWNED BY auth.refresh_tokens.id;
-
-
---
--- Name: saml_providers; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.saml_providers (
- id uuid NOT NULL,
- sso_provider_id uuid NOT NULL,
- entity_id text NOT NULL,
- metadata_xml text NOT NULL,
- metadata_url text,
- attribute_mapping jsonb,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- name_id_format text,
- CONSTRAINT "entity_id not empty" CHECK ((char_length(entity_id) > 0)),
- CONSTRAINT "metadata_url not empty" CHECK (((metadata_url = NULL::text) OR (char_length(metadata_url) > 0))),
- CONSTRAINT "metadata_xml not empty" CHECK ((char_length(metadata_xml) > 0))
-);
-
-
-ALTER TABLE auth.saml_providers OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE saml_providers; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.saml_providers IS 'Auth: Manages SAML Identity Provider connections.';
-
-
---
--- Name: saml_relay_states; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.saml_relay_states (
- id uuid NOT NULL,
- sso_provider_id uuid NOT NULL,
- request_id text NOT NULL,
- for_email text,
- redirect_to text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- flow_state_id uuid,
- CONSTRAINT "request_id not empty" CHECK ((char_length(request_id) > 0))
-);
-
-
-ALTER TABLE auth.saml_relay_states OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE saml_relay_states; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.saml_relay_states IS 'Auth: Contains SAML Relay State information for each Service Provider initiated login.';
-
-
---
--- Name: schema_migrations; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.schema_migrations (
- version character varying(255) NOT NULL
-);
-
-
-ALTER TABLE auth.schema_migrations OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE schema_migrations; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.schema_migrations IS 'Auth: Manages updates to the auth system.';
-
-
---
--- Name: sessions; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.sessions (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- factor_id uuid,
- aal auth.aal_level,
- not_after timestamp with time zone,
- refreshed_at timestamp without time zone,
- user_agent text,
- ip inet,
- tag text,
- oauth_client_id uuid,
- refresh_token_hmac_key text,
- refresh_token_counter bigint,
- scopes text,
- CONSTRAINT sessions_scopes_length CHECK ((char_length(scopes) <= 4096))
-);
-
-
-ALTER TABLE auth.sessions OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE sessions; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.sessions IS 'Auth: Stores session data associated to a user.';
-
-
---
--- Name: COLUMN sessions.not_after; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sessions.not_after IS 'Auth: Not after is a nullable column that contains a timestamp after which the session should be regarded as expired.';
-
-
---
--- Name: COLUMN sessions.refresh_token_hmac_key; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sessions.refresh_token_hmac_key IS 'Holds a HMAC-SHA256 key used to sign refresh tokens for this session.';
-
-
---
--- Name: COLUMN sessions.refresh_token_counter; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sessions.refresh_token_counter IS 'Holds the ID (counter) of the last issued refresh token.';
-
-
---
--- Name: sso_domains; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.sso_domains (
- id uuid NOT NULL,
- sso_provider_id uuid NOT NULL,
- domain text NOT NULL,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- CONSTRAINT "domain not empty" CHECK ((char_length(domain) > 0))
-);
-
-
-ALTER TABLE auth.sso_domains OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE sso_domains; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.sso_domains IS 'Auth: Manages SSO email address domain mapping to an SSO Identity Provider.';
-
-
---
--- Name: sso_providers; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.sso_providers (
- id uuid NOT NULL,
- resource_id text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- disabled boolean,
- CONSTRAINT "resource_id not empty" CHECK (((resource_id = NULL::text) OR (char_length(resource_id) > 0)))
-);
-
-
-ALTER TABLE auth.sso_providers OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE sso_providers; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.sso_providers IS 'Auth: Manages SSO identity provider information; see saml_providers for SAML.';
-
-
---
--- Name: COLUMN sso_providers.resource_id; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sso_providers.resource_id IS 'Auth: Uniquely identifies a SSO provider according to a user-chosen resource ID (case insensitive), useful in infrastructure as code.';
-
-
---
--- Name: users; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.users (
- instance_id uuid,
- id uuid NOT NULL,
- aud character varying(255),
- role character varying(255),
- email character varying(255),
- encrypted_password character varying(255),
- email_confirmed_at timestamp with time zone,
- invited_at timestamp with time zone,
- confirmation_token character varying(255),
- confirmation_sent_at timestamp with time zone,
- recovery_token character varying(255),
- recovery_sent_at timestamp with time zone,
- email_change_token_new character varying(255),
- email_change character varying(255),
- email_change_sent_at timestamp with time zone,
- last_sign_in_at timestamp with time zone,
- raw_app_meta_data jsonb,
- raw_user_meta_data jsonb,
- is_super_admin boolean,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- phone text DEFAULT NULL::character varying,
- phone_confirmed_at timestamp with time zone,
- phone_change text DEFAULT ''::character varying,
- phone_change_token character varying(255) DEFAULT ''::character varying,
- phone_change_sent_at timestamp with time zone,
- confirmed_at timestamp with time zone GENERATED ALWAYS AS (LEAST(email_confirmed_at, phone_confirmed_at)) STORED,
- email_change_token_current character varying(255) DEFAULT ''::character varying,
- email_change_confirm_status smallint DEFAULT 0,
- banned_until timestamp with time zone,
- reauthentication_token character varying(255) DEFAULT ''::character varying,
- reauthentication_sent_at timestamp with time zone,
- is_sso_user boolean DEFAULT false NOT NULL,
- deleted_at timestamp with time zone,
- is_anonymous boolean DEFAULT false NOT NULL,
- CONSTRAINT users_email_change_confirm_status_check CHECK (((email_change_confirm_status >= 0) AND (email_change_confirm_status <= 2)))
-);
-
-
-ALTER TABLE auth.users OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE users; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.users IS 'Auth: Stores user login data within a secure schema.';
-
-
---
--- Name: COLUMN users.is_sso_user; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.users.is_sso_user IS 'Auth: Set this column to true when the account comes from SSO. These accounts can have duplicate emails.';
-
-
---
--- Name: agenda_bloqueios; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_bloqueios (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid,
- tipo text NOT NULL,
- titulo text NOT NULL,
- data_inicio date NOT NULL,
- data_fim date,
- hora_inicio time without time zone,
- hora_fim time without time zone,
- recorrente boolean DEFAULT false NOT NULL,
- dia_semana smallint,
- observacao text,
- origem text DEFAULT 'manual'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT agenda_bloqueios_tipo_check CHECK ((tipo = ANY (ARRAY['feriado_nacional'::text, 'feriado_municipal'::text, 'bloqueio'::text])))
-);
-
-
-ALTER TABLE public.agenda_bloqueios OWNER TO supabase_admin;
-
---
--- Name: agenda_configuracoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_configuracoes (
- owner_id uuid NOT NULL,
- duracao_padrao_minutos integer DEFAULT 50 NOT NULL,
- intervalo_padrao_minutos integer DEFAULT 0 NOT NULL,
- timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL,
- usar_horario_admin_custom boolean DEFAULT false NOT NULL,
- admin_inicio_visualizacao time without time zone,
- admin_fim_visualizacao time without time zone,
- admin_slot_visual_minutos integer DEFAULT 30 NOT NULL,
- online_ativo boolean DEFAULT false NOT NULL,
- online_min_antecedencia_horas integer DEFAULT 24 NOT NULL,
- online_max_dias_futuro integer DEFAULT 60 NOT NULL,
- online_cancelar_ate_horas integer DEFAULT 12 NOT NULL,
- online_reagendar_ate_horas integer DEFAULT 12 NOT NULL,
- online_limite_agendamentos_futuros integer DEFAULT 1 NOT NULL,
- online_modo text DEFAULT 'automatico'::text NOT NULL,
- online_buffer_antes_min integer DEFAULT 0 NOT NULL,
- online_buffer_depois_min integer DEFAULT 0 NOT NULL,
- online_modalidade text DEFAULT 'ambos'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- usar_granularidade_custom boolean DEFAULT false NOT NULL,
- granularidade_min integer,
- setup_concluido boolean DEFAULT false NOT NULL,
- setup_concluido_em timestamp with time zone,
- agenda_view_mode text DEFAULT 'full_24h'::text NOT NULL,
- agenda_custom_start time without time zone,
- agenda_custom_end time without time zone,
- session_duration_min integer DEFAULT 50 NOT NULL,
- session_break_min integer DEFAULT 10 NOT NULL,
- pausas_semanais jsonb DEFAULT '[]'::jsonb NOT NULL,
- setup_clinica_concluido boolean DEFAULT false NOT NULL,
- setup_clinica_concluido_em timestamp with time zone,
- tenant_id uuid,
- jornada_igual_todos boolean DEFAULT true,
- slot_mode text DEFAULT 'fixed'::text NOT NULL,
- CONSTRAINT agenda_configuracoes_admin_slot_visual_minutos_check CHECK ((admin_slot_visual_minutos = ANY (ARRAY[5, 10, 15, 20, 30, 60]))),
- CONSTRAINT agenda_configuracoes_check CHECK (((usar_horario_admin_custom = false) OR ((admin_inicio_visualizacao IS NOT NULL) AND (admin_fim_visualizacao IS NOT NULL) AND (admin_fim_visualizacao > admin_inicio_visualizacao)))),
- CONSTRAINT agenda_configuracoes_duracao_padrao_minutos_check CHECK (((duracao_padrao_minutos >= 10) AND (duracao_padrao_minutos <= 240))),
- CONSTRAINT agenda_configuracoes_granularidade_min_check CHECK (((granularidade_min IS NULL) OR (granularidade_min = ANY (ARRAY[5, 10, 15, 20, 30, 45, 50, 60])))),
- CONSTRAINT agenda_configuracoes_intervalo_padrao_minutos_check CHECK (((intervalo_padrao_minutos >= 0) AND (intervalo_padrao_minutos <= 120))),
- CONSTRAINT agenda_configuracoes_online_buffer_antes_min_check CHECK (((online_buffer_antes_min >= 0) AND (online_buffer_antes_min <= 120))),
- CONSTRAINT agenda_configuracoes_online_buffer_depois_min_check CHECK (((online_buffer_depois_min >= 0) AND (online_buffer_depois_min <= 120))),
- CONSTRAINT agenda_configuracoes_online_cancelar_ate_horas_check CHECK (((online_cancelar_ate_horas >= 0) AND (online_cancelar_ate_horas <= 720))),
- CONSTRAINT agenda_configuracoes_online_limite_agendamentos_futuros_check CHECK (((online_limite_agendamentos_futuros >= 1) AND (online_limite_agendamentos_futuros <= 10))),
- CONSTRAINT agenda_configuracoes_online_max_dias_futuro_check CHECK (((online_max_dias_futuro >= 1) AND (online_max_dias_futuro <= 365))),
- CONSTRAINT agenda_configuracoes_online_min_antecedencia_horas_check CHECK (((online_min_antecedencia_horas >= 0) AND (online_min_antecedencia_horas <= 720))),
- CONSTRAINT agenda_configuracoes_online_modalidade_check CHECK ((online_modalidade = ANY (ARRAY['online'::text, 'presencial'::text, 'ambos'::text]))),
- CONSTRAINT agenda_configuracoes_online_modo_check CHECK ((online_modo = ANY (ARRAY['automatico'::text, 'aprovacao'::text]))),
- CONSTRAINT agenda_configuracoes_online_reagendar_ate_horas_check CHECK (((online_reagendar_ate_horas >= 0) AND (online_reagendar_ate_horas <= 720))),
- CONSTRAINT agenda_configuracoes_slot_mode_chk CHECK ((slot_mode = ANY (ARRAY['fixed'::text, 'dynamic'::text]))),
- CONSTRAINT session_break_min_chk CHECK (((session_break_min >= 0) AND (session_break_min <= 60))),
- CONSTRAINT session_duration_min_chk CHECK (((session_duration_min >= 10) AND (session_duration_min <= 240)))
-);
-
-
-ALTER TABLE public.agenda_configuracoes OWNER TO supabase_admin;
-
---
--- Name: agenda_eventos; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_eventos (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tipo public.tipo_evento_agenda DEFAULT 'sessao'::public.tipo_evento_agenda NOT NULL,
- status public.status_evento_agenda DEFAULT 'agendado'::public.status_evento_agenda NOT NULL,
- titulo text,
- observacoes text,
- inicio_em timestamp with time zone NOT NULL,
- fim_em timestamp with time zone NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- terapeuta_id uuid,
- tenant_id uuid NOT NULL,
- visibility_scope text DEFAULT 'public'::text NOT NULL,
- mirror_of_event_id uuid,
- mirror_source text,
- patient_id uuid,
- determined_commitment_id uuid,
- link_online text,
- titulo_custom text,
- extra_fields jsonb,
- recurrence_id uuid,
- recurrence_date date,
- modalidade text DEFAULT 'presencial'::text,
- price numeric(10,2),
- billing_contract_id uuid,
- billed boolean DEFAULT false NOT NULL,
- services_customized boolean DEFAULT false NOT NULL,
- insurance_plan_id uuid,
- insurance_guide_number text,
- insurance_value numeric(10,2),
- insurance_plan_service_id uuid,
- CONSTRAINT agenda_eventos_check CHECK ((fim_em > inicio_em))
-);
-
-
-ALTER TABLE public.agenda_eventos OWNER TO supabase_admin;
-
---
--- Name: COLUMN agenda_eventos.price; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.agenda_eventos.price IS 'Valor da sessão em BRL. Preenchido automaticamente pela tabela professional_pricing do profissional.';
-
-
---
--- Name: agenda_excecoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_excecoes (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- data date NOT NULL,
- hora_inicio time without time zone,
- hora_fim time without time zone,
- tipo public.tipo_excecao_agenda NOT NULL,
- motivo text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- status public.status_excecao_agenda DEFAULT 'ativo'::public.status_excecao_agenda NOT NULL,
- fonte text DEFAULT 'manual'::text NOT NULL,
- aplicavel_online boolean DEFAULT true NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_excecoes_check CHECK ((((hora_inicio IS NULL) AND (hora_fim IS NULL)) OR ((hora_inicio IS NOT NULL) AND (hora_fim IS NOT NULL) AND (hora_fim > hora_inicio)))),
- CONSTRAINT agenda_excecoes_fonte_check CHECK ((fonte = ANY (ARRAY['manual'::text, 'feriado_google'::text, 'sistema'::text])))
-);
-
-
-ALTER TABLE public.agenda_excecoes OWNER TO supabase_admin;
-
---
--- Name: agenda_online_slots; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_online_slots (
- id bigint NOT NULL,
- owner_id uuid NOT NULL,
- weekday integer NOT NULL,
- "time" time without time zone NOT NULL,
- enabled boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_online_slots_weekday_check CHECK ((weekday = ANY (ARRAY[0, 1, 2, 3, 4, 5, 6])))
-);
-
-
-ALTER TABLE public.agenda_online_slots OWNER TO supabase_admin;
-
---
--- Name: agenda_online_slots_id_seq; Type: SEQUENCE; Schema: public; Owner: supabase_admin
---
-
-CREATE SEQUENCE public.agenda_online_slots_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER SEQUENCE public.agenda_online_slots_id_seq OWNER TO supabase_admin;
-
---
--- Name: agenda_online_slots_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: supabase_admin
---
-
-ALTER SEQUENCE public.agenda_online_slots_id_seq OWNED BY public.agenda_online_slots.id;
-
-
---
--- Name: agenda_regras_semanais; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_regras_semanais (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- dia_semana smallint NOT NULL,
- hora_inicio time without time zone NOT NULL,
- hora_fim time without time zone NOT NULL,
- modalidade text DEFAULT 'ambos'::text NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_regras_semanais_check CHECK ((hora_fim > hora_inicio)),
- CONSTRAINT agenda_regras_semanais_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6))),
- CONSTRAINT agenda_regras_semanais_modalidade_check CHECK (((modalidade = ANY (ARRAY['online'::text, 'presencial'::text, 'ambos'::text])) OR (modalidade IS NULL)))
-);
-
-
-ALTER TABLE public.agenda_regras_semanais OWNER TO supabase_admin;
-
---
--- Name: agenda_slots_bloqueados_semanais; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_slots_bloqueados_semanais (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- dia_semana smallint NOT NULL,
- hora_inicio time without time zone NOT NULL,
- motivo text,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_slots_bloqueados_semanais_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6)))
-);
-
-
-ALTER TABLE public.agenda_slots_bloqueados_semanais OWNER TO supabase_admin;
-
---
--- Name: agenda_slots_regras; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_slots_regras (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- dia_semana smallint NOT NULL,
- passo_minutos integer NOT NULL,
- offset_minutos integer DEFAULT 0 NOT NULL,
- buffer_antes_min integer DEFAULT 0 NOT NULL,
- buffer_depois_min integer DEFAULT 0 NOT NULL,
- min_antecedencia_horas integer DEFAULT 0 NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_slots_regras_buffer_antes_min_check CHECK (((buffer_antes_min >= 0) AND (buffer_antes_min <= 240))),
- CONSTRAINT agenda_slots_regras_buffer_depois_min_check CHECK (((buffer_depois_min >= 0) AND (buffer_depois_min <= 240))),
- CONSTRAINT agenda_slots_regras_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6))),
- CONSTRAINT agenda_slots_regras_min_antecedencia_horas_check CHECK (((min_antecedencia_horas >= 0) AND (min_antecedencia_horas <= 720))),
- CONSTRAINT agenda_slots_regras_offset_minutos_check CHECK (((offset_minutos >= 0) AND (offset_minutos <= 55))),
- CONSTRAINT agenda_slots_regras_passo_minutos_check CHECK (((passo_minutos >= 5) AND (passo_minutos <= 240)))
-);
-
-
-ALTER TABLE public.agenda_slots_regras OWNER TO supabase_admin;
-
---
--- Name: agendador_configuracoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agendador_configuracoes (
- owner_id uuid NOT NULL,
- tenant_id uuid,
- ativo boolean DEFAULT false NOT NULL,
- link_slug text,
- imagem_fundo_url text,
- imagem_header_url text,
- logomarca_url text,
- cor_primaria text DEFAULT '#4b6bff'::text,
- nome_exibicao text,
- endereco text,
- botao_como_chegar_ativo boolean DEFAULT true NOT NULL,
- maps_url text,
- modo_aprovacao text DEFAULT 'aprovacao'::text NOT NULL,
- modalidade text DEFAULT 'presencial'::text NOT NULL,
- tipos_habilitados jsonb DEFAULT '["primeira", "retorno"]'::jsonb NOT NULL,
- duracao_sessao_min integer DEFAULT 50 NOT NULL,
- antecedencia_minima_horas integer DEFAULT 24 NOT NULL,
- prazo_resposta_horas integer DEFAULT 2 NOT NULL,
- reserva_horas integer DEFAULT 2 NOT NULL,
- pagamento_obrigatorio boolean DEFAULT false NOT NULL,
- pix_chave text,
- pix_countdown_minutos integer DEFAULT 20 NOT NULL,
- triagem_motivo boolean DEFAULT true NOT NULL,
- triagem_como_conheceu boolean DEFAULT false NOT NULL,
- verificacao_email boolean DEFAULT false NOT NULL,
- exigir_aceite_lgpd boolean DEFAULT true NOT NULL,
- mensagem_boas_vindas text,
- texto_como_se_preparar text,
- texto_termos_lgpd text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- pagamento_modo text DEFAULT 'sem_pagamento'::text NOT NULL,
- pagamento_metodos_visiveis text[] DEFAULT '{}'::text[] NOT NULL,
- CONSTRAINT agendador_configuracoes_antecedencia_check CHECK (((antecedencia_minima_horas >= 0) AND (antecedencia_minima_horas <= 720))),
- CONSTRAINT agendador_configuracoes_duracao_check CHECK (((duracao_sessao_min >= 10) AND (duracao_sessao_min <= 240))),
- CONSTRAINT agendador_configuracoes_modalidade_check CHECK ((modalidade = ANY (ARRAY['presencial'::text, 'online'::text, 'ambos'::text]))),
- CONSTRAINT agendador_configuracoes_modo_check CHECK ((modo_aprovacao = ANY (ARRAY['automatico'::text, 'aprovacao'::text]))),
- CONSTRAINT agendador_configuracoes_pix_countdown_check CHECK (((pix_countdown_minutos >= 5) AND (pix_countdown_minutos <= 120))),
- CONSTRAINT agendador_configuracoes_prazo_check CHECK (((prazo_resposta_horas >= 1) AND (prazo_resposta_horas <= 72))),
- CONSTRAINT agendador_configuracoes_reserva_check CHECK (((reserva_horas >= 1) AND (reserva_horas <= 48)))
-);
-
-
-ALTER TABLE public.agendador_configuracoes OWNER TO supabase_admin;
-
---
--- Name: COLUMN agendador_configuracoes.pagamento_modo; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.agendador_configuracoes.pagamento_modo IS 'sem_pagamento | pagar_na_hora | pix_antecipado';
-
-
---
--- Name: COLUMN agendador_configuracoes.pagamento_metodos_visiveis; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.agendador_configuracoes.pagamento_metodos_visiveis IS 'Métodos exibidos ao paciente quando pagamento_modo = pagar_na_hora. Ex: {pix, deposito, dinheiro, cartao, convenio}';
-
-
---
--- Name: agendador_solicitacoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agendador_solicitacoes (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid,
- paciente_nome text NOT NULL,
- paciente_sobrenome text,
- paciente_email text NOT NULL,
- paciente_celular text,
- paciente_cpf text,
- tipo text NOT NULL,
- modalidade text NOT NULL,
- data_solicitada date NOT NULL,
- hora_solicitada time without time zone NOT NULL,
- reservado_ate timestamp with time zone,
- motivo text,
- como_conheceu text,
- pix_status text DEFAULT 'pendente'::text,
- pix_pago_em timestamp with time zone,
- status text DEFAULT 'pendente'::text NOT NULL,
- recusado_motivo text,
- autorizado_em timestamp with time zone,
- autorizado_por uuid,
- user_id uuid,
- patient_id uuid,
- evento_id uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT agendador_sol_modalidade_check CHECK ((modalidade = ANY (ARRAY['presencial'::text, 'online'::text]))),
- CONSTRAINT agendador_sol_pix_check CHECK (((pix_status IS NULL) OR (pix_status = ANY (ARRAY['pendente'::text, 'pago'::text, 'expirado'::text])))),
- CONSTRAINT agendador_sol_status_check CHECK ((status = ANY (ARRAY['pendente'::text, 'autorizado'::text, 'recusado'::text, 'expirado'::text, 'convertido'::text]))),
- CONSTRAINT agendador_sol_tipo_check CHECK ((tipo = ANY (ARRAY['primeira'::text, 'retorno'::text, 'reagendar'::text])))
-);
-
-
-ALTER TABLE public.agendador_solicitacoes OWNER TO supabase_admin;
-
---
--- Name: billing_contracts; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.billing_contracts (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- patient_id uuid NOT NULL,
- type text NOT NULL,
- total_sessions integer,
- sessions_used integer DEFAULT 0,
- package_price numeric(10,2),
- amount numeric(10,2),
- billing_interval text,
- active_from timestamp with time zone DEFAULT now(),
- active_to timestamp with time zone,
- status text DEFAULT 'active'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- CONSTRAINT billing_contracts_interval_chk CHECK (((billing_interval IS NULL) OR (billing_interval = ANY (ARRAY['monthly'::text, 'weekly'::text])))),
- CONSTRAINT billing_contracts_sess_used_chk CHECK (((sessions_used IS NULL) OR (sessions_used >= 0))),
- CONSTRAINT billing_contracts_status_chk CHECK ((status = ANY (ARRAY['active'::text, 'completed'::text, 'cancelled'::text]))),
- CONSTRAINT billing_contracts_total_sess_chk CHECK (((total_sessions IS NULL) OR (total_sessions > 0))),
- CONSTRAINT billing_contracts_type_chk CHECK ((type = ANY (ARRAY['per_session'::text, 'package'::text, 'subscription'::text])))
-);
-
-
-ALTER TABLE public.billing_contracts OWNER TO supabase_admin;
-
---
--- Name: commitment_services; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.commitment_services (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- commitment_id uuid NOT NULL,
- service_id uuid NOT NULL,
- quantity integer DEFAULT 1 NOT NULL,
- unit_price numeric(10,2) NOT NULL,
- discount_pct numeric(5,2) DEFAULT 0,
- discount_flat numeric(10,2) DEFAULT 0,
- final_price numeric(10,2) NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- CONSTRAINT commitment_services_disc_flat_chk CHECK ((discount_flat >= (0)::numeric)),
- CONSTRAINT commitment_services_disc_pct_chk CHECK (((discount_pct >= (0)::numeric) AND (discount_pct <= (100)::numeric))),
- CONSTRAINT commitment_services_final_price_chk CHECK ((final_price >= (0)::numeric)),
- CONSTRAINT commitment_services_quantity_chk CHECK ((quantity > 0))
-);
-
-
-ALTER TABLE public.commitment_services OWNER TO supabase_admin;
-
---
--- Name: commitment_time_logs; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.commitment_time_logs (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- commitment_id uuid NOT NULL,
- calendar_event_id uuid,
- source public.commitment_log_source DEFAULT 'manual'::public.commitment_log_source NOT NULL,
- started_at timestamp with time zone NOT NULL,
- ended_at timestamp with time zone NOT NULL,
- minutes integer NOT NULL,
- created_by uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.commitment_time_logs OWNER TO supabase_admin;
-
---
--- Name: current_tenant_id; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.current_tenant_id AS
- SELECT current_setting('request.jwt.claim.tenant_id'::text, true) AS current_setting;
-
-
-ALTER VIEW public.current_tenant_id OWNER TO supabase_admin;
-
---
--- Name: determined_commitment_fields; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.determined_commitment_fields (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- commitment_id uuid NOT NULL,
- key text NOT NULL,
- label text NOT NULL,
- field_type public.determined_field_type DEFAULT 'text'::public.determined_field_type NOT NULL,
- required boolean DEFAULT false NOT NULL,
- sort_order integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.determined_commitment_fields OWNER TO supabase_admin;
-
---
--- Name: determined_commitments; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.determined_commitments (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- created_by uuid,
- is_native boolean DEFAULT false NOT NULL,
- native_key text,
- is_locked boolean DEFAULT false NOT NULL,
- active boolean DEFAULT true NOT NULL,
- name text NOT NULL,
- description text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- bg_color text,
- text_color text
-);
-
-
-ALTER TABLE public.determined_commitments OWNER TO supabase_admin;
-
---
--- Name: dev_user_credentials; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.dev_user_credentials (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid,
- email text NOT NULL,
- password_dev text NOT NULL,
- kind text DEFAULT 'custom'::text NOT NULL,
- note text,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.dev_user_credentials OWNER TO supabase_admin;
-
---
--- Name: entitlements_invalidation; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.entitlements_invalidation (
- owner_id uuid NOT NULL,
- changed_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.entitlements_invalidation OWNER TO supabase_admin;
-
---
--- Name: features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.features (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- key text NOT NULL,
- description text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- descricao text DEFAULT ''::text NOT NULL,
- name text DEFAULT ''::text NOT NULL
-);
-
-
-ALTER TABLE public.features OWNER TO supabase_admin;
-
---
--- Name: COLUMN features.descricao; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.features.descricao IS 'Descrição humana da feature (exibição no admin e documentação).';
-
-
---
--- Name: feriados; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.feriados (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid,
- owner_id uuid,
- tipo text DEFAULT 'municipal'::text NOT NULL,
- nome text NOT NULL,
- data date NOT NULL,
- cidade text,
- estado text,
- observacao text,
- bloqueia_sessoes boolean DEFAULT false NOT NULL,
- criado_em timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT feriados_tipo_check CHECK ((tipo = ANY (ARRAY['municipal'::text, 'personalizado'::text])))
-);
-
-
-ALTER TABLE public.feriados OWNER TO supabase_admin;
-
---
--- Name: financial_exceptions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.financial_exceptions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid,
- tenant_id uuid NOT NULL,
- exception_type text NOT NULL,
- charge_mode text NOT NULL,
- charge_value numeric(10,2),
- charge_pct numeric(5,2),
- min_hours_notice integer,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now(),
- CONSTRAINT financial_exceptions_charge_chk CHECK ((charge_mode = ANY (ARRAY['none'::text, 'full'::text, 'fixed_fee'::text, 'percentage'::text]))),
- CONSTRAINT financial_exceptions_type_chk CHECK ((exception_type = ANY (ARRAY['patient_no_show'::text, 'patient_cancellation'::text, 'professional_cancellation'::text])))
-);
-
-
-ALTER TABLE public.financial_exceptions OWNER TO supabase_admin;
-
---
--- Name: insurance_plan_services; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.insurance_plan_services (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- insurance_plan_id uuid NOT NULL,
- name text NOT NULL,
- value numeric(10,2) NOT NULL,
- active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.insurance_plan_services OWNER TO supabase_admin;
-
---
--- Name: insurance_plans; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.insurance_plans (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- name text NOT NULL,
- notes text,
- default_value numeric(10,2),
- active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.insurance_plans OWNER TO supabase_admin;
-
---
--- Name: module_features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.module_features (
- module_id uuid NOT NULL,
- feature_id uuid NOT NULL,
- enabled boolean DEFAULT true NOT NULL,
- limits jsonb,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.module_features OWNER TO supabase_admin;
-
---
--- Name: modules; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.modules (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- key text NOT NULL,
- name text NOT NULL,
- description text,
- is_active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.modules OWNER TO supabase_admin;
-
---
--- Name: plan_features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_features (
- plan_id uuid NOT NULL,
- feature_id uuid NOT NULL,
- enabled boolean DEFAULT true NOT NULL,
- limits jsonb,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.plan_features OWNER TO supabase_admin;
-
---
--- Name: tenant_modules; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_modules (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- module_id uuid NOT NULL,
- status text DEFAULT 'active'::text NOT NULL,
- settings jsonb,
- provider text DEFAULT 'manual'::text NOT NULL,
- provider_item_id text,
- installed_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_modules OWNER TO supabase_admin;
-
---
--- Name: owner_feature_entitlements; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.owner_feature_entitlements AS
- WITH base AS (
- SELECT s.user_id AS owner_id,
- f.key AS feature_key,
- pf.limits,
- 'plan'::text AS source
- FROM ((public.subscriptions s
- JOIN public.plan_features pf ON (((pf.plan_id = s.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)))
- WHERE ((s.status = 'active'::text) AND (s.user_id IS NOT NULL))
- UNION ALL
- SELECT tm.owner_id,
- f.key AS feature_key,
- mf.limits,
- 'module'::text AS source
- FROM (((public.tenant_modules tm
- JOIN public.modules m ON (((m.id = tm.module_id) AND (m.is_active = true))))
- JOIN public.module_features mf ON (((mf.module_id = m.id) AND (mf.enabled = true))))
- JOIN public.features f ON ((f.id = mf.feature_id)))
- WHERE ((tm.status = 'active'::text) AND (tm.owner_id IS NOT NULL))
- )
- SELECT owner_id,
- feature_key,
- array_agg(DISTINCT source) AS sources,
- jsonb_agg(limits) FILTER (WHERE (limits IS NOT NULL)) AS limits_list
- FROM base
- GROUP BY owner_id, feature_key;
-
-
-ALTER VIEW public.owner_feature_entitlements OWNER TO supabase_admin;
-
---
--- Name: owner_users; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.owner_users (
- owner_id uuid NOT NULL,
- user_id uuid NOT NULL,
- role text DEFAULT 'admin'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.owner_users OWNER TO supabase_admin;
-
---
--- Name: patient_discounts; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_discounts (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- patient_id uuid NOT NULL,
- discount_pct numeric(5,2) DEFAULT 0,
- discount_flat numeric(10,2) DEFAULT 0,
- reason text,
- active boolean DEFAULT true NOT NULL,
- active_from timestamp with time zone DEFAULT now(),
- active_to timestamp with time zone,
- created_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.patient_discounts OWNER TO supabase_admin;
-
---
--- Name: patient_group_patient; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_group_patient (
- patient_group_id uuid NOT NULL,
- patient_id uuid NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_group_patient OWNER TO supabase_admin;
-
---
--- Name: patient_groups; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_groups (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- nome text NOT NULL,
- descricao text,
- cor text,
- is_active boolean DEFAULT true NOT NULL,
- is_system boolean DEFAULT false NOT NULL,
- owner_id uuid DEFAULT auth.uid() NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- therapist_id uuid,
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_groups OWNER TO supabase_admin;
-
---
--- Name: patient_intake_requests; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_intake_requests (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- token text NOT NULL,
- consent boolean DEFAULT false NOT NULL,
- status text DEFAULT 'new'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- converted_patient_id uuid,
- rejected_reason text,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- cpf text,
- rg text,
- cep text,
- nome_completo text,
- email_principal text,
- telefone text,
- pais text,
- cidade text,
- estado text,
- endereco text,
- numero text,
- bairro text,
- complemento text,
- data_nascimento date,
- naturalidade text,
- genero text,
- estado_civil text,
- onde_nos_conheceu text,
- encaminhado_por text,
- observacoes text,
- notas_internas text,
- email_alternativo text,
- telefone_alternativo text,
- profissao text,
- escolaridade text,
- nacionalidade text,
- avatar_url text,
- tenant_id uuid,
- CONSTRAINT chk_intakes_status CHECK ((status = ANY (ARRAY['new'::text, 'converted'::text, 'rejected'::text])))
-);
-
-
-ALTER TABLE public.patient_intake_requests OWNER TO supabase_admin;
-
---
--- Name: patient_invites; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_invites (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- token text NOT NULL,
- active boolean DEFAULT true NOT NULL,
- expires_at timestamp with time zone,
- max_uses integer,
- uses integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid
-);
-
-
-ALTER TABLE public.patient_invites OWNER TO supabase_admin;
-
---
--- Name: patient_patient_tag; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_patient_tag (
- owner_id uuid NOT NULL,
- patient_id uuid NOT NULL,
- tag_id uuid NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_patient_tag OWNER TO supabase_admin;
-
---
--- Name: patient_tags; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_tags (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- nome text NOT NULL,
- cor text,
- is_padrao boolean DEFAULT false NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone,
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_tags OWNER TO supabase_admin;
-
---
--- Name: patients; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patients (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- nome_completo text NOT NULL,
- email_principal text,
- telefone text,
- created_at timestamp with time zone DEFAULT now(),
- owner_id uuid,
- avatar_url text,
- status text DEFAULT 'Ativo'::text,
- last_attended_at timestamp with time zone,
- is_native boolean DEFAULT false,
- naturalidade text,
- data_nascimento date,
- rg text,
- cpf text,
- identification_color text,
- genero text,
- estado_civil text,
- email_alternativo text,
- pais text DEFAULT 'Brasil'::text,
- cep text,
- cidade text,
- estado text,
- endereco text,
- numero text,
- bairro text,
- complemento text,
- escolaridade text,
- profissao text,
- nome_parente text,
- grau_parentesco text,
- telefone_alternativo text,
- onde_nos_conheceu text,
- encaminhado_por text,
- nome_responsavel text,
- telefone_responsavel text,
- cpf_responsavel text,
- observacao_responsavel text,
- cobranca_no_responsavel boolean DEFAULT false,
- observacoes text,
- notas_internas text,
- updated_at timestamp with time zone DEFAULT now(),
- telefone_parente text,
- tenant_id uuid NOT NULL,
- responsible_member_id uuid NOT NULL,
- user_id uuid,
- patient_scope text DEFAULT 'clinic'::text NOT NULL,
- therapist_member_id uuid,
- CONSTRAINT cpf_responsavel_format_check CHECK (((cpf_responsavel IS NULL) OR (cpf_responsavel ~ '^\d{11}$'::text))),
- CONSTRAINT patients_cpf_format_check CHECK (((cpf IS NULL) OR (cpf ~ '^\d{11}$'::text))),
- CONSTRAINT patients_patient_scope_check CHECK ((patient_scope = ANY (ARRAY['clinic'::text, 'therapist'::text]))),
- CONSTRAINT patients_status_check CHECK ((status = ANY (ARRAY['Ativo'::text, 'Inativo'::text, 'Alta'::text, 'Encaminhado'::text]))),
- CONSTRAINT patients_therapist_scope_consistency CHECK ((((patient_scope = 'clinic'::text) AND (therapist_member_id IS NULL)) OR ((patient_scope = 'therapist'::text) AND (therapist_member_id IS NOT NULL))))
-);
-
-
-ALTER TABLE public.patients OWNER TO supabase_admin;
-
---
--- Name: COLUMN patients.avatar_url; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.patients.avatar_url IS 'URL pública da imagem de avatar armazenada no Supabase Storage';
-
-
---
--- Name: payment_settings; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.payment_settings (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid,
- pix_ativo boolean DEFAULT false NOT NULL,
- pix_tipo text DEFAULT 'cpf'::text NOT NULL,
- pix_chave text DEFAULT ''::text NOT NULL,
- pix_nome_titular text DEFAULT ''::text NOT NULL,
- deposito_ativo boolean DEFAULT false NOT NULL,
- deposito_banco text DEFAULT ''::text NOT NULL,
- deposito_agencia text DEFAULT ''::text NOT NULL,
- deposito_conta text DEFAULT ''::text NOT NULL,
- deposito_tipo_conta text DEFAULT 'corrente'::text NOT NULL,
- deposito_titular text DEFAULT ''::text NOT NULL,
- deposito_cpf_cnpj text DEFAULT ''::text NOT NULL,
- dinheiro_ativo boolean DEFAULT false NOT NULL,
- cartao_ativo boolean DEFAULT false NOT NULL,
- cartao_instrucao text DEFAULT ''::text NOT NULL,
- convenio_ativo boolean DEFAULT false NOT NULL,
- convenio_lista text DEFAULT ''::text NOT NULL,
- observacoes_pagamento text DEFAULT ''::text NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.payment_settings OWNER TO supabase_admin;
-
---
--- Name: plan_prices; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_prices (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- plan_id uuid NOT NULL,
- currency text DEFAULT 'BRL'::text NOT NULL,
- "interval" text NOT NULL,
- amount_cents integer NOT NULL,
- is_active boolean DEFAULT true NOT NULL,
- active_from timestamp with time zone DEFAULT now() NOT NULL,
- active_to timestamp with time zone,
- source text DEFAULT 'manual'::text NOT NULL,
- provider text,
- provider_price_id text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT plan_prices_amount_cents_check CHECK ((amount_cents >= 0)),
- CONSTRAINT plan_prices_interval_check CHECK (("interval" = ANY (ARRAY['month'::text, 'year'::text])))
-);
-
-
-ALTER TABLE public.plan_prices OWNER TO supabase_admin;
-
---
--- Name: TABLE plan_prices; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.plan_prices IS 'Histórico de preços por plano (fonte: manual/gateway).';
-
-
---
--- Name: plan_public; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_public (
- plan_id uuid NOT NULL,
- public_name text DEFAULT ''::text NOT NULL,
- public_description text DEFAULT ''::text NOT NULL,
- badge text,
- is_featured boolean DEFAULT false NOT NULL,
- is_visible boolean DEFAULT true NOT NULL,
- sort_order integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.plan_public OWNER TO supabase_admin;
-
---
--- Name: TABLE plan_public; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.plan_public IS 'Configuração de vitrine (página pública) dos planos.';
-
-
---
--- Name: plan_public_bullets; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_public_bullets (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- plan_id uuid NOT NULL,
- text text NOT NULL,
- sort_order integer DEFAULT 0 NOT NULL,
- highlight boolean DEFAULT false NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.plan_public_bullets OWNER TO supabase_admin;
-
---
--- Name: plans; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plans (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- key text NOT NULL,
- name text NOT NULL,
- description text,
- is_active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- price_cents integer DEFAULT 0 NOT NULL,
- currency text DEFAULT 'BRL'::text NOT NULL,
- billing_interval text DEFAULT 'month'::text NOT NULL,
- target text,
- max_supervisees integer,
- CONSTRAINT plans_target_check CHECK ((target = ANY (ARRAY['patient'::text, 'therapist'::text, 'clinic'::text, 'supervisor'::text])))
-);
-
-
-ALTER TABLE public.plans OWNER TO supabase_admin;
-
---
--- Name: COLUMN plans.name; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.plans.name IS 'Nome interno do plano (admin). A key é técnica/imutável.';
-
-
---
--- Name: COLUMN plans.target; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.plans.target IS 'Público-alvo do plano: patient, therapist ou clinic.';
-
-
---
--- Name: COLUMN plans.max_supervisees; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.plans.max_supervisees IS 'Limite de terapeutas que podem ser supervisionados. Apenas para planos target=supervisor. NULL = sem limite.';
-
-
---
--- Name: professional_pricing; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.professional_pricing (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- determined_commitment_id uuid,
- price numeric(10,2) NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.professional_pricing OWNER TO supabase_admin;
-
---
--- Name: TABLE professional_pricing; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.professional_pricing IS 'DEPRECATED: substituída por public.services. Manter até próxima release de limpeza.';
-
-
---
--- Name: profiles; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.profiles (
- id uuid NOT NULL,
- role text DEFAULT 'tenant_member'::text NOT NULL,
- full_name text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- avatar_url text,
- phone text,
- bio text,
- language text DEFAULT 'pt-BR'::text NOT NULL,
- timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL,
- notify_system_email boolean DEFAULT true NOT NULL,
- notify_reminders boolean DEFAULT true NOT NULL,
- notify_news boolean DEFAULT false NOT NULL,
- account_type text DEFAULT 'free'::text NOT NULL,
- platform_roles text[] DEFAULT '{}'::text[] NOT NULL,
- CONSTRAINT profiles_account_type_check CHECK ((account_type = ANY (ARRAY['free'::text, 'patient'::text, 'therapist'::text, 'clinic'::text]))),
- CONSTRAINT profiles_role_check CHECK ((role = ANY (ARRAY['saas_admin'::text, 'tenant_member'::text, 'portal_user'::text, 'patient'::text])))
-);
-
-
-ALTER TABLE public.profiles OWNER TO supabase_admin;
-
---
--- Name: COLUMN profiles.account_type; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.account_type IS 'Tipo de conta: free=sem perfil ainda, patient=paciente (imutável), therapist=terapeuta (imutável), clinic=clínica (imutável).';
-
-
---
--- Name: COLUMN profiles.platform_roles; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.platform_roles IS 'Papéis globais de plataforma, independentes de tenant. Ex: editor de microlearning. Atribuído pelo saas_admin.';
-
-
---
--- Name: recurrence_exceptions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.recurrence_exceptions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- recurrence_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- original_date date NOT NULL,
- type public.recurrence_exception_type NOT NULL,
- new_date date,
- new_start_time time without time zone,
- new_end_time time without time zone,
- modalidade text,
- observacoes text,
- titulo_custom text,
- extra_fields jsonb,
- reason text,
- agenda_evento_id uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.recurrence_exceptions OWNER TO supabase_admin;
-
---
--- Name: recurrence_rule_services; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.recurrence_rule_services (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- rule_id uuid NOT NULL,
- service_id uuid NOT NULL,
- quantity integer DEFAULT 1 NOT NULL,
- unit_price numeric(10,2) NOT NULL,
- discount_pct numeric(5,2) DEFAULT 0,
- discount_flat numeric(10,2) DEFAULT 0,
- final_price numeric(10,2) NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- CONSTRAINT recurrence_rule_services_disc_flat_chk CHECK ((discount_flat >= (0)::numeric)),
- CONSTRAINT recurrence_rule_services_disc_pct_chk CHECK (((discount_pct >= (0)::numeric) AND (discount_pct <= (100)::numeric))),
- CONSTRAINT recurrence_rule_services_final_price_chk CHECK ((final_price >= (0)::numeric)),
- CONSTRAINT recurrence_rule_services_quantity_chk CHECK ((quantity > 0))
-);
-
-
-ALTER TABLE public.recurrence_rule_services OWNER TO supabase_admin;
-
---
--- Name: recurrence_rules; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.recurrence_rules (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- owner_id uuid NOT NULL,
- therapist_id uuid,
- patient_id uuid,
- determined_commitment_id uuid,
- type public.recurrence_type DEFAULT 'weekly'::public.recurrence_type NOT NULL,
- "interval" smallint DEFAULT 1 NOT NULL,
- weekdays smallint[] DEFAULT '{}'::smallint[] NOT NULL,
- start_time time without time zone NOT NULL,
- end_time time without time zone NOT NULL,
- timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL,
- duration_min smallint DEFAULT 50 NOT NULL,
- start_date date NOT NULL,
- end_date date,
- max_occurrences integer,
- open_ended boolean DEFAULT true NOT NULL,
- modalidade text DEFAULT 'presencial'::text,
- titulo_custom text,
- observacoes text,
- extra_fields jsonb,
- status text DEFAULT 'ativo'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- price numeric(10,2),
- insurance_plan_id uuid,
- insurance_guide_number text,
- insurance_value numeric(10,2),
- insurance_plan_service_id uuid,
- CONSTRAINT recurrence_rules_dates_chk CHECK (((end_date IS NULL) OR (end_date >= start_date))),
- CONSTRAINT recurrence_rules_interval_chk CHECK (("interval" >= 1)),
- CONSTRAINT recurrence_rules_status_check CHECK ((status = ANY (ARRAY['ativo'::text, 'pausado'::text, 'cancelado'::text]))),
- CONSTRAINT recurrence_rules_times_chk CHECK ((end_time > start_time))
-);
-
-
-ALTER TABLE public.recurrence_rules OWNER TO supabase_admin;
-
---
--- Name: saas_admins; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_admins (
- user_id uuid NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_admins OWNER TO supabase_admin;
-
---
--- Name: saas_doc_votos; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_doc_votos (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- doc_id uuid NOT NULL,
- user_id uuid NOT NULL,
- util boolean NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_doc_votos OWNER TO supabase_admin;
-
---
--- Name: saas_docs; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_docs (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- titulo text NOT NULL,
- conteudo text DEFAULT ''::text NOT NULL,
- medias jsonb DEFAULT '[]'::jsonb NOT NULL,
- tipo_acesso text DEFAULT 'usuario'::text NOT NULL,
- pagina_path text NOT NULL,
- docs_relacionados uuid[] DEFAULT '{}'::uuid[] NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- ordem integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- categoria text,
- exibir_no_faq boolean DEFAULT false NOT NULL,
- votos_util integer DEFAULT 0 NOT NULL,
- votos_nao_util integer DEFAULT 0 NOT NULL,
- CONSTRAINT saas_docs_tipo_acesso_check CHECK ((tipo_acesso = ANY (ARRAY['admin'::text, 'usuario'::text])))
-);
-
-
-ALTER TABLE public.saas_docs OWNER TO supabase_admin;
-
---
--- Name: COLUMN saas_docs.categoria; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.saas_docs.categoria IS 'Agrupa docs no portal FAQ (ex: Conta, Agenda, Pagamentos)';
-
-
---
--- Name: COLUMN saas_docs.exibir_no_faq; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.saas_docs.exibir_no_faq IS 'Se true, a doc e seus itens FAQ aparecem no portal de FAQ';
-
-
---
--- Name: saas_faq; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_faq (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- pergunta text NOT NULL,
- categoria text,
- publico boolean DEFAULT false NOT NULL,
- votos integer DEFAULT 0 NOT NULL,
- titulo text,
- conteudo text,
- tipo_acesso text DEFAULT 'usuario'::text NOT NULL,
- pagina_path text NOT NULL,
- pagina_label text,
- medias jsonb DEFAULT '[]'::jsonb NOT NULL,
- faqs_relacionados uuid[] DEFAULT '{}'::uuid[] NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- ordem integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_faq OWNER TO supabase_admin;
-
---
--- Name: saas_faq_itens; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_faq_itens (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- doc_id uuid NOT NULL,
- pergunta text NOT NULL,
- resposta text,
- ordem integer DEFAULT 0 NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_faq_itens OWNER TO supabase_admin;
-
---
--- Name: TABLE saas_faq_itens; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.saas_faq_itens IS 'Pares pergunta/resposta vinculados a um documento de ajuda';
-
-
---
--- Name: services; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.services (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- name text NOT NULL,
- description text,
- price numeric(10,2) NOT NULL,
- duration_min integer,
- active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.services OWNER TO supabase_admin;
-
---
--- Name: subscription_events; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_events (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- subscription_id uuid NOT NULL,
- owner_id uuid NOT NULL,
- event_type text NOT NULL,
- old_plan_id uuid,
- new_plan_id uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- created_by uuid,
- source text DEFAULT 'admin_ui'::text,
- reason text,
- metadata jsonb,
- owner_type text NOT NULL,
- owner_ref uuid NOT NULL,
- CONSTRAINT subscription_events_owner_ref_consistency_chk CHECK ((owner_id = owner_ref)),
- CONSTRAINT subscription_events_owner_type_chk CHECK (((owner_type IS NULL) OR (owner_type = ANY (ARRAY['clinic'::text, 'therapist'::text]))))
-);
-
-
-ALTER TABLE public.subscription_events OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_personal; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_intents_personal (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid NOT NULL,
- created_by_user_id uuid,
- email text NOT NULL,
- plan_id uuid NOT NULL,
- plan_key text,
- "interval" text,
- amount_cents integer,
- currency text,
- status text DEFAULT 'new'::text NOT NULL,
- source text DEFAULT 'manual'::text NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- paid_at timestamp with time zone,
- subscription_id uuid,
- CONSTRAINT sint_personal_interval_check CHECK ((("interval" IS NULL) OR ("interval" = ANY (ARRAY['month'::text, 'year'::text])))),
- CONSTRAINT sint_personal_status_check CHECK ((status = ANY (ARRAY['new'::text, 'waiting_payment'::text, 'paid'::text, 'canceled'::text])))
-);
-
-
-ALTER TABLE public.subscription_intents_personal OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_tenant; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_intents_tenant (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid NOT NULL,
- created_by_user_id uuid,
- email text NOT NULL,
- plan_id uuid NOT NULL,
- plan_key text,
- "interval" text,
- amount_cents integer,
- currency text,
- status text DEFAULT 'new'::text NOT NULL,
- source text DEFAULT 'manual'::text NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- paid_at timestamp with time zone,
- tenant_id uuid NOT NULL,
- subscription_id uuid,
- CONSTRAINT sint_tenant_interval_check CHECK ((("interval" IS NULL) OR ("interval" = ANY (ARRAY['month'::text, 'year'::text])))),
- CONSTRAINT sint_tenant_status_check CHECK ((status = ANY (ARRAY['new'::text, 'waiting_payment'::text, 'paid'::text, 'canceled'::text])))
-);
-
-
-ALTER TABLE public.subscription_intents_tenant OWNER TO supabase_admin;
-
---
--- Name: subscription_intents; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.subscription_intents AS
- SELECT t.id,
- t.user_id,
- t.created_by_user_id,
- t.email,
- t.plan_id,
- t.plan_key,
- t."interval",
- t.amount_cents,
- t.currency,
- t.status,
- t.source,
- t.notes,
- t.created_at,
- t.paid_at,
- t.tenant_id,
- t.subscription_id,
- 'clinic'::text AS plan_target
- FROM public.subscription_intents_tenant t
-UNION ALL
- SELECT p.id,
- p.user_id,
- p.created_by_user_id,
- p.email,
- p.plan_id,
- p.plan_key,
- p."interval",
- p.amount_cents,
- p.currency,
- p.status,
- p.source,
- p.notes,
- p.created_at,
- p.paid_at,
- NULL::uuid AS tenant_id,
- p.subscription_id,
- 'therapist'::text AS plan_target
- FROM public.subscription_intents_personal p;
-
-
-ALTER VIEW public.subscription_intents OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_legacy; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_intents_legacy (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid,
- email text,
- plan_key text NOT NULL,
- "interval" text NOT NULL,
- amount_cents integer NOT NULL,
- currency text DEFAULT 'BRL'::text NOT NULL,
- status text DEFAULT 'new'::text NOT NULL,
- source text DEFAULT 'landing'::text NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- paid_at timestamp with time zone,
- tenant_id uuid NOT NULL,
- created_by_user_id uuid,
- CONSTRAINT subscription_intents_interval_check CHECK (("interval" = ANY (ARRAY['month'::text, 'year'::text]))),
- CONSTRAINT subscription_intents_status_check CHECK ((status = ANY (ARRAY['new'::text, 'waiting_payment'::text, 'paid'::text, 'canceled'::text])))
-);
-
-
-ALTER TABLE public.subscription_intents_legacy OWNER TO supabase_admin;
-
---
--- Name: support_sessions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.support_sessions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- admin_id uuid NOT NULL,
- token text DEFAULT encode(extensions.gen_random_bytes(32), 'hex'::text) NOT NULL,
- expires_at timestamp with time zone DEFAULT (now() + '01:00:00'::interval) NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.support_sessions OWNER TO supabase_admin;
-
---
--- Name: tenant_feature_exceptions_log; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_feature_exceptions_log (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- feature_key text NOT NULL,
- enabled boolean NOT NULL,
- reason text,
- created_by uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_feature_exceptions_log OWNER TO supabase_admin;
-
---
--- Name: tenant_features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_features (
- tenant_id uuid NOT NULL,
- feature_key text NOT NULL,
- enabled boolean DEFAULT false NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_features OWNER TO supabase_admin;
-
---
--- Name: tenant_invites; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_invites (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- email text NOT NULL,
- role text NOT NULL,
- token uuid DEFAULT gen_random_uuid() NOT NULL,
- invited_by uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- expires_at timestamp with time zone DEFAULT (now() + '7 days'::interval) NOT NULL,
- accepted_at timestamp with time zone,
- accepted_by uuid,
- revoked_at timestamp with time zone,
- revoked_by uuid,
- CONSTRAINT tenant_invites_role_check CHECK ((role = ANY (ARRAY['therapist'::text, 'secretary'::text])))
-);
-
-
-ALTER TABLE public.tenant_invites OWNER TO supabase_admin;
-
---
--- Name: tenants; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenants (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- name text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- kind text DEFAULT 'saas'::text NOT NULL,
- CONSTRAINT tenants_kind_check CHECK ((kind = ANY (ARRAY['therapist'::text, 'clinic_coworking'::text, 'clinic_reception'::text, 'clinic_full'::text, 'clinic'::text, 'saas'::text, 'supervisor'::text])))
-);
-
-
-ALTER TABLE public.tenants OWNER TO supabase_admin;
-
---
--- Name: COLUMN tenants.kind; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.tenants.kind IS 'Tipo do tenant. Imutável após criação. therapist=terapeuta solo. clinic_coworking/clinic_reception/clinic_full=clínicas. clinic e saas são legados.';
-
-
---
--- Name: user_settings; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.user_settings (
- user_id uuid NOT NULL,
- theme_mode text DEFAULT 'dark'::text NOT NULL,
- preset text DEFAULT 'Aura'::text NOT NULL,
- primary_color text DEFAULT 'noir'::text NOT NULL,
- surface_color text DEFAULT 'slate'::text NOT NULL,
- menu_mode text DEFAULT 'static'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.user_settings OWNER TO supabase_admin;
-
---
--- Name: v_auth_users_public; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_auth_users_public AS
- SELECT id AS user_id,
- email,
- created_at,
- last_sign_in_at
- FROM auth.users u;
-
-
-ALTER VIEW public.v_auth_users_public OWNER TO supabase_admin;
-
---
--- Name: v_commitment_totals; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_commitment_totals AS
- SELECT c.tenant_id,
- c.id AS commitment_id,
- (COALESCE(sum(l.minutes), (0)::bigint))::integer AS total_minutes
- FROM (public.determined_commitments c
- LEFT JOIN public.commitment_time_logs l ON ((l.commitment_id = c.id)))
- GROUP BY c.tenant_id, c.id;
-
-
-ALTER VIEW public.v_commitment_totals OWNER TO supabase_admin;
-
---
--- Name: v_patient_groups_with_counts; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_patient_groups_with_counts AS
- SELECT pg.id,
- pg.nome,
- pg.cor,
- pg.owner_id,
- pg.is_system,
- pg.is_active,
- pg.created_at,
- pg.updated_at,
- (COALESCE(count(pgp.patient_id), (0)::bigint))::integer AS patients_count
- FROM (public.patient_groups pg
- LEFT JOIN public.patient_group_patient pgp ON ((pgp.patient_group_id = pg.id)))
- GROUP BY pg.id, pg.nome, pg.cor, pg.owner_id, pg.is_system, pg.is_active, pg.created_at, pg.updated_at;
-
-
-ALTER VIEW public.v_patient_groups_with_counts OWNER TO supabase_admin;
-
---
--- Name: v_plan_active_prices; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_plan_active_prices AS
- SELECT plan_id,
- max(
- CASE
- WHEN (("interval" = 'month'::text) AND is_active) THEN amount_cents
- ELSE NULL::integer
- END) AS monthly_cents,
- max(
- CASE
- WHEN (("interval" = 'year'::text) AND is_active) THEN amount_cents
- ELSE NULL::integer
- END) AS yearly_cents,
- max(
- CASE
- WHEN (("interval" = 'month'::text) AND is_active) THEN currency
- ELSE NULL::text
- END) AS monthly_currency,
- max(
- CASE
- WHEN (("interval" = 'year'::text) AND is_active) THEN currency
- ELSE NULL::text
- END) AS yearly_currency
- FROM public.plan_prices
- GROUP BY plan_id;
-
-
-ALTER VIEW public.v_plan_active_prices OWNER TO supabase_admin;
-
---
--- Name: v_public_pricing; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_public_pricing AS
- SELECT p.id AS plan_id,
- p.key AS plan_key,
- p.name AS plan_name,
- COALESCE(pp.public_name, ''::text) AS public_name,
- COALESCE(pp.public_description, ''::text) AS public_description,
- pp.badge,
- COALESCE(pp.is_featured, false) AS is_featured,
- COALESCE(pp.is_visible, true) AS is_visible,
- COALESCE(pp.sort_order, 0) AS sort_order,
- ap.monthly_cents,
- ap.yearly_cents,
- ap.monthly_currency,
- ap.yearly_currency,
- COALESCE(( SELECT jsonb_agg(jsonb_build_object('id', b.id, 'text', b.text, 'highlight', b.highlight, 'sort_order', b.sort_order) ORDER BY b.sort_order, b.created_at) AS jsonb_agg
- FROM public.plan_public_bullets b
- WHERE (b.plan_id = p.id)), '[]'::jsonb) AS bullets,
- p.target AS plan_target
- FROM ((public.plans p
- LEFT JOIN public.plan_public pp ON ((pp.plan_id = p.id)))
- LEFT JOIN public.v_plan_active_prices ap ON ((ap.plan_id = p.id)))
- ORDER BY COALESCE(pp.sort_order, 0), p.key;
-
-
-ALTER VIEW public.v_public_pricing OWNER TO supabase_admin;
-
---
--- Name: v_subscription_feature_mismatch; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_subscription_feature_mismatch AS
- WITH expected AS (
- SELECT s.user_id AS owner_id,
- f.key AS feature_key
- FROM ((public.subscriptions s
- JOIN public.plan_features pf ON (((pf.plan_id = s.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)))
- WHERE ((s.status = 'active'::text) AND (s.tenant_id IS NULL) AND (s.user_id IS NOT NULL))
- ), actual AS (
- SELECT e.owner_id,
- e.feature_key
- FROM public.owner_feature_entitlements e
- )
- SELECT COALESCE(expected.owner_id, actual.owner_id) AS owner_id,
- COALESCE(expected.feature_key, actual.feature_key) AS feature_key,
- CASE
- WHEN ((expected.feature_key IS NOT NULL) AND (actual.feature_key IS NULL)) THEN 'missing_entitlement'::text
- WHEN ((expected.feature_key IS NULL) AND (actual.feature_key IS NOT NULL)) THEN 'unexpected_entitlement'::text
- ELSE NULL::text
- END AS mismatch_type
- FROM (expected
- FULL JOIN actual ON (((expected.owner_id = actual.owner_id) AND (expected.feature_key = actual.feature_key))))
- WHERE ((expected.feature_key IS NULL) OR (actual.feature_key IS NULL));
-
-
-ALTER VIEW public.v_subscription_feature_mismatch OWNER TO supabase_admin;
-
---
--- Name: v_subscription_health; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_subscription_health AS
- SELECT s.id AS subscription_id,
- s.user_id AS owner_id,
- s.status,
- s.plan_id,
- p.key AS plan_key,
- s.current_period_start,
- s.current_period_end,
- s.updated_at,
- CASE
- WHEN (s.plan_id IS NULL) THEN 'missing_plan'::text
- WHEN (p.id IS NULL) THEN 'invalid_plan'::text
- WHEN ((s.status = 'active'::text) AND (s.current_period_end IS NOT NULL) AND (s.current_period_end < now())) THEN 'expired_but_active'::text
- WHEN ((s.status = 'canceled'::text) AND (s.current_period_end > now())) THEN 'canceled_but_still_in_period'::text
- ELSE 'ok'::text
- END AS health_status,
- CASE
- WHEN (s.tenant_id IS NOT NULL) THEN 'clinic'::text
- ELSE 'therapist'::text
- END AS owner_type,
- COALESCE(s.tenant_id, s.user_id) AS owner_ref
- FROM (public.subscriptions s
- LEFT JOIN public.plans p ON ((p.id = s.plan_id)));
-
-
-ALTER VIEW public.v_subscription_health OWNER TO supabase_admin;
-
---
--- Name: v_subscription_health_v2; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_subscription_health_v2 AS
- SELECT s.id AS subscription_id,
- s.user_id AS owner_id,
- CASE
- WHEN (s.tenant_id IS NOT NULL) THEN 'clinic'::text
- ELSE 'therapist'::text
- END AS owner_type,
- COALESCE(s.tenant_id, s.user_id) AS owner_ref,
- s.status,
- s.plan_id,
- p.key AS plan_key,
- s.current_period_start,
- s.current_period_end,
- s.updated_at,
- CASE
- WHEN (s.plan_id IS NULL) THEN 'missing_plan'::text
- WHEN (p.id IS NULL) THEN 'invalid_plan'::text
- WHEN ((s.status = 'active'::text) AND (s.current_period_end IS NOT NULL) AND (s.current_period_end < now())) THEN 'expired_but_active'::text
- WHEN ((s.status = 'canceled'::text) AND (s.current_period_end > now())) THEN 'canceled_but_still_in_period'::text
- ELSE 'ok'::text
- END AS health_status
- FROM (public.subscriptions s
- LEFT JOIN public.plans p ON ((p.id = s.plan_id)));
-
-
-ALTER VIEW public.v_subscription_health_v2 OWNER TO supabase_admin;
-
---
--- Name: v_tag_patient_counts; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tag_patient_counts AS
- SELECT t.id,
- t.owner_id,
- t.nome,
- t.cor,
- t.is_padrao,
- t.created_at,
- t.updated_at,
- (COALESCE(count(ppt.patient_id), (0)::bigint))::integer AS pacientes_count,
- (COALESCE(count(ppt.patient_id), (0)::bigint))::integer AS patient_count
- FROM (public.patient_tags t
- LEFT JOIN public.patient_patient_tag ppt ON (((ppt.tag_id = t.id) AND (ppt.owner_id = t.owner_id))))
- GROUP BY t.id, t.owner_id, t.nome, t.cor, t.is_padrao, t.created_at, t.updated_at;
-
-
-ALTER VIEW public.v_tag_patient_counts OWNER TO supabase_admin;
-
---
--- Name: v_tenant_active_subscription; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_active_subscription AS
- SELECT DISTINCT ON (tenant_id) tenant_id,
- plan_id,
- plan_key,
- "interval",
- status,
- current_period_start,
- current_period_end,
- created_at
- FROM public.subscriptions s
- WHERE ((tenant_id IS NOT NULL) AND (status = 'active'::text) AND ((current_period_end IS NULL) OR (current_period_end > now())))
- ORDER BY tenant_id, created_at DESC;
-
-
-ALTER VIEW public.v_tenant_active_subscription OWNER TO supabase_admin;
-
---
--- Name: v_tenant_entitlements; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_entitlements AS
- SELECT a.tenant_id,
- f.key AS feature_key,
- true AS allowed
- FROM ((public.v_tenant_active_subscription a
- JOIN public.plan_features pf ON (((pf.plan_id = a.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)));
-
-
-ALTER VIEW public.v_tenant_entitlements OWNER TO supabase_admin;
-
---
--- Name: v_tenant_entitlements_full; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_entitlements_full AS
- SELECT a.tenant_id,
- f.key AS feature_key,
- (pf.enabled = true) AS allowed,
- pf.limits,
- a.plan_id,
- p.key AS plan_key
- FROM (((public.v_tenant_active_subscription a
- JOIN public.plan_features pf ON ((pf.plan_id = a.plan_id)))
- JOIN public.features f ON ((f.id = pf.feature_id)))
- JOIN public.plans p ON ((p.id = a.plan_id)));
-
-
-ALTER VIEW public.v_tenant_entitlements_full OWNER TO supabase_admin;
-
---
--- Name: v_tenant_entitlements_json; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_entitlements_json AS
- SELECT tenant_id,
- max(plan_key) AS plan_key,
- jsonb_object_agg(feature_key, jsonb_build_object('allowed', allowed, 'limits', COALESCE(limits, '{}'::jsonb)) ORDER BY feature_key) AS entitlements
- FROM public.v_tenant_entitlements_full
- GROUP BY tenant_id;
-
-
-ALTER VIEW public.v_tenant_entitlements_json OWNER TO supabase_admin;
-
---
--- Name: v_tenant_feature_exceptions; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_feature_exceptions AS
- SELECT tf.tenant_id,
- a.plan_key,
- tf.feature_key,
- 'commercial_exception'::text AS exception_type
- FROM ((public.tenant_features tf
- JOIN public.v_tenant_active_subscription a ON ((a.tenant_id = tf.tenant_id)))
- LEFT JOIN public.v_tenant_entitlements_full v ON (((v.tenant_id = tf.tenant_id) AND (v.feature_key = tf.feature_key))))
- WHERE ((tf.enabled = true) AND (COALESCE(v.allowed, false) = false));
-
-
-ALTER VIEW public.v_tenant_feature_exceptions OWNER TO supabase_admin;
-
---
--- Name: v_tenant_feature_mismatch; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_feature_mismatch AS
- WITH plan_allowed AS (
- SELECT v.tenant_id,
- v.feature_key,
- v.allowed
- FROM public.v_tenant_entitlements_full v
- ), overrides AS (
- SELECT tf.tenant_id,
- tf.feature_key,
- tf.enabled
- FROM public.tenant_features tf
- )
- SELECT o.tenant_id,
- o.feature_key,
- CASE
- WHEN ((o.enabled = true) AND (COALESCE(p.allowed, false) = false)) THEN 'unexpected_override'::text
- ELSE NULL::text
- END AS mismatch_type
- FROM (overrides o
- LEFT JOIN plan_allowed p ON (((p.tenant_id = o.tenant_id) AND (p.feature_key = o.feature_key))))
- WHERE ((o.enabled = true) AND (COALESCE(p.allowed, false) = false));
-
-
-ALTER VIEW public.v_tenant_feature_mismatch OWNER TO supabase_admin;
-
---
--- Name: v_tenant_members_with_profiles; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_members_with_profiles AS
- SELECT tm.id AS tenant_member_id,
- tm.tenant_id,
- tm.user_id,
- tm.role,
- tm.status,
- tm.created_at,
- p.full_name,
- au.email
- FROM ((public.tenant_members tm
- LEFT JOIN public.profiles p ON ((p.id = tm.user_id)))
- LEFT JOIN auth.users au ON ((au.id = tm.user_id)));
-
-
-ALTER VIEW public.v_tenant_members_with_profiles OWNER TO supabase_admin;
-
---
--- Name: v_tenant_people; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_people AS
- SELECT 'member'::text AS type,
- m.tenant_id,
- m.user_id,
- u.email,
- m.role,
- m.status,
- NULL::uuid AS invite_token,
- NULL::timestamp with time zone AS expires_at
- FROM (public.tenant_members m
- JOIN auth.users u ON ((u.id = m.user_id)))
-UNION ALL
- SELECT 'invite'::text AS type,
- i.tenant_id,
- NULL::uuid AS user_id,
- i.email,
- i.role,
- 'invited'::text AS status,
- i.token AS invite_token,
- i.expires_at
- FROM public.tenant_invites i
- WHERE ((i.accepted_at IS NULL) AND (i.revoked_at IS NULL));
-
-
-ALTER VIEW public.v_tenant_people OWNER TO supabase_admin;
-
---
--- Name: v_tenant_staff; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_staff AS
- SELECT ('m_'::text || (tm.id)::text) AS row_id,
- tm.tenant_id,
- tm.user_id,
- tm.role,
- tm.status,
- tm.created_at,
- p.full_name,
- au.email,
- NULL::uuid AS invite_token
- FROM ((public.tenant_members tm
- LEFT JOIN public.profiles p ON ((p.id = tm.user_id)))
- LEFT JOIN auth.users au ON ((au.id = tm.user_id)))
-UNION ALL
- SELECT ('i_'::text || (ti.id)::text) AS row_id,
- ti.tenant_id,
- NULL::uuid AS user_id,
- ti.role,
- 'invited'::text AS status,
- ti.created_at,
- NULL::text AS full_name,
- ti.email,
- ti.token AS invite_token
- FROM public.tenant_invites ti
- WHERE ((ti.accepted_at IS NULL) AND (ti.revoked_at IS NULL) AND (ti.expires_at > now()));
-
-
-ALTER VIEW public.v_tenant_staff OWNER TO supabase_admin;
-
---
--- Name: v_user_active_subscription; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_user_active_subscription AS
- SELECT DISTINCT ON (user_id) user_id,
- plan_id,
- plan_key,
- "interval",
- status,
- current_period_start,
- current_period_end,
- created_at
- FROM public.subscriptions s
- WHERE ((tenant_id IS NULL) AND (user_id IS NOT NULL) AND (status = 'active'::text) AND ((current_period_end IS NULL) OR (current_period_end > now())))
- ORDER BY user_id, created_at DESC;
-
-
-ALTER VIEW public.v_user_active_subscription OWNER TO supabase_admin;
-
---
--- Name: v_user_entitlements; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_user_entitlements AS
- SELECT a.user_id,
- f.key AS feature_key,
- true AS allowed
- FROM ((public.v_user_active_subscription a
- JOIN public.plan_features pf ON (((pf.plan_id = a.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)));
-
-
-ALTER VIEW public.v_user_entitlements OWNER TO supabase_admin;
-
---
--- Name: messages; Type: TABLE; Schema: realtime; Owner: supabase_realtime_admin
---
-
-CREATE TABLE realtime.messages (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-)
-PARTITION BY RANGE (inserted_at);
-
-
-ALTER TABLE realtime.messages OWNER TO supabase_realtime_admin;
-
---
--- Name: messages_2026_03_11; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_11 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_11 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_12; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_12 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_12 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_13; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_13 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_13 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_14; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_14 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_14 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_15; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_15 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_15 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_16; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_16 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_16 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_17; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_17 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_17 OWNER TO supabase_admin;
-
---
--- Name: schema_migrations; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.schema_migrations (
- version bigint NOT NULL,
- inserted_at timestamp(0) without time zone
-);
-
-
-ALTER TABLE realtime.schema_migrations OWNER TO supabase_admin;
-
---
--- Name: subscription; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.subscription (
- id bigint NOT NULL,
- subscription_id uuid NOT NULL,
- entity regclass NOT NULL,
- filters realtime.user_defined_filter[] DEFAULT '{}'::realtime.user_defined_filter[] NOT NULL,
- claims jsonb NOT NULL,
- claims_role regrole GENERATED ALWAYS AS (realtime.to_regrole((claims ->> 'role'::text))) STORED NOT NULL,
- created_at timestamp without time zone DEFAULT timezone('utc'::text, now()) NOT NULL
-);
-
-
-ALTER TABLE realtime.subscription OWNER TO supabase_admin;
-
---
--- Name: subscription_id_seq; Type: SEQUENCE; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE realtime.subscription ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY (
- SEQUENCE NAME realtime.subscription_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: buckets; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.buckets (
- id text NOT NULL,
- name text NOT NULL,
- owner uuid,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now(),
- public boolean DEFAULT false,
- avif_autodetection boolean DEFAULT false,
- file_size_limit bigint,
- allowed_mime_types text[],
- owner_id text,
- type storage.buckettype DEFAULT 'STANDARD'::storage.buckettype NOT NULL
-);
-
-
-ALTER TABLE storage.buckets OWNER TO supabase_storage_admin;
-
---
--- Name: COLUMN buckets.owner; Type: COMMENT; Schema: storage; Owner: supabase_storage_admin
---
-
-COMMENT ON COLUMN storage.buckets.owner IS 'Field is deprecated, use owner_id instead';
-
-
---
--- Name: buckets_analytics; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.buckets_analytics (
- name text NOT NULL,
- type storage.buckettype DEFAULT 'ANALYTICS'::storage.buckettype NOT NULL,
- format text DEFAULT 'ICEBERG'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- deleted_at timestamp with time zone
-);
-
-
-ALTER TABLE storage.buckets_analytics OWNER TO supabase_storage_admin;
-
---
--- Name: buckets_vectors; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.buckets_vectors (
- id text NOT NULL,
- type storage.buckettype DEFAULT 'VECTOR'::storage.buckettype NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE storage.buckets_vectors OWNER TO supabase_storage_admin;
-
---
--- Name: iceberg_namespaces; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.iceberg_namespaces (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- bucket_name text NOT NULL,
- name text NOT NULL COLLATE pg_catalog."C",
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- metadata jsonb DEFAULT '{}'::jsonb NOT NULL,
- catalog_id uuid NOT NULL
-);
-
-
-ALTER TABLE storage.iceberg_namespaces OWNER TO supabase_storage_admin;
-
---
--- Name: iceberg_tables; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.iceberg_tables (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- namespace_id uuid NOT NULL,
- bucket_name text NOT NULL,
- name text NOT NULL COLLATE pg_catalog."C",
- location text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- remote_table_id text,
- shard_key text,
- shard_id text,
- catalog_id uuid NOT NULL
-);
-
-
-ALTER TABLE storage.iceberg_tables OWNER TO supabase_storage_admin;
-
---
--- Name: migrations; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.migrations (
- id integer NOT NULL,
- name character varying(100) NOT NULL,
- hash character varying(40) NOT NULL,
- executed_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP
-);
-
-
-ALTER TABLE storage.migrations OWNER TO supabase_storage_admin;
-
---
--- Name: objects; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.objects (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- bucket_id text,
- name text,
- owner uuid,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now(),
- last_accessed_at timestamp with time zone DEFAULT now(),
- metadata jsonb,
- path_tokens text[] GENERATED ALWAYS AS (string_to_array(name, '/'::text)) STORED,
- version text,
- owner_id text,
- user_metadata jsonb
-);
-
-
-ALTER TABLE storage.objects OWNER TO supabase_storage_admin;
-
---
--- Name: COLUMN objects.owner; Type: COMMENT; Schema: storage; Owner: supabase_storage_admin
---
-
-COMMENT ON COLUMN storage.objects.owner IS 'Field is deprecated, use owner_id instead';
-
-
---
--- Name: s3_multipart_uploads; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.s3_multipart_uploads (
- id text NOT NULL,
- in_progress_size bigint DEFAULT 0 NOT NULL,
- upload_signature text NOT NULL,
- bucket_id text NOT NULL,
- key text NOT NULL COLLATE pg_catalog."C",
- version text NOT NULL,
- owner_id text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- user_metadata jsonb
-);
-
-
-ALTER TABLE storage.s3_multipart_uploads OWNER TO supabase_storage_admin;
-
---
--- Name: s3_multipart_uploads_parts; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.s3_multipart_uploads_parts (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- upload_id text NOT NULL,
- size bigint DEFAULT 0 NOT NULL,
- part_number integer NOT NULL,
- bucket_id text NOT NULL,
- key text NOT NULL COLLATE pg_catalog."C",
- etag text NOT NULL,
- owner_id text,
- version text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE storage.s3_multipart_uploads_parts OWNER TO supabase_storage_admin;
-
---
--- Name: vector_indexes; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.vector_indexes (
- id text DEFAULT gen_random_uuid() NOT NULL,
- name text NOT NULL COLLATE pg_catalog."C",
- bucket_id text NOT NULL,
- data_type text NOT NULL,
- dimension integer NOT NULL,
- distance_metric text NOT NULL,
- metadata_configuration jsonb,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE storage.vector_indexes OWNER TO supabase_storage_admin;
-
---
--- Name: hooks; Type: TABLE; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE TABLE supabase_functions.hooks (
- id bigint NOT NULL,
- hook_table_id integer NOT NULL,
- hook_name text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- request_id bigint
-);
-
-
-ALTER TABLE supabase_functions.hooks OWNER TO supabase_functions_admin;
-
---
--- Name: TABLE hooks; Type: COMMENT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-COMMENT ON TABLE supabase_functions.hooks IS 'Supabase Functions Hooks: Audit trail for triggered hooks.';
-
-
---
--- Name: hooks_id_seq; Type: SEQUENCE; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE SEQUENCE supabase_functions.hooks_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER SEQUENCE supabase_functions.hooks_id_seq OWNER TO supabase_functions_admin;
-
---
--- Name: hooks_id_seq; Type: SEQUENCE OWNED BY; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER SEQUENCE supabase_functions.hooks_id_seq OWNED BY supabase_functions.hooks.id;
-
-
---
--- Name: migrations; Type: TABLE; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE TABLE supabase_functions.migrations (
- version text NOT NULL,
- inserted_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE supabase_functions.migrations OWNER TO supabase_functions_admin;
-
---
--- Name: messages_2026_03_11; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_11 FOR VALUES FROM ('2026-03-11 00:00:00') TO ('2026-03-12 00:00:00');
-
-
---
--- Name: messages_2026_03_12; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_12 FOR VALUES FROM ('2026-03-12 00:00:00') TO ('2026-03-13 00:00:00');
-
-
---
--- Name: messages_2026_03_13; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_13 FOR VALUES FROM ('2026-03-13 00:00:00') TO ('2026-03-14 00:00:00');
-
-
---
--- Name: messages_2026_03_14; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_14 FOR VALUES FROM ('2026-03-14 00:00:00') TO ('2026-03-15 00:00:00');
-
-
---
--- Name: messages_2026_03_15; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_15 FOR VALUES FROM ('2026-03-15 00:00:00') TO ('2026-03-16 00:00:00');
-
-
---
--- Name: messages_2026_03_16; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_16 FOR VALUES FROM ('2026-03-16 00:00:00') TO ('2026-03-17 00:00:00');
-
-
---
--- Name: messages_2026_03_17; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_17 FOR VALUES FROM ('2026-03-17 00:00:00') TO ('2026-03-18 00:00:00');
-
-
---
--- Name: refresh_tokens id; Type: DEFAULT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens ALTER COLUMN id SET DEFAULT nextval('auth.refresh_tokens_id_seq'::regclass);
-
-
---
--- Name: agenda_online_slots id; Type: DEFAULT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots ALTER COLUMN id SET DEFAULT nextval('public.agenda_online_slots_id_seq'::regclass);
-
-
---
--- Name: hooks id; Type: DEFAULT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER TABLE ONLY supabase_functions.hooks ALTER COLUMN id SET DEFAULT nextval('supabase_functions.hooks_id_seq'::regclass);
-
-
---
--- Name: extensions extensions_pkey; Type: CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.extensions
- ADD CONSTRAINT extensions_pkey PRIMARY KEY (id);
-
-
---
--- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.schema_migrations
- ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: tenants tenants_pkey; Type: CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.tenants
- ADD CONSTRAINT tenants_pkey PRIMARY KEY (id);
-
-
---
--- Name: mfa_amr_claims amr_id_pk; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_amr_claims
- ADD CONSTRAINT amr_id_pk PRIMARY KEY (id);
-
-
---
--- Name: audit_log_entries audit_log_entries_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.audit_log_entries
- ADD CONSTRAINT audit_log_entries_pkey PRIMARY KEY (id);
-
-
---
--- Name: flow_state flow_state_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.flow_state
- ADD CONSTRAINT flow_state_pkey PRIMARY KEY (id);
-
-
---
--- Name: identities identities_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.identities
- ADD CONSTRAINT identities_pkey PRIMARY KEY (id);
-
-
---
--- Name: identities identities_provider_id_provider_unique; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.identities
- ADD CONSTRAINT identities_provider_id_provider_unique UNIQUE (provider_id, provider);
-
-
---
--- Name: instances instances_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.instances
- ADD CONSTRAINT instances_pkey PRIMARY KEY (id);
-
-
---
--- Name: mfa_amr_claims mfa_amr_claims_session_id_authentication_method_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_amr_claims
- ADD CONSTRAINT mfa_amr_claims_session_id_authentication_method_pkey UNIQUE (session_id, authentication_method);
-
-
---
--- Name: mfa_challenges mfa_challenges_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_challenges
- ADD CONSTRAINT mfa_challenges_pkey PRIMARY KEY (id);
-
-
---
--- Name: mfa_factors mfa_factors_last_challenged_at_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_factors
- ADD CONSTRAINT mfa_factors_last_challenged_at_key UNIQUE (last_challenged_at);
-
-
---
--- Name: mfa_factors mfa_factors_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_factors
- ADD CONSTRAINT mfa_factors_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_authorizations oauth_authorizations_authorization_code_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_authorization_code_key UNIQUE (authorization_code);
-
-
---
--- Name: oauth_authorizations oauth_authorizations_authorization_id_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_authorization_id_key UNIQUE (authorization_id);
-
-
---
--- Name: oauth_authorizations oauth_authorizations_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_client_states oauth_client_states_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_client_states
- ADD CONSTRAINT oauth_client_states_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_clients oauth_clients_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_clients
- ADD CONSTRAINT oauth_clients_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_consents oauth_consents_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_consents oauth_consents_user_client_unique; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_user_client_unique UNIQUE (user_id, client_id);
-
-
---
--- Name: one_time_tokens one_time_tokens_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.one_time_tokens
- ADD CONSTRAINT one_time_tokens_pkey PRIMARY KEY (id);
-
-
---
--- Name: refresh_tokens refresh_tokens_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens
- ADD CONSTRAINT refresh_tokens_pkey PRIMARY KEY (id);
-
-
---
--- Name: refresh_tokens refresh_tokens_token_unique; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens
- ADD CONSTRAINT refresh_tokens_token_unique UNIQUE (token);
-
-
---
--- Name: saml_providers saml_providers_entity_id_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_providers
- ADD CONSTRAINT saml_providers_entity_id_key UNIQUE (entity_id);
-
-
---
--- Name: saml_providers saml_providers_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_providers
- ADD CONSTRAINT saml_providers_pkey PRIMARY KEY (id);
-
-
---
--- Name: saml_relay_states saml_relay_states_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_relay_states
- ADD CONSTRAINT saml_relay_states_pkey PRIMARY KEY (id);
-
-
---
--- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.schema_migrations
- ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: sessions sessions_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sessions
- ADD CONSTRAINT sessions_pkey PRIMARY KEY (id);
-
-
---
--- Name: sso_domains sso_domains_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sso_domains
- ADD CONSTRAINT sso_domains_pkey PRIMARY KEY (id);
-
-
---
--- Name: sso_providers sso_providers_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sso_providers
- ADD CONSTRAINT sso_providers_pkey PRIMARY KEY (id);
-
-
---
--- Name: users users_phone_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.users
- ADD CONSTRAINT users_phone_key UNIQUE (phone);
-
-
---
--- Name: users users_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.users
- ADD CONSTRAINT users_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_bloqueios
- ADD CONSTRAINT agenda_bloqueios_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_configuracoes
- ADD CONSTRAINT agenda_configuracoes_pkey PRIMARY KEY (owner_id);
-
-
---
--- Name: agenda_eventos agenda_eventos_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_eventos agenda_eventos_sem_sobreposicao; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_sem_sobreposicao EXCLUDE USING gist (owner_id WITH =, tstzrange(inicio_em, fim_em, '[)'::text) WITH &&);
-
-
---
--- Name: agenda_excecoes agenda_excecoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_excecoes
- ADD CONSTRAINT agenda_excecoes_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_online_slots agenda_online_slots_owner_id_weekday_time_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_owner_id_weekday_time_key UNIQUE (owner_id, weekday, "time");
-
-
---
--- Name: agenda_online_slots agenda_online_slots_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_regras_semanais
- ADD CONSTRAINT agenda_regras_semanais_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_unique; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_regras_semanais
- ADD CONSTRAINT agenda_regras_semanais_unique UNIQUE (owner_id, dia_semana, hora_inicio, hora_fim, modalidade);
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_seman_owner_id_dia_semana_hora_inic_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_bloqueados_semanais
- ADD CONSTRAINT agenda_slots_bloqueados_seman_owner_id_dia_semana_hora_inic_key UNIQUE (owner_id, dia_semana, hora_inicio);
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_bloqueados_semanais
- ADD CONSTRAINT agenda_slots_bloqueados_semanais_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_owner_id_dia_semana_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_regras
- ADD CONSTRAINT agenda_slots_regras_owner_id_dia_semana_key UNIQUE (owner_id, dia_semana);
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_regras
- ADD CONSTRAINT agenda_slots_regras_pkey PRIMARY KEY (id);
-
-
---
--- Name: agendador_configuracoes agendador_configuracoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_configuracoes
- ADD CONSTRAINT agendador_configuracoes_pkey PRIMARY KEY (owner_id);
-
-
---
--- Name: agendador_solicitacoes agendador_solicitacoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_solicitacoes
- ADD CONSTRAINT agendador_solicitacoes_pkey PRIMARY KEY (id);
-
-
---
--- Name: billing_contracts billing_contracts_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.billing_contracts
- ADD CONSTRAINT billing_contracts_pkey PRIMARY KEY (id);
-
-
---
--- Name: commitment_services commitment_services_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_services
- ADD CONSTRAINT commitment_services_pkey PRIMARY KEY (id);
-
-
---
--- Name: commitment_time_logs commitment_time_logs_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_pkey PRIMARY KEY (id);
-
-
---
--- Name: determined_commitment_fields determined_commitment_fields_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitment_fields
- ADD CONSTRAINT determined_commitment_fields_pkey PRIMARY KEY (id);
-
-
---
--- Name: determined_commitments determined_commitments_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitments
- ADD CONSTRAINT determined_commitments_pkey PRIMARY KEY (id);
-
-
---
--- Name: determined_commitments determined_commitments_tenant_native_key_uq; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitments
- ADD CONSTRAINT determined_commitments_tenant_native_key_uq UNIQUE (tenant_id, native_key);
-
-
---
--- Name: dev_user_credentials dev_user_credentials_email_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.dev_user_credentials
- ADD CONSTRAINT dev_user_credentials_email_key UNIQUE (email);
-
-
---
--- Name: dev_user_credentials dev_user_credentials_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.dev_user_credentials
- ADD CONSTRAINT dev_user_credentials_pkey PRIMARY KEY (id);
-
-
---
--- Name: entitlements_invalidation entitlements_invalidation_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.entitlements_invalidation
- ADD CONSTRAINT entitlements_invalidation_pkey PRIMARY KEY (owner_id);
-
-
---
--- Name: features features_key_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.features
- ADD CONSTRAINT features_key_key UNIQUE (key);
-
-
---
--- Name: features features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.features
- ADD CONSTRAINT features_pkey PRIMARY KEY (id);
-
-
---
--- Name: feriados feriados_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_pkey PRIMARY KEY (id);
-
-
---
--- Name: feriados feriados_tenant_id_data_nome_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_tenant_id_data_nome_key UNIQUE (tenant_id, data, nome);
-
-
---
--- Name: financial_exceptions financial_exceptions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.financial_exceptions
- ADD CONSTRAINT financial_exceptions_pkey PRIMARY KEY (id);
-
-
---
--- Name: insurance_plan_services insurance_plan_services_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.insurance_plan_services
- ADD CONSTRAINT insurance_plan_services_pkey PRIMARY KEY (id);
-
-
---
--- Name: insurance_plans insurance_plans_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.insurance_plans
- ADD CONSTRAINT insurance_plans_pkey PRIMARY KEY (id);
-
-
---
--- Name: module_features module_features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.module_features
- ADD CONSTRAINT module_features_pkey PRIMARY KEY (module_id, feature_id);
-
-
---
--- Name: modules modules_key_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.modules
- ADD CONSTRAINT modules_key_key UNIQUE (key);
-
-
---
--- Name: modules modules_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.modules
- ADD CONSTRAINT modules_pkey PRIMARY KEY (id);
-
-
---
--- Name: owner_users owner_users_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.owner_users
- ADD CONSTRAINT owner_users_pkey PRIMARY KEY (owner_id, user_id);
-
-
---
--- Name: patient_discounts patient_discounts_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_discounts
- ADD CONSTRAINT patient_discounts_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_group_patient patient_group_patient_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_group_patient
- ADD CONSTRAINT patient_group_patient_pkey PRIMARY KEY (patient_group_id, patient_id);
-
-
---
--- Name: patient_groups patient_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_groups
- ADD CONSTRAINT patient_groups_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_intake_requests patient_intake_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_intake_requests
- ADD CONSTRAINT patient_intake_requests_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_invites patient_invites_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_invites
- ADD CONSTRAINT patient_invites_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_invites patient_invites_token_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_invites
- ADD CONSTRAINT patient_invites_token_key UNIQUE (token);
-
-
---
--- Name: patient_patient_tag patient_patient_tag_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT patient_patient_tag_pkey PRIMARY KEY (patient_id, tag_id);
-
-
---
--- Name: patient_tags patient_tags_owner_name_uniq; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_tags
- ADD CONSTRAINT patient_tags_owner_name_uniq UNIQUE (owner_id, nome);
-
-
---
--- Name: patient_tags patient_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_tags
- ADD CONSTRAINT patient_tags_pkey PRIMARY KEY (id);
-
-
---
--- Name: patients patients_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_pkey PRIMARY KEY (id);
-
-
---
--- Name: payment_settings payment_settings_owner_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_owner_id_key UNIQUE (owner_id);
-
-
---
--- Name: payment_settings payment_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_pkey PRIMARY KEY (id);
-
-
---
--- Name: plan_features plan_features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_features
- ADD CONSTRAINT plan_features_pkey PRIMARY KEY (plan_id, feature_id);
-
-
---
--- Name: plan_prices plan_prices_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_prices
- ADD CONSTRAINT plan_prices_pkey PRIMARY KEY (id);
-
-
---
--- Name: plan_public_bullets plan_public_bullets_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public_bullets
- ADD CONSTRAINT plan_public_bullets_pkey PRIMARY KEY (id);
-
-
---
--- Name: plan_public plan_public_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public
- ADD CONSTRAINT plan_public_pkey PRIMARY KEY (plan_id);
-
-
---
--- Name: plans plans_key_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plans
- ADD CONSTRAINT plans_key_key UNIQUE (key);
-
-
---
--- Name: plans plans_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plans
- ADD CONSTRAINT plans_pkey PRIMARY KEY (id);
-
-
---
--- Name: professional_pricing professional_pricing_owner_commitment_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.professional_pricing
- ADD CONSTRAINT professional_pricing_owner_commitment_key UNIQUE (owner_id, determined_commitment_id);
-
-
---
--- Name: professional_pricing professional_pricing_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.professional_pricing
- ADD CONSTRAINT professional_pricing_pkey PRIMARY KEY (id);
-
-
---
--- Name: profiles profiles_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.profiles
- ADD CONSTRAINT profiles_pkey PRIMARY KEY (id);
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_pkey PRIMARY KEY (id);
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_unique; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_unique UNIQUE (recurrence_id, original_date);
-
-
---
--- Name: recurrence_rule_services recurrence_rule_services_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rule_services
- ADD CONSTRAINT recurrence_rule_services_pkey PRIMARY KEY (id);
-
-
---
--- Name: recurrence_rules recurrence_rules_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rules
- ADD CONSTRAINT recurrence_rules_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_admins saas_admins_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_admins
- ADD CONSTRAINT saas_admins_pkey PRIMARY KEY (user_id);
-
-
---
--- Name: saas_doc_votos saas_doc_votos_doc_id_user_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_doc_id_user_id_key UNIQUE (doc_id, user_id);
-
-
---
--- Name: saas_doc_votos saas_doc_votos_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_docs saas_docs_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_docs
- ADD CONSTRAINT saas_docs_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_faq_itens saas_faq_itens_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_faq_itens
- ADD CONSTRAINT saas_faq_itens_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_faq saas_faq_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_faq
- ADD CONSTRAINT saas_faq_pkey PRIMARY KEY (id);
-
-
---
--- Name: services services_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.services
- ADD CONSTRAINT services_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_events subscription_events_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_events
- ADD CONSTRAINT subscription_events_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_intents_personal subscription_intents_personal_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_personal
- ADD CONSTRAINT subscription_intents_personal_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_intents_legacy subscription_intents_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_legacy
- ADD CONSTRAINT subscription_intents_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_intents_tenant subscription_intents_tenant_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_tenant
- ADD CONSTRAINT subscription_intents_tenant_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscriptions subscriptions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscriptions
- ADD CONSTRAINT subscriptions_pkey PRIMARY KEY (id);
-
-
---
--- Name: support_sessions support_sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_pkey PRIMARY KEY (id);
-
-
---
--- Name: support_sessions support_sessions_token_unique; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_token_unique UNIQUE (token);
-
-
---
--- Name: tenant_feature_exceptions_log tenant_feature_exceptions_log_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_feature_exceptions_log
- ADD CONSTRAINT tenant_feature_exceptions_log_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenant_features tenant_features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_features
- ADD CONSTRAINT tenant_features_pkey PRIMARY KEY (tenant_id, feature_key);
-
-
---
--- Name: tenant_invites tenant_invites_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenant_members tenant_members_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenant_members tenant_members_tenant_id_user_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_tenant_id_user_id_key UNIQUE (tenant_id, user_id);
-
-
---
--- Name: tenant_modules tenant_modules_owner_id_module_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_owner_id_module_id_key UNIQUE (owner_id, module_id);
-
-
---
--- Name: tenant_modules tenant_modules_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenants tenants_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenants
- ADD CONSTRAINT tenants_pkey PRIMARY KEY (id);
-
-
---
--- Name: user_settings user_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.user_settings
- ADD CONSTRAINT user_settings_pkey PRIMARY KEY (user_id);
-
-
---
--- Name: messages messages_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER TABLE ONLY realtime.messages
- ADD CONSTRAINT messages_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_11 messages_2026_03_11_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_11
- ADD CONSTRAINT messages_2026_03_11_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_12 messages_2026_03_12_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_12
- ADD CONSTRAINT messages_2026_03_12_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_13 messages_2026_03_13_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_13
- ADD CONSTRAINT messages_2026_03_13_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_14 messages_2026_03_14_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_14
- ADD CONSTRAINT messages_2026_03_14_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_15 messages_2026_03_15_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_15
- ADD CONSTRAINT messages_2026_03_15_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_16 messages_2026_03_16_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_16
- ADD CONSTRAINT messages_2026_03_16_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_17 messages_2026_03_17_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_17
- ADD CONSTRAINT messages_2026_03_17_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: subscription pk_subscription; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.subscription
- ADD CONSTRAINT pk_subscription PRIMARY KEY (id);
-
-
---
--- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.schema_migrations
- ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: buckets_analytics buckets_analytics_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.buckets_analytics
- ADD CONSTRAINT buckets_analytics_pkey PRIMARY KEY (id);
-
-
---
--- Name: buckets buckets_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.buckets
- ADD CONSTRAINT buckets_pkey PRIMARY KEY (id);
-
-
---
--- Name: buckets_vectors buckets_vectors_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.buckets_vectors
- ADD CONSTRAINT buckets_vectors_pkey PRIMARY KEY (id);
-
-
---
--- Name: iceberg_namespaces iceberg_namespaces_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_namespaces
- ADD CONSTRAINT iceberg_namespaces_pkey PRIMARY KEY (id);
-
-
---
--- Name: iceberg_tables iceberg_tables_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_tables
- ADD CONSTRAINT iceberg_tables_pkey PRIMARY KEY (id);
-
-
---
--- Name: migrations migrations_name_key; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.migrations
- ADD CONSTRAINT migrations_name_key UNIQUE (name);
-
-
---
--- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.migrations
- ADD CONSTRAINT migrations_pkey PRIMARY KEY (id);
-
-
---
--- Name: objects objects_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.objects
- ADD CONSTRAINT objects_pkey PRIMARY KEY (id);
-
-
---
--- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads_parts
- ADD CONSTRAINT s3_multipart_uploads_parts_pkey PRIMARY KEY (id);
-
-
---
--- Name: s3_multipart_uploads s3_multipart_uploads_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads
- ADD CONSTRAINT s3_multipart_uploads_pkey PRIMARY KEY (id);
-
-
---
--- Name: vector_indexes vector_indexes_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.vector_indexes
- ADD CONSTRAINT vector_indexes_pkey PRIMARY KEY (id);
-
-
---
--- Name: hooks hooks_pkey; Type: CONSTRAINT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER TABLE ONLY supabase_functions.hooks
- ADD CONSTRAINT hooks_pkey PRIMARY KEY (id);
-
-
---
--- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER TABLE ONLY supabase_functions.migrations
- ADD CONSTRAINT migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: extensions_tenant_external_id_index; Type: INDEX; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE INDEX extensions_tenant_external_id_index ON _realtime.extensions USING btree (tenant_external_id);
-
-
---
--- Name: extensions_tenant_external_id_type_index; Type: INDEX; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX extensions_tenant_external_id_type_index ON _realtime.extensions USING btree (tenant_external_id, type);
-
-
---
--- Name: tenants_external_id_index; Type: INDEX; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX tenants_external_id_index ON _realtime.tenants USING btree (external_id);
-
-
---
--- Name: audit_logs_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX audit_logs_instance_id_idx ON auth.audit_log_entries USING btree (instance_id);
-
-
---
--- Name: confirmation_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX confirmation_token_idx ON auth.users USING btree (confirmation_token) WHERE ((confirmation_token)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: email_change_token_current_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX email_change_token_current_idx ON auth.users USING btree (email_change_token_current) WHERE ((email_change_token_current)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: email_change_token_new_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX email_change_token_new_idx ON auth.users USING btree (email_change_token_new) WHERE ((email_change_token_new)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: factor_id_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX factor_id_created_at_idx ON auth.mfa_factors USING btree (user_id, created_at);
-
-
---
--- Name: flow_state_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX flow_state_created_at_idx ON auth.flow_state USING btree (created_at DESC);
-
-
---
--- Name: identities_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX identities_email_idx ON auth.identities USING btree (email text_pattern_ops);
-
-
---
--- Name: INDEX identities_email_idx; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON INDEX auth.identities_email_idx IS 'Auth: Ensures indexed queries on the email column';
-
-
---
--- Name: identities_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX identities_user_id_idx ON auth.identities USING btree (user_id);
-
-
---
--- Name: idx_auth_code; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX idx_auth_code ON auth.flow_state USING btree (auth_code);
-
-
---
--- Name: idx_oauth_client_states_created_at; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX idx_oauth_client_states_created_at ON auth.oauth_client_states USING btree (created_at);
-
-
---
--- Name: idx_user_id_auth_method; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX idx_user_id_auth_method ON auth.flow_state USING btree (user_id, authentication_method);
-
-
---
--- Name: mfa_challenge_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX mfa_challenge_created_at_idx ON auth.mfa_challenges USING btree (created_at DESC);
-
-
---
--- Name: mfa_factors_user_friendly_name_unique; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX mfa_factors_user_friendly_name_unique ON auth.mfa_factors USING btree (friendly_name, user_id) WHERE (TRIM(BOTH FROM friendly_name) <> ''::text);
-
-
---
--- Name: mfa_factors_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX mfa_factors_user_id_idx ON auth.mfa_factors USING btree (user_id);
-
-
---
--- Name: oauth_auth_pending_exp_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_auth_pending_exp_idx ON auth.oauth_authorizations USING btree (expires_at) WHERE (status = 'pending'::auth.oauth_authorization_status);
-
-
---
--- Name: oauth_clients_deleted_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_clients_deleted_at_idx ON auth.oauth_clients USING btree (deleted_at);
-
-
---
--- Name: oauth_consents_active_client_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_consents_active_client_idx ON auth.oauth_consents USING btree (client_id) WHERE (revoked_at IS NULL);
-
-
---
--- Name: oauth_consents_active_user_client_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_consents_active_user_client_idx ON auth.oauth_consents USING btree (user_id, client_id) WHERE (revoked_at IS NULL);
-
-
---
--- Name: oauth_consents_user_order_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_consents_user_order_idx ON auth.oauth_consents USING btree (user_id, granted_at DESC);
-
-
---
--- Name: one_time_tokens_relates_to_hash_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX one_time_tokens_relates_to_hash_idx ON auth.one_time_tokens USING hash (relates_to);
-
-
---
--- Name: one_time_tokens_token_hash_hash_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX one_time_tokens_token_hash_hash_idx ON auth.one_time_tokens USING hash (token_hash);
-
-
---
--- Name: one_time_tokens_user_id_token_type_key; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX one_time_tokens_user_id_token_type_key ON auth.one_time_tokens USING btree (user_id, token_type);
-
-
---
--- Name: reauthentication_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX reauthentication_token_idx ON auth.users USING btree (reauthentication_token) WHERE ((reauthentication_token)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: recovery_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX recovery_token_idx ON auth.users USING btree (recovery_token) WHERE ((recovery_token)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: refresh_tokens_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_instance_id_idx ON auth.refresh_tokens USING btree (instance_id);
-
-
---
--- Name: refresh_tokens_instance_id_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_instance_id_user_id_idx ON auth.refresh_tokens USING btree (instance_id, user_id);
-
-
---
--- Name: refresh_tokens_parent_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_parent_idx ON auth.refresh_tokens USING btree (parent);
-
-
---
--- Name: refresh_tokens_session_id_revoked_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_session_id_revoked_idx ON auth.refresh_tokens USING btree (session_id, revoked);
-
-
---
--- Name: refresh_tokens_updated_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_updated_at_idx ON auth.refresh_tokens USING btree (updated_at DESC);
-
-
---
--- Name: saml_providers_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_providers_sso_provider_id_idx ON auth.saml_providers USING btree (sso_provider_id);
-
-
---
--- Name: saml_relay_states_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_relay_states_created_at_idx ON auth.saml_relay_states USING btree (created_at DESC);
-
-
---
--- Name: saml_relay_states_for_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_relay_states_for_email_idx ON auth.saml_relay_states USING btree (for_email);
-
-
---
--- Name: saml_relay_states_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_relay_states_sso_provider_id_idx ON auth.saml_relay_states USING btree (sso_provider_id);
-
-
---
--- Name: sessions_not_after_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sessions_not_after_idx ON auth.sessions USING btree (not_after DESC);
-
-
---
--- Name: sessions_oauth_client_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sessions_oauth_client_id_idx ON auth.sessions USING btree (oauth_client_id);
-
-
---
--- Name: sessions_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sessions_user_id_idx ON auth.sessions USING btree (user_id);
-
-
---
--- Name: sso_domains_domain_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX sso_domains_domain_idx ON auth.sso_domains USING btree (lower(domain));
-
-
---
--- Name: sso_domains_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sso_domains_sso_provider_id_idx ON auth.sso_domains USING btree (sso_provider_id);
-
-
---
--- Name: sso_providers_resource_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX sso_providers_resource_id_idx ON auth.sso_providers USING btree (lower(resource_id));
-
-
---
--- Name: sso_providers_resource_id_pattern_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sso_providers_resource_id_pattern_idx ON auth.sso_providers USING btree (resource_id text_pattern_ops);
-
-
---
--- Name: unique_phone_factor_per_user; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX unique_phone_factor_per_user ON auth.mfa_factors USING btree (user_id, phone);
-
-
---
--- Name: user_id_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX user_id_created_at_idx ON auth.sessions USING btree (user_id, created_at);
-
-
---
--- Name: users_email_partial_key; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX users_email_partial_key ON auth.users USING btree (email) WHERE (is_sso_user = false);
-
-
---
--- Name: INDEX users_email_partial_key; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON INDEX auth.users_email_partial_key IS 'Auth: A partial unique index that applies only when is_sso_user is false';
-
-
---
--- Name: users_instance_id_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX users_instance_id_email_idx ON auth.users USING btree (instance_id, lower((email)::text));
-
-
---
--- Name: users_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX users_instance_id_idx ON auth.users USING btree (instance_id);
-
-
---
--- Name: users_is_anonymous_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX users_is_anonymous_idx ON auth.users USING btree (is_anonymous);
-
-
---
--- Name: agenda_bloqueios_owner_data_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_owner_data_idx ON public.agenda_bloqueios USING btree (owner_id, data_inicio, data_fim);
-
-
---
--- Name: agenda_bloqueios_owner_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_owner_id_idx ON public.agenda_bloqueios USING btree (owner_id);
-
-
---
--- Name: agenda_bloqueios_recorrente_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_recorrente_idx ON public.agenda_bloqueios USING btree (owner_id, dia_semana) WHERE (recorrente = true);
-
-
---
--- Name: agenda_bloqueios_tenant_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_tenant_id_idx ON public.agenda_bloqueios USING btree (tenant_id);
-
-
---
--- Name: agenda_configuracoes_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_configuracoes_tenant_idx ON public.agenda_configuracoes USING btree (tenant_id);
-
-
---
--- Name: agenda_configuracoes_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_configuracoes_tenant_owner_idx ON public.agenda_configuracoes USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_eventos_billing_contract_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_billing_contract_idx ON public.agenda_eventos USING btree (billing_contract_id) WHERE (billing_contract_id IS NOT NULL);
-
-
---
--- Name: agenda_eventos_insurance_plan_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_insurance_plan_idx ON public.agenda_eventos USING btree (insurance_plan_id);
-
-
---
--- Name: agenda_eventos_owner_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_owner_inicio_idx ON public.agenda_eventos USING btree (owner_id, inicio_em);
-
-
---
--- Name: agenda_eventos_owner_terapeuta_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_owner_terapeuta_inicio_idx ON public.agenda_eventos USING btree (owner_id, terapeuta_id, inicio_em);
-
-
---
--- Name: agenda_eventos_recurrence_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_recurrence_idx ON public.agenda_eventos USING btree (recurrence_id) WHERE (recurrence_id IS NOT NULL);
-
-
---
--- Name: agenda_eventos_tenant_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_tenant_inicio_idx ON public.agenda_eventos USING btree (tenant_id, inicio_em);
-
-
---
--- Name: agenda_eventos_tenant_owner_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_tenant_owner_inicio_idx ON public.agenda_eventos USING btree (tenant_id, owner_id, inicio_em);
-
-
---
--- Name: agenda_excecoes_owner_data_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_excecoes_owner_data_idx ON public.agenda_excecoes USING btree (owner_id, data);
-
-
---
--- Name: agenda_excecoes_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_excecoes_tenant_idx ON public.agenda_excecoes USING btree (tenant_id);
-
-
---
--- Name: agenda_excecoes_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_excecoes_tenant_owner_idx ON public.agenda_excecoes USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_online_slots_owner_weekday_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_online_slots_owner_weekday_idx ON public.agenda_online_slots USING btree (owner_id, weekday);
-
-
---
--- Name: agenda_online_slots_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_online_slots_tenant_idx ON public.agenda_online_slots USING btree (tenant_id);
-
-
---
--- Name: agenda_online_slots_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_online_slots_tenant_owner_idx ON public.agenda_online_slots USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_regras_semanais_owner_dia_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_regras_semanais_owner_dia_idx ON public.agenda_regras_semanais USING btree (owner_id, dia_semana);
-
-
---
--- Name: agenda_regras_semanais_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_regras_semanais_tenant_idx ON public.agenda_regras_semanais USING btree (tenant_id);
-
-
---
--- Name: agenda_regras_semanais_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_regras_semanais_tenant_owner_idx ON public.agenda_regras_semanais USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_slots_bloqueados_semanais_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_bloqueados_semanais_tenant_idx ON public.agenda_slots_bloqueados_semanais USING btree (tenant_id);
-
-
---
--- Name: agenda_slots_bloqueados_semanais_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_bloqueados_semanais_tenant_owner_idx ON public.agenda_slots_bloqueados_semanais USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_slots_regras_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_regras_tenant_idx ON public.agenda_slots_regras USING btree (tenant_id);
-
-
---
--- Name: agenda_slots_regras_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_regras_tenant_owner_idx ON public.agenda_slots_regras USING btree (tenant_id, owner_id);
-
-
---
--- Name: agendador_cfg_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_cfg_tenant_idx ON public.agendador_configuracoes USING btree (tenant_id);
-
-
---
--- Name: agendador_sol_data_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_sol_data_idx ON public.agendador_solicitacoes USING btree (data_solicitada, hora_solicitada);
-
-
---
--- Name: agendador_sol_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_sol_owner_idx ON public.agendador_solicitacoes USING btree (owner_id, status);
-
-
---
--- Name: agendador_sol_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_sol_tenant_idx ON public.agendador_solicitacoes USING btree (tenant_id);
-
-
---
--- Name: billing_contracts_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX billing_contracts_owner_idx ON public.billing_contracts USING btree (owner_id);
-
-
---
--- Name: billing_contracts_patient_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX billing_contracts_patient_idx ON public.billing_contracts USING btree (patient_id);
-
-
---
--- Name: billing_contracts_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX billing_contracts_tenant_idx ON public.billing_contracts USING btree (tenant_id);
-
-
---
--- Name: commitment_services_commitment_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_services_commitment_idx ON public.commitment_services USING btree (commitment_id);
-
-
---
--- Name: commitment_services_service_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_services_service_idx ON public.commitment_services USING btree (service_id);
-
-
---
--- Name: commitment_time_logs_calendar_event_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_time_logs_calendar_event_idx ON public.commitment_time_logs USING btree (calendar_event_id);
-
-
---
--- Name: commitment_time_logs_commitment_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_time_logs_commitment_idx ON public.commitment_time_logs USING btree (commitment_id, created_at DESC);
-
-
---
--- Name: commitment_time_logs_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_time_logs_tenant_idx ON public.commitment_time_logs USING btree (tenant_id, created_at DESC);
-
-
---
--- Name: determined_commitment_fields_commitment_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitment_fields_commitment_idx ON public.determined_commitment_fields USING btree (commitment_id, sort_order);
-
-
---
--- Name: determined_commitment_fields_key_uniq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX determined_commitment_fields_key_uniq ON public.determined_commitment_fields USING btree (commitment_id, key);
-
-
---
--- Name: determined_commitment_fields_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitment_fields_tenant_idx ON public.determined_commitment_fields USING btree (tenant_id);
-
-
---
--- Name: determined_commitments_active_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitments_active_idx ON public.determined_commitments USING btree (tenant_id, active);
-
-
---
--- Name: determined_commitments_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitments_tenant_idx ON public.determined_commitments USING btree (tenant_id);
-
-
---
--- Name: determined_commitments_tenant_name_uniq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX determined_commitments_tenant_name_uniq ON public.determined_commitments USING btree (tenant_id, lower(name));
-
-
---
--- Name: feriados_global_unique; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX feriados_global_unique ON public.feriados USING btree (data, nome) WHERE (tenant_id IS NULL);
-
-
---
--- Name: financial_exceptions_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX financial_exceptions_owner_idx ON public.financial_exceptions USING btree (owner_id);
-
-
---
--- Name: financial_exceptions_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX financial_exceptions_tenant_idx ON public.financial_exceptions USING btree (tenant_id);
-
-
---
--- Name: idx_agenda_eventos_determined_commitment_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_agenda_eventos_determined_commitment_id ON public.agenda_eventos USING btree (determined_commitment_id);
-
-
---
--- Name: idx_agenda_excecoes_owner_data; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_agenda_excecoes_owner_data ON public.agenda_excecoes USING btree (owner_id, data);
-
-
---
--- Name: idx_agenda_slots_regras_owner_dia; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_agenda_slots_regras_owner_dia ON public.agenda_slots_regras USING btree (owner_id, dia_semana);
-
-
---
--- Name: idx_intakes_converted_patient_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_converted_patient_id ON public.patient_intake_requests USING btree (converted_patient_id);
-
-
---
--- Name: idx_intakes_owner_cpf; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_owner_cpf ON public.patient_intake_requests USING btree (owner_id, cpf);
-
-
---
--- Name: idx_intakes_owner_created; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_owner_created ON public.patient_intake_requests USING btree (owner_id, created_at DESC);
-
-
---
--- Name: idx_intakes_owner_status_created; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_owner_status_created ON public.patient_intake_requests USING btree (owner_id, status, created_at DESC);
-
-
---
--- Name: idx_intakes_status_created; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_status_created ON public.patient_intake_requests USING btree (status, created_at DESC);
-
-
---
--- Name: idx_patient_group_patient_group_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_group_patient_group_id ON public.patient_group_patient USING btree (patient_group_id);
-
-
---
--- Name: idx_patient_groups_owner; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_groups_owner ON public.patient_groups USING btree (owner_id);
-
-
---
--- Name: idx_patient_groups_owner_system_nome; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_groups_owner_system_nome ON public.patient_groups USING btree (owner_id, is_system, nome);
-
-
---
--- Name: idx_patient_tags_owner; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_tags_owner ON public.patient_tags USING btree (owner_id);
-
-
---
--- Name: idx_patients_created_at; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_created_at ON public.patients USING btree (created_at DESC);
-
-
---
--- Name: idx_patients_last_attended; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_last_attended ON public.patients USING btree (last_attended_at DESC);
-
-
---
--- Name: idx_patients_owner_email_principal; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_owner_email_principal ON public.patients USING btree (owner_id, email_principal);
-
-
---
--- Name: idx_patients_owner_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_owner_id ON public.patients USING btree (owner_id);
-
-
---
--- Name: idx_patients_owner_nome; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_owner_nome ON public.patients USING btree (owner_id, nome_completo);
-
-
---
--- Name: idx_patients_responsible_member; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_responsible_member ON public.patients USING btree (responsible_member_id);
-
-
---
--- Name: idx_patients_status; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_status ON public.patients USING btree (status);
-
-
---
--- Name: idx_patients_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_tenant ON public.patients USING btree (tenant_id);
-
-
---
--- Name: idx_patients_tenant_email_norm; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_tenant_email_norm ON public.patients USING btree (tenant_id, lower(TRIM(BOTH FROM email_principal)));
-
-
---
--- Name: idx_pgp_group; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_pgp_group ON public.patient_group_patient USING btree (patient_group_id);
-
-
---
--- Name: idx_pgp_patient; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_pgp_patient ON public.patient_group_patient USING btree (patient_id);
-
-
---
--- Name: idx_ppt_patient; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_ppt_patient ON public.patient_patient_tag USING btree (patient_id);
-
-
---
--- Name: idx_ppt_tag; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_ppt_tag ON public.patient_patient_tag USING btree (tag_id);
-
-
---
--- Name: idx_slots_bloq_owner_dia; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_slots_bloq_owner_dia ON public.agenda_slots_bloqueados_semanais USING btree (owner_id, dia_semana);
-
-
---
--- Name: idx_subscription_intents_plan_interval; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_subscription_intents_plan_interval ON public.subscription_intents_legacy USING btree (plan_key, "interval");
-
-
---
--- Name: idx_subscription_intents_status; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_subscription_intents_status ON public.subscription_intents_legacy USING btree (status);
-
-
---
--- Name: idx_subscription_intents_user_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_subscription_intents_user_id ON public.subscription_intents_legacy USING btree (user_id);
-
-
---
--- Name: idx_tenant_features_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_tenant_features_tenant ON public.tenant_features USING btree (tenant_id);
-
-
---
--- Name: idx_tenant_invites_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_tenant_invites_tenant ON public.tenant_invites USING btree (tenant_id);
-
-
---
--- Name: idx_tenant_invites_token; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_tenant_invites_token ON public.tenant_invites USING btree (token);
-
-
---
--- Name: insurance_plans_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX insurance_plans_owner_idx ON public.insurance_plans USING btree (owner_id);
-
-
---
--- Name: insurance_plans_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX insurance_plans_tenant_idx ON public.insurance_plans USING btree (tenant_id);
-
-
---
--- Name: ix_plan_prices_plan; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ix_plan_prices_plan ON public.plan_prices USING btree (plan_id);
-
-
---
--- Name: ix_plan_public_bullets_plan; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ix_plan_public_bullets_plan ON public.plan_public_bullets USING btree (plan_id);
-
-
---
--- Name: ix_plan_public_sort; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ix_plan_public_sort ON public.plan_public USING btree (sort_order);
-
-
---
--- Name: patient_discounts_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_discounts_owner_idx ON public.patient_discounts USING btree (owner_id);
-
-
---
--- Name: patient_discounts_patient_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_discounts_patient_idx ON public.patient_discounts USING btree (patient_id);
-
-
---
--- Name: patient_discounts_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_discounts_tenant_idx ON public.patient_discounts USING btree (tenant_id);
-
-
---
--- Name: patient_group_patient_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_group_patient_tenant_idx ON public.patient_group_patient USING btree (tenant_id);
-
-
---
--- Name: patient_groups_owner_nome_uniq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX patient_groups_owner_nome_uniq ON public.patient_groups USING btree (owner_id, nome);
-
-
---
--- Name: patient_groups_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_groups_tenant_idx ON public.patient_groups USING btree (tenant_id);
-
-
---
--- Name: patient_intake_owner_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_owner_id_idx ON public.patient_intake_requests USING btree (owner_id);
-
-
---
--- Name: patient_intake_requests_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_requests_tenant_idx ON public.patient_intake_requests USING btree (tenant_id);
-
-
---
--- Name: patient_intake_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_status_idx ON public.patient_intake_requests USING btree (status);
-
-
---
--- Name: patient_intake_token_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_token_idx ON public.patient_intake_requests USING btree (token);
-
-
---
--- Name: patient_invites_one_active_per_owner; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX patient_invites_one_active_per_owner ON public.patient_invites USING btree (owner_id) WHERE (active = true);
-
-
---
--- Name: patient_invites_owner_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_invites_owner_id_idx ON public.patient_invites USING btree (owner_id);
-
-
---
--- Name: patient_invites_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_invites_tenant_idx ON public.patient_invites USING btree (tenant_id);
-
-
---
--- Name: patient_invites_token_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_invites_token_idx ON public.patient_invites USING btree (token);
-
-
---
--- Name: patient_patient_tag_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_patient_tag_tenant_idx ON public.patient_patient_tag USING btree (tenant_id);
-
-
---
--- Name: patient_tags_owner_name_uq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX patient_tags_owner_name_uq ON public.patient_tags USING btree (owner_id, lower(nome));
-
-
---
--- Name: patient_tags_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_tags_tenant_idx ON public.patient_tags USING btree (tenant_id);
-
-
---
--- Name: payment_settings_tenant_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX payment_settings_tenant_id_idx ON public.payment_settings USING btree (tenant_id);
-
-
---
--- Name: ppt_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ppt_owner_idx ON public.patient_patient_tag USING btree (owner_id);
-
-
---
--- Name: ppt_patient_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ppt_patient_idx ON public.patient_patient_tag USING btree (patient_id);
-
-
---
--- Name: ppt_tag_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ppt_tag_idx ON public.patient_patient_tag USING btree (tag_id);
-
-
---
--- Name: professional_pricing_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX professional_pricing_tenant_idx ON public.professional_pricing USING btree (tenant_id);
-
-
---
--- Name: recurrence_exceptions_rule_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_exceptions_rule_idx ON public.recurrence_exceptions USING btree (recurrence_id);
-
-
---
--- Name: recurrence_exceptions_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_exceptions_tenant_idx ON public.recurrence_exceptions USING btree (tenant_id);
-
-
---
--- Name: recurrence_rule_services_rule_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rule_services_rule_idx ON public.recurrence_rule_services USING btree (rule_id);
-
-
---
--- Name: recurrence_rule_services_service_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rule_services_service_idx ON public.recurrence_rule_services USING btree (service_id);
-
-
---
--- Name: recurrence_rules_active_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_active_idx ON public.recurrence_rules USING btree (owner_id, status) WHERE (status = 'ativo'::text);
-
-
---
--- Name: recurrence_rules_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_owner_idx ON public.recurrence_rules USING btree (owner_id);
-
-
---
--- Name: recurrence_rules_patient_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_patient_idx ON public.recurrence_rules USING btree (patient_id);
-
-
---
--- Name: recurrence_rules_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_tenant_idx ON public.recurrence_rules USING btree (tenant_id);
-
-
---
--- Name: saas_doc_votos_doc_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_doc_votos_doc_id_idx ON public.saas_doc_votos USING btree (doc_id);
-
-
---
--- Name: saas_doc_votos_user_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_doc_votos_user_id_idx ON public.saas_doc_votos USING btree (user_id);
-
-
---
--- Name: saas_docs_categoria_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_docs_categoria_idx ON public.saas_docs USING btree (categoria);
-
-
---
--- Name: saas_docs_exibir_no_faq_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_docs_exibir_no_faq_idx ON public.saas_docs USING btree (exibir_no_faq) WHERE (exibir_no_faq = true);
-
-
---
--- Name: saas_docs_path_ativo_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_docs_path_ativo_idx ON public.saas_docs USING btree (pagina_path, ativo);
-
-
---
--- Name: saas_faq_ativo_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_ativo_idx ON public.saas_faq USING btree (ativo);
-
-
---
--- Name: saas_faq_categoria_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_categoria_idx ON public.saas_faq USING btree (categoria);
-
-
---
--- Name: saas_faq_fts_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_fts_idx ON public.saas_faq USING gin (to_tsvector('portuguese'::regconfig, ((COALESCE(pergunta, ''::text) || ' '::text) || COALESCE(conteudo, ''::text))));
-
-
---
--- Name: saas_faq_itens_ativo_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_itens_ativo_idx ON public.saas_faq_itens USING btree (ativo);
-
-
---
--- Name: saas_faq_itens_doc_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_itens_doc_id_idx ON public.saas_faq_itens USING btree (doc_id);
-
-
---
--- Name: saas_faq_pagina_path_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_pagina_path_idx ON public.saas_faq USING btree (pagina_path);
-
-
---
--- Name: saas_faq_publico_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_publico_idx ON public.saas_faq USING btree (publico);
-
-
---
--- Name: saas_faq_votos_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_votos_idx ON public.saas_faq USING btree (votos DESC);
-
-
---
--- Name: services_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX services_owner_idx ON public.services USING btree (owner_id);
-
-
---
--- Name: services_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX services_tenant_idx ON public.services USING btree (tenant_id);
-
-
---
--- Name: sint_personal_created_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_personal_created_idx ON public.subscription_intents_personal USING btree (created_at DESC);
-
-
---
--- Name: sint_personal_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_personal_status_idx ON public.subscription_intents_personal USING btree (status);
-
-
---
--- Name: sint_tenant_created_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_tenant_created_idx ON public.subscription_intents_tenant USING btree (created_at DESC);
-
-
---
--- Name: sint_tenant_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_tenant_status_idx ON public.subscription_intents_tenant USING btree (status);
-
-
---
--- Name: sint_tenant_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_tenant_tenant_idx ON public.subscription_intents_tenant USING btree (tenant_id);
-
-
---
--- Name: subscription_events_created_at_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_created_at_idx ON public.subscription_events USING btree (created_at DESC);
-
-
---
--- Name: subscription_events_owner_ref_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_owner_ref_idx ON public.subscription_events USING btree (owner_type, owner_ref);
-
-
---
--- Name: subscription_events_sub_created_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_sub_created_idx ON public.subscription_events USING btree (subscription_id, created_at DESC);
-
-
---
--- Name: subscription_events_subscription_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_subscription_id_idx ON public.subscription_events USING btree (subscription_id);
-
-
---
--- Name: subscriptions_one_active_per_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscriptions_one_active_per_tenant ON public.subscriptions USING btree (tenant_id) WHERE (status = 'active'::text);
-
-
---
--- Name: subscriptions_one_active_per_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscriptions_one_active_per_user ON public.subscriptions USING btree (user_id) WHERE (status = 'active'::text);
-
-
---
--- Name: subscriptions_one_active_per_user_personal; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscriptions_one_active_per_user_personal ON public.subscriptions USING btree (user_id) WHERE ((tenant_id IS NULL) AND (status = 'active'::text));
-
-
---
--- Name: subscriptions_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_owner_idx ON public.subscriptions USING btree (user_id);
-
-
---
--- Name: subscriptions_plan_key_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_plan_key_idx ON public.subscriptions USING btree (plan_key);
-
-
---
--- Name: subscriptions_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_status_idx ON public.subscriptions USING btree (status);
-
-
---
--- Name: subscriptions_tenant_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_tenant_id_idx ON public.subscriptions USING btree (tenant_id);
-
-
---
--- Name: subscriptions_tenant_period_end_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_tenant_period_end_idx ON public.subscriptions USING btree (tenant_id, current_period_end);
-
-
---
--- Name: subscriptions_tenant_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_tenant_status_idx ON public.subscriptions USING btree (tenant_id, status);
-
-
---
--- Name: subscriptions_user_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_user_status_idx ON public.subscriptions USING btree (user_id, status, created_at DESC);
-
-
---
--- Name: support_sessions_expires_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX support_sessions_expires_idx ON public.support_sessions USING btree (expires_at);
-
-
---
--- Name: support_sessions_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX support_sessions_tenant_idx ON public.support_sessions USING btree (tenant_id);
-
-
---
--- Name: support_sessions_token_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX support_sessions_token_idx ON public.support_sessions USING btree (token);
-
-
---
--- Name: tenant_members_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX tenant_members_tenant_idx ON public.tenant_members USING btree (tenant_id);
-
-
---
--- Name: tenant_members_user_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX tenant_members_user_idx ON public.tenant_members USING btree (user_id);
-
-
---
--- Name: tenant_modules_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX tenant_modules_owner_idx ON public.tenant_modules USING btree (owner_id);
-
-
---
--- Name: unique_member_per_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX unique_member_per_tenant ON public.tenant_members USING btree (tenant_id, user_id);
-
-
---
--- Name: uq_patients_tenant_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_patients_tenant_user ON public.patients USING btree (tenant_id, user_id) WHERE (user_id IS NOT NULL);
-
-
---
--- Name: uq_plan_price_active; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_plan_price_active ON public.plan_prices USING btree (plan_id, "interval", currency) WHERE ((is_active = true) AND (active_to IS NULL));
-
-
---
--- Name: uq_plan_prices_active; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_plan_prices_active ON public.plan_prices USING btree (plan_id, "interval") WHERE (is_active = true);
-
-
---
--- Name: uq_subscriptions_active_by_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_subscriptions_active_by_tenant ON public.subscriptions USING btree (tenant_id) WHERE ((tenant_id IS NOT NULL) AND (status = 'active'::text));
-
-
---
--- Name: uq_subscriptions_active_personal_by_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_subscriptions_active_personal_by_user ON public.subscriptions USING btree (user_id) WHERE ((tenant_id IS NULL) AND (status = 'active'::text));
-
-
---
--- Name: uq_tenant_invites_pending; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_tenant_invites_pending ON public.tenant_invites USING btree (tenant_id, lower(email), role) WHERE ((accepted_at IS NULL) AND (revoked_at IS NULL));
-
-
---
--- Name: uq_tenant_members_tenant_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_tenant_members_tenant_user ON public.tenant_members USING btree (tenant_id, user_id);
-
-
---
--- Name: ux_subscriptions_active_per_personal_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX ux_subscriptions_active_per_personal_user ON public.subscriptions USING btree (user_id) WHERE ((status = 'active'::text) AND (tenant_id IS NULL));
-
-
---
--- Name: ux_subscriptions_active_per_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX ux_subscriptions_active_per_tenant ON public.subscriptions USING btree (tenant_id) WHERE ((status = 'active'::text) AND (tenant_id IS NOT NULL));
-
-
---
--- Name: ix_realtime_subscription_entity; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX ix_realtime_subscription_entity ON realtime.subscription USING btree (entity);
-
-
---
--- Name: messages_inserted_at_topic_index; Type: INDEX; Schema: realtime; Owner: supabase_realtime_admin
---
-
-CREATE INDEX messages_inserted_at_topic_index ON ONLY realtime.messages USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_11_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_11_inserted_at_topic_idx ON realtime.messages_2026_03_11 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_12_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_12_inserted_at_topic_idx ON realtime.messages_2026_03_12 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_13_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_13_inserted_at_topic_idx ON realtime.messages_2026_03_13 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_14_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_14_inserted_at_topic_idx ON realtime.messages_2026_03_14 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_15_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_15_inserted_at_topic_idx ON realtime.messages_2026_03_15 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_16_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_16_inserted_at_topic_idx ON realtime.messages_2026_03_16 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_17_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_17_inserted_at_topic_idx ON realtime.messages_2026_03_17 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: subscription_subscription_id_entity_filters_key; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscription_subscription_id_entity_filters_key ON realtime.subscription USING btree (subscription_id, entity, filters);
-
-
---
--- Name: bname; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX bname ON storage.buckets USING btree (name);
-
-
---
--- Name: bucketid_objname; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX bucketid_objname ON storage.objects USING btree (bucket_id, name);
-
-
---
--- Name: buckets_analytics_unique_name_idx; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX buckets_analytics_unique_name_idx ON storage.buckets_analytics USING btree (name) WHERE (deleted_at IS NULL);
-
-
---
--- Name: idx_iceberg_namespaces_bucket_id; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX idx_iceberg_namespaces_bucket_id ON storage.iceberg_namespaces USING btree (catalog_id, name);
-
-
---
--- Name: idx_iceberg_tables_location; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX idx_iceberg_tables_location ON storage.iceberg_tables USING btree (location);
-
-
---
--- Name: idx_iceberg_tables_namespace_id; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX idx_iceberg_tables_namespace_id ON storage.iceberg_tables USING btree (catalog_id, namespace_id, name);
-
-
---
--- Name: idx_multipart_uploads_list; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX idx_multipart_uploads_list ON storage.s3_multipart_uploads USING btree (bucket_id, key, created_at);
-
-
---
--- Name: idx_objects_bucket_id_name; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX idx_objects_bucket_id_name ON storage.objects USING btree (bucket_id, name COLLATE "C");
-
-
---
--- Name: idx_objects_bucket_id_name_lower; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX idx_objects_bucket_id_name_lower ON storage.objects USING btree (bucket_id, lower(name) COLLATE "C");
-
-
---
--- Name: name_prefix_search; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX name_prefix_search ON storage.objects USING btree (name text_pattern_ops);
-
-
---
--- Name: vector_indexes_name_bucket_id_idx; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX vector_indexes_name_bucket_id_idx ON storage.vector_indexes USING btree (name, bucket_id);
-
-
---
--- Name: supabase_functions_hooks_h_table_id_h_name_idx; Type: INDEX; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE INDEX supabase_functions_hooks_h_table_id_h_name_idx ON supabase_functions.hooks USING btree (hook_table_id, hook_name);
-
-
---
--- Name: supabase_functions_hooks_request_id_idx; Type: INDEX; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE INDEX supabase_functions_hooks_request_id_idx ON supabase_functions.hooks USING btree (request_id);
-
-
---
--- Name: messages_2026_03_11_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_11_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_11_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_11_pkey;
-
-
---
--- Name: messages_2026_03_12_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_12_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_12_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_12_pkey;
-
-
---
--- Name: messages_2026_03_13_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_13_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_13_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_13_pkey;
-
-
---
--- Name: messages_2026_03_14_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_14_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_14_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_14_pkey;
-
-
---
--- Name: messages_2026_03_15_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_15_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_15_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_15_pkey;
-
-
---
--- Name: messages_2026_03_16_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_16_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_16_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_16_pkey;
-
-
---
--- Name: messages_2026_03_17_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_17_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_17_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_17_pkey;
-
-
---
--- Name: users on_auth_user_created; Type: TRIGGER; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TRIGGER on_auth_user_created AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION public.handle_new_user();
-
-
---
--- Name: users trg_seed_patient_groups; Type: TRIGGER; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TRIGGER trg_seed_patient_groups AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION public.on_new_user_seed_patient_groups();
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER agenda_bloqueios_updated_at BEFORE UPDATE ON public.agenda_bloqueios FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agendador_configuracoes agendador_slug_trigger; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER agendador_slug_trigger BEFORE INSERT OR UPDATE ON public.agendador_configuracoes FOR EACH ROW EXECUTE FUNCTION public.agendador_gerar_slug();
-
-
---
--- Name: tenant_members prevent_saas_membership_trigger; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER prevent_saas_membership_trigger BEFORE INSERT ON public.tenant_members FOR EACH ROW EXECUTE FUNCTION public.prevent_saas_membership();
-
-
---
--- Name: insurance_plan_services set_insurance_plan_services_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER set_insurance_plan_services_updated_at BEFORE UPDATE ON public.insurance_plan_services FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_configuracoes tg_agenda_configuracoes_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_configuracoes_updated_at BEFORE UPDATE ON public.agenda_configuracoes FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_eventos tg_agenda_eventos_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_eventos_updated_at BEFORE UPDATE ON public.agenda_eventos FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_excecoes tg_agenda_excecoes_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_excecoes_updated_at BEFORE UPDATE ON public.agenda_excecoes FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_regras_semanais tg_agenda_regras_semanais_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_regras_semanais_updated_at BEFORE UPDATE ON public.agenda_regras_semanais FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: recurrence_rules tg_recurrence_rules_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_recurrence_rules_updated_at BEFORE UPDATE ON public.recurrence_rules FOR EACH ROW EXECUTE FUNCTION public.set_updated_at_recurrence();
-
-
---
--- Name: plan_public tr_plan_public_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tr_plan_public_updated_at BEFORE UPDATE ON public.plan_public FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: profiles trg_account_type_immutable; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_account_type_immutable BEFORE UPDATE OF account_type ON public.profiles FOR EACH ROW EXECUTE FUNCTION public.guard_account_type_immutable();
-
-
---
--- Name: agenda_configuracoes trg_agenda_cfg_sync; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_cfg_sync BEFORE INSERT OR UPDATE ON public.agenda_configuracoes FOR EACH ROW EXECUTE FUNCTION public.agenda_cfg_sync();
-
-
---
--- Name: agenda_eventos trg_agenda_eventos_busy_mirror_del; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_eventos_busy_mirror_del AFTER DELETE ON public.agenda_eventos FOR EACH ROW WHEN (((old.mirror_of_event_id IS NULL) AND (old.tenant_id = old.owner_id))) EXECUTE FUNCTION public.sync_busy_mirror_agenda_eventos();
-
-
---
--- Name: agenda_eventos trg_agenda_eventos_busy_mirror_ins; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_eventos_busy_mirror_ins AFTER INSERT ON public.agenda_eventos FOR EACH ROW WHEN (((new.mirror_of_event_id IS NULL) AND (new.tenant_id = new.owner_id) AND (new.visibility_scope = ANY (ARRAY['busy_only'::text, 'private'::text])))) EXECUTE FUNCTION public.sync_busy_mirror_agenda_eventos();
-
-
---
--- Name: agenda_eventos trg_agenda_eventos_busy_mirror_upd; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_eventos_busy_mirror_upd AFTER UPDATE ON public.agenda_eventos FOR EACH ROW WHEN (((new.mirror_of_event_id IS NULL) AND (new.tenant_id = new.owner_id) AND ((new.visibility_scope IS DISTINCT FROM old.visibility_scope) OR (new.inicio_em IS DISTINCT FROM old.inicio_em) OR (new.fim_em IS DISTINCT FROM old.fim_em) OR (new.owner_id IS DISTINCT FROM old.owner_id) OR (new.tenant_id IS DISTINCT FROM old.tenant_id)))) EXECUTE FUNCTION public.sync_busy_mirror_agenda_eventos();
-
-
---
--- Name: agenda_regras_semanais trg_agenda_regras_semanais_no_overlap; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_regras_semanais_no_overlap BEFORE INSERT OR UPDATE ON public.agenda_regras_semanais FOR EACH ROW EXECUTE FUNCTION public.fn_agenda_regras_semanais_no_overlap();
-
-
---
--- Name: determined_commitment_fields trg_determined_commitment_fields_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_determined_commitment_fields_updated_at BEFORE UPDATE ON public.determined_commitment_fields FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: determined_commitments trg_determined_commitments_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_determined_commitments_updated_at BEFORE UPDATE ON public.determined_commitments FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: financial_exceptions trg_financial_exceptions_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_financial_exceptions_updated_at BEFORE UPDATE ON public.financial_exceptions FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: insurance_plans trg_insurance_plans_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_insurance_plans_updated_at BEFORE UPDATE ON public.insurance_plans FOR EACH ROW EXECUTE FUNCTION public.set_insurance_plans_updated_at();
-
-
---
--- Name: plans trg_no_change_core_plan_key; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_no_change_core_plan_key BEFORE UPDATE ON public.plans FOR EACH ROW EXECUTE FUNCTION public.guard_no_change_core_plan_key();
-
-
---
--- Name: plans trg_no_change_plan_target; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_no_change_plan_target BEFORE UPDATE ON public.plans FOR EACH ROW EXECUTE FUNCTION public.guard_no_change_plan_target();
-
-
---
--- Name: plans trg_no_delete_core_plans; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_no_delete_core_plans BEFORE DELETE ON public.plans FOR EACH ROW EXECUTE FUNCTION public.guard_no_delete_core_plans();
-
-
---
--- Name: tenant_members trg_patient_cannot_own_tenant; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_cannot_own_tenant BEFORE INSERT OR UPDATE ON public.tenant_members FOR EACH ROW EXECUTE FUNCTION public.guard_patient_cannot_own_tenant();
-
-
---
--- Name: patient_groups trg_patient_groups_set_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_groups_set_updated_at BEFORE UPDATE ON public.patient_groups FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patient_intake_requests trg_patient_intake_requests_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_intake_requests_updated_at BEFORE UPDATE ON public.patient_intake_requests FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patient_tags trg_patient_tags_set_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_tags_set_updated_at BEFORE UPDATE ON public.patient_tags FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patients trg_patients_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patients_updated_at BEFORE UPDATE ON public.patients FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patients trg_patients_validate_members; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patients_validate_members BEFORE INSERT OR UPDATE OF tenant_id, responsible_member_id, patient_scope, therapist_member_id ON public.patients FOR EACH ROW EXECUTE FUNCTION public.patients_validate_member_consistency();
-
-
---
--- Name: payment_settings trg_payment_settings_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_payment_settings_updated_at BEFORE UPDATE ON public.payment_settings FOR EACH ROW EXECUTE FUNCTION public.update_payment_settings_updated_at();
-
-
---
--- Name: patient_groups trg_prevent_promoting_to_system; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_prevent_promoting_to_system BEFORE UPDATE ON public.patient_groups FOR EACH ROW EXECUTE FUNCTION public.prevent_promoting_to_system();
-
-
---
--- Name: patient_groups trg_prevent_system_group_changes; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_prevent_system_group_changes BEFORE DELETE OR UPDATE ON public.patient_groups FOR EACH ROW EXECUTE FUNCTION public.prevent_system_group_changes();
-
-
---
--- Name: professional_pricing trg_professional_pricing_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_professional_pricing_updated_at BEFORE UPDATE ON public.professional_pricing FOR EACH ROW EXECUTE FUNCTION public.update_professional_pricing_updated_at();
-
-
---
--- Name: profiles trg_profiles_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_profiles_updated_at BEFORE UPDATE ON public.profiles FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: services trg_services_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_services_updated_at BEFORE UPDATE ON public.services FOR EACH ROW EXECUTE FUNCTION public.set_services_updated_at();
-
-
---
--- Name: subscription_intents trg_subscription_intents_view_insert; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_subscription_intents_view_insert INSTEAD OF INSERT ON public.subscription_intents FOR EACH ROW EXECUTE FUNCTION public.subscription_intents_view_insert();
-
-
---
--- Name: subscriptions trg_subscriptions_validate_scope; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_subscriptions_validate_scope BEFORE INSERT OR UPDATE ON public.subscriptions FOR EACH ROW EXECUTE FUNCTION public.subscriptions_validate_scope();
-
-
---
--- Name: tenant_features trg_tenant_features_guard_with_plan; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_tenant_features_guard_with_plan BEFORE INSERT OR UPDATE ON public.tenant_features FOR EACH ROW EXECUTE FUNCTION public.tenant_features_guard_with_plan();
-
-
---
--- Name: tenant_features trg_tenant_features_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_tenant_features_updated_at BEFORE UPDATE ON public.tenant_features FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: tenants trg_tenant_kind_immutable; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_tenant_kind_immutable BEFORE UPDATE OF kind ON public.tenants FOR EACH ROW EXECUTE FUNCTION public.guard_tenant_kind_immutable();
-
-
---
--- Name: user_settings trg_user_settings_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_user_settings_updated_at BEFORE UPDATE ON public.user_settings FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: subscription tr_check_filters; Type: TRIGGER; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TRIGGER tr_check_filters BEFORE INSERT OR UPDATE ON realtime.subscription FOR EACH ROW EXECUTE FUNCTION realtime.subscription_check_filters();
-
-
---
--- Name: buckets enforce_bucket_name_length_trigger; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER enforce_bucket_name_length_trigger BEFORE INSERT OR UPDATE OF name ON storage.buckets FOR EACH ROW EXECUTE FUNCTION storage.enforce_bucket_name_length();
-
-
---
--- Name: buckets protect_buckets_delete; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER protect_buckets_delete BEFORE DELETE ON storage.buckets FOR EACH STATEMENT EXECUTE FUNCTION storage.protect_delete();
-
-
---
--- Name: objects protect_objects_delete; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER protect_objects_delete BEFORE DELETE ON storage.objects FOR EACH STATEMENT EXECUTE FUNCTION storage.protect_delete();
-
-
---
--- Name: objects update_objects_updated_at; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER update_objects_updated_at BEFORE UPDATE ON storage.objects FOR EACH ROW EXECUTE FUNCTION storage.update_updated_at_column();
-
-
---
--- Name: extensions extensions_tenant_external_id_fkey; Type: FK CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.extensions
- ADD CONSTRAINT extensions_tenant_external_id_fkey FOREIGN KEY (tenant_external_id) REFERENCES _realtime.tenants(external_id) ON DELETE CASCADE;
-
-
---
--- Name: identities identities_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.identities
- ADD CONSTRAINT identities_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: mfa_amr_claims mfa_amr_claims_session_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_amr_claims
- ADD CONSTRAINT mfa_amr_claims_session_id_fkey FOREIGN KEY (session_id) REFERENCES auth.sessions(id) ON DELETE CASCADE;
-
-
---
--- Name: mfa_challenges mfa_challenges_auth_factor_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_challenges
- ADD CONSTRAINT mfa_challenges_auth_factor_id_fkey FOREIGN KEY (factor_id) REFERENCES auth.mfa_factors(id) ON DELETE CASCADE;
-
-
---
--- Name: mfa_factors mfa_factors_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_factors
- ADD CONSTRAINT mfa_factors_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_authorizations oauth_authorizations_client_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_client_id_fkey FOREIGN KEY (client_id) REFERENCES auth.oauth_clients(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_authorizations oauth_authorizations_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_consents oauth_consents_client_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_client_id_fkey FOREIGN KEY (client_id) REFERENCES auth.oauth_clients(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_consents oauth_consents_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: one_time_tokens one_time_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.one_time_tokens
- ADD CONSTRAINT one_time_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_tokens refresh_tokens_session_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens
- ADD CONSTRAINT refresh_tokens_session_id_fkey FOREIGN KEY (session_id) REFERENCES auth.sessions(id) ON DELETE CASCADE;
-
-
---
--- Name: saml_providers saml_providers_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_providers
- ADD CONSTRAINT saml_providers_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE;
-
-
---
--- Name: saml_relay_states saml_relay_states_flow_state_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_relay_states
- ADD CONSTRAINT saml_relay_states_flow_state_id_fkey FOREIGN KEY (flow_state_id) REFERENCES auth.flow_state(id) ON DELETE CASCADE;
-
-
---
--- Name: saml_relay_states saml_relay_states_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_relay_states
- ADD CONSTRAINT saml_relay_states_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE;
-
-
---
--- Name: sessions sessions_oauth_client_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sessions
- ADD CONSTRAINT sessions_oauth_client_id_fkey FOREIGN KEY (oauth_client_id) REFERENCES auth.oauth_clients(id) ON DELETE CASCADE;
-
-
---
--- Name: sessions sessions_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sessions
- ADD CONSTRAINT sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: sso_domains sso_domains_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sso_domains
- ADD CONSTRAINT sso_domains_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_bloqueios
- ADD CONSTRAINT agenda_bloqueios_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_bloqueios
- ADD CONSTRAINT agenda_bloqueios_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_configuracoes
- ADD CONSTRAINT agenda_configuracoes_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_eventos agenda_eventos_billing_contract_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_billing_contract_id_fkey FOREIGN KEY (billing_contract_id) REFERENCES public.billing_contracts(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_determined_commitment_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_determined_commitment_fk FOREIGN KEY (determined_commitment_id) REFERENCES public.determined_commitments(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_insurance_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_insurance_plan_id_fkey FOREIGN KEY (insurance_plan_id) REFERENCES public.insurance_plans(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_insurance_plan_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_insurance_plan_service_id_fkey FOREIGN KEY (insurance_plan_service_id) REFERENCES public.insurance_plan_services(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_patient_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_recurrence_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_recurrence_id_fkey FOREIGN KEY (recurrence_id) REFERENCES public.recurrence_rules(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_terapeuta_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_terapeuta_fk FOREIGN KEY (terapeuta_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_excecoes agenda_excecoes_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_excecoes
- ADD CONSTRAINT agenda_excecoes_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_online_slots agenda_online_slots_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_online_slots agenda_online_slots_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_regras_semanais
- ADD CONSTRAINT agenda_regras_semanais_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_bloqueados_semanais
- ADD CONSTRAINT agenda_slots_bloqueados_semanais_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_regras
- ADD CONSTRAINT agenda_slots_regras_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_configuracoes agendador_configuracoes_owner_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_configuracoes
- ADD CONSTRAINT agendador_configuracoes_owner_fk FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_configuracoes agendador_configuracoes_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_configuracoes
- ADD CONSTRAINT agendador_configuracoes_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_solicitacoes agendador_sol_owner_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_solicitacoes
- ADD CONSTRAINT agendador_sol_owner_fk FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_solicitacoes agendador_sol_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_solicitacoes
- ADD CONSTRAINT agendador_sol_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: billing_contracts billing_contracts_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.billing_contracts
- ADD CONSTRAINT billing_contracts_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: billing_contracts billing_contracts_patient_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.billing_contracts
- ADD CONSTRAINT billing_contracts_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE CASCADE;
-
-
---
--- Name: commitment_services commitment_services_commitment_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_services
- ADD CONSTRAINT commitment_services_commitment_id_fkey FOREIGN KEY (commitment_id) REFERENCES public.agenda_eventos(id) ON DELETE CASCADE;
-
-
---
--- Name: commitment_services commitment_services_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_services
- ADD CONSTRAINT commitment_services_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE RESTRICT;
-
-
---
--- Name: commitment_time_logs commitment_time_logs_calendar_event_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_calendar_event_id_fkey FOREIGN KEY (calendar_event_id) REFERENCES public.agenda_eventos(id) ON DELETE SET NULL;
-
-
---
--- Name: commitment_time_logs commitment_time_logs_commitment_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_commitment_id_fkey FOREIGN KEY (commitment_id) REFERENCES public.determined_commitments(id) ON DELETE CASCADE;
-
-
---
--- Name: commitment_time_logs commitment_time_logs_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: determined_commitment_fields determined_commitment_fields_commitment_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitment_fields
- ADD CONSTRAINT determined_commitment_fields_commitment_id_fkey FOREIGN KEY (commitment_id) REFERENCES public.determined_commitments(id) ON DELETE CASCADE;
-
-
---
--- Name: determined_commitment_fields determined_commitment_fields_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitment_fields
- ADD CONSTRAINT determined_commitment_fields_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: determined_commitments determined_commitments_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitments
- ADD CONSTRAINT determined_commitments_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: feriados feriados_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: feriados feriados_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: financial_exceptions financial_exceptions_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.financial_exceptions
- ADD CONSTRAINT financial_exceptions_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: insurance_plan_services insurance_plan_services_plan_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.insurance_plan_services
- ADD CONSTRAINT insurance_plan_services_plan_fkey FOREIGN KEY (insurance_plan_id) REFERENCES public.insurance_plans(id) ON DELETE CASCADE;
-
-
---
--- Name: insurance_plans insurance_plans_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.insurance_plans
- ADD CONSTRAINT insurance_plans_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: module_features module_features_feature_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.module_features
- ADD CONSTRAINT module_features_feature_id_fkey FOREIGN KEY (feature_id) REFERENCES public.features(id) ON DELETE CASCADE;
-
-
---
--- Name: module_features module_features_module_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.module_features
- ADD CONSTRAINT module_features_module_id_fkey FOREIGN KEY (module_id) REFERENCES public.modules(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_discounts patient_discounts_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_discounts
- ADD CONSTRAINT patient_discounts_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_discounts patient_discounts_patient_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_discounts
- ADD CONSTRAINT patient_discounts_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_group_patient patient_group_patient_patient_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_group_patient
- ADD CONSTRAINT patient_group_patient_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_group_patient patient_group_patient_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_group_patient
- ADD CONSTRAINT patient_group_patient_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_groups patient_groups_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_groups
- ADD CONSTRAINT patient_groups_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_intake_requests patient_intake_requests_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_intake_requests
- ADD CONSTRAINT patient_intake_requests_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_invites patient_invites_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_invites
- ADD CONSTRAINT patient_invites_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag patient_patient_tag_tag_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT patient_patient_tag_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES public.patient_tags(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag patient_patient_tag_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT patient_patient_tag_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_tags patient_tags_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_tags
- ADD CONSTRAINT patient_tags_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patients patients_responsible_member_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_responsible_member_id_fkey FOREIGN KEY (responsible_member_id) REFERENCES public.tenant_members(id) ON DELETE RESTRICT;
-
-
---
--- Name: patients patients_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patients patients_therapist_member_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_therapist_member_id_fkey FOREIGN KEY (therapist_member_id) REFERENCES public.tenant_members(id);
-
-
---
--- Name: patients patients_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: payment_settings payment_settings_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: payment_settings payment_settings_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_features plan_features_feature_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_features
- ADD CONSTRAINT plan_features_feature_id_fkey FOREIGN KEY (feature_id) REFERENCES public.features(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_features plan_features_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_features
- ADD CONSTRAINT plan_features_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_prices plan_prices_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_prices
- ADD CONSTRAINT plan_prices_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_public_bullets plan_public_bullets_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public_bullets
- ADD CONSTRAINT plan_public_bullets_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_public plan_public_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public
- ADD CONSTRAINT plan_public_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag ppt_patient_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT ppt_patient_fk FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag ppt_tag_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT ppt_tag_fk FOREIGN KEY (tag_id) REFERENCES public.patient_tags(id) ON DELETE CASCADE;
-
-
---
--- Name: professional_pricing professional_pricing_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.professional_pricing
- ADD CONSTRAINT professional_pricing_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: profiles profiles_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.profiles
- ADD CONSTRAINT profiles_id_fkey FOREIGN KEY (id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_agenda_evento_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_agenda_evento_id_fkey FOREIGN KEY (agenda_evento_id) REFERENCES public.agenda_eventos(id) ON DELETE SET NULL;
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_recurrence_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_recurrence_id_fkey FOREIGN KEY (recurrence_id) REFERENCES public.recurrence_rules(id) ON DELETE CASCADE;
-
-
---
--- Name: recurrence_rule_services recurrence_rule_services_rule_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rule_services
- ADD CONSTRAINT recurrence_rule_services_rule_id_fkey FOREIGN KEY (rule_id) REFERENCES public.recurrence_rules(id) ON DELETE CASCADE;
-
-
---
--- Name: recurrence_rule_services recurrence_rule_services_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rule_services
- ADD CONSTRAINT recurrence_rule_services_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE RESTRICT;
-
-
---
--- Name: recurrence_rules recurrence_rules_insurance_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rules
- ADD CONSTRAINT recurrence_rules_insurance_plan_id_fkey FOREIGN KEY (insurance_plan_id) REFERENCES public.insurance_plans(id) ON DELETE SET NULL;
-
-
---
--- Name: recurrence_rules recurrence_rules_insurance_plan_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rules
- ADD CONSTRAINT recurrence_rules_insurance_plan_service_id_fkey FOREIGN KEY (insurance_plan_service_id) REFERENCES public.insurance_plan_services(id) ON DELETE SET NULL;
-
-
---
--- Name: saas_admins saas_admins_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_admins
- ADD CONSTRAINT saas_admins_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: saas_doc_votos saas_doc_votos_doc_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_doc_id_fkey FOREIGN KEY (doc_id) REFERENCES public.saas_docs(id) ON DELETE CASCADE;
-
-
---
--- Name: saas_doc_votos saas_doc_votos_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: saas_faq_itens saas_faq_itens_doc_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_faq_itens
- ADD CONSTRAINT saas_faq_itens_doc_id_fkey FOREIGN KEY (doc_id) REFERENCES public.saas_docs(id) ON DELETE CASCADE;
-
-
---
--- Name: services services_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.services
- ADD CONSTRAINT services_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: subscription_intents_personal sint_personal_subscription_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_personal
- ADD CONSTRAINT sint_personal_subscription_id_fkey FOREIGN KEY (subscription_id) REFERENCES public.subscriptions(id) ON DELETE SET NULL;
-
-
---
--- Name: subscription_intents_tenant sint_tenant_subscription_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_tenant
- ADD CONSTRAINT sint_tenant_subscription_id_fkey FOREIGN KEY (subscription_id) REFERENCES public.subscriptions(id) ON DELETE SET NULL;
-
-
---
--- Name: subscription_events subscription_events_subscription_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_events
- ADD CONSTRAINT subscription_events_subscription_id_fkey FOREIGN KEY (subscription_id) REFERENCES public.subscriptions(id) ON DELETE CASCADE;
-
-
---
--- Name: subscription_intents_personal subscription_intents_personal_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_personal
- ADD CONSTRAINT subscription_intents_personal_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE RESTRICT;
-
-
---
--- Name: subscription_intents_tenant subscription_intents_tenant_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_tenant
- ADD CONSTRAINT subscription_intents_tenant_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE RESTRICT;
-
-
---
--- Name: subscription_intents_legacy subscription_intents_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_legacy
- ADD CONSTRAINT subscription_intents_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: subscriptions subscriptions_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscriptions
- ADD CONSTRAINT subscriptions_owner_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: subscriptions subscriptions_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscriptions
- ADD CONSTRAINT subscriptions_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE RESTRICT;
-
-
---
--- Name: support_sessions support_sessions_admin_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_admin_fk FOREIGN KEY (admin_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: support_sessions support_sessions_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_features tenant_features_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_features
- ADD CONSTRAINT tenant_features_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_invites tenant_invites_accepted_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_accepted_by_fkey FOREIGN KEY (accepted_by) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: tenant_invites tenant_invites_invited_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_invited_by_fkey FOREIGN KEY (invited_by) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: tenant_invites tenant_invites_revoked_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_revoked_by_fkey FOREIGN KEY (revoked_by) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: tenant_invites tenant_invites_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_members tenant_members_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_members tenant_members_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_modules tenant_modules_module_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_module_id_fkey FOREIGN KEY (module_id) REFERENCES public.modules(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_modules tenant_modules_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: user_settings user_settings_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.user_settings
- ADD CONSTRAINT user_settings_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: iceberg_namespaces iceberg_namespaces_catalog_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_namespaces
- ADD CONSTRAINT iceberg_namespaces_catalog_id_fkey FOREIGN KEY (catalog_id) REFERENCES storage.buckets_analytics(id) ON DELETE CASCADE;
-
-
---
--- Name: iceberg_tables iceberg_tables_catalog_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_tables
- ADD CONSTRAINT iceberg_tables_catalog_id_fkey FOREIGN KEY (catalog_id) REFERENCES storage.buckets_analytics(id) ON DELETE CASCADE;
-
-
---
--- Name: iceberg_tables iceberg_tables_namespace_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_tables
- ADD CONSTRAINT iceberg_tables_namespace_id_fkey FOREIGN KEY (namespace_id) REFERENCES storage.iceberg_namespaces(id) ON DELETE CASCADE;
-
-
---
--- Name: objects objects_bucketId_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.objects
- ADD CONSTRAINT "objects_bucketId_fkey" FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id);
-
-
---
--- Name: s3_multipart_uploads s3_multipart_uploads_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads
- ADD CONSTRAINT s3_multipart_uploads_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id);
-
-
---
--- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads_parts
- ADD CONSTRAINT s3_multipart_uploads_parts_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id);
-
-
---
--- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_upload_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads_parts
- ADD CONSTRAINT s3_multipart_uploads_parts_upload_id_fkey FOREIGN KEY (upload_id) REFERENCES storage.s3_multipart_uploads(id) ON DELETE CASCADE;
-
-
---
--- Name: vector_indexes vector_indexes_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.vector_indexes
- ADD CONSTRAINT vector_indexes_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets_vectors(id);
-
-
---
--- Name: audit_log_entries; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.audit_log_entries ENABLE ROW LEVEL SECURITY;
-
---
--- Name: flow_state; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.flow_state ENABLE ROW LEVEL SECURITY;
-
---
--- Name: identities; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.identities ENABLE ROW LEVEL SECURITY;
-
---
--- Name: instances; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.instances ENABLE ROW LEVEL SECURITY;
-
---
--- Name: mfa_amr_claims; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.mfa_amr_claims ENABLE ROW LEVEL SECURITY;
-
---
--- Name: mfa_challenges; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.mfa_challenges ENABLE ROW LEVEL SECURITY;
-
---
--- Name: mfa_factors; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.mfa_factors ENABLE ROW LEVEL SECURITY;
-
---
--- Name: one_time_tokens; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.one_time_tokens ENABLE ROW LEVEL SECURITY;
-
---
--- Name: refresh_tokens; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.refresh_tokens ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saml_providers; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.saml_providers ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saml_relay_states; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.saml_relay_states ENABLE ROW LEVEL SECURITY;
-
---
--- Name: schema_migrations; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.schema_migrations ENABLE ROW LEVEL SECURITY;
-
---
--- Name: sessions; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.sessions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: sso_domains; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.sso_domains ENABLE ROW LEVEL SECURITY;
-
---
--- Name: sso_providers; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.sso_providers ENABLE ROW LEVEL SECURITY;
-
---
--- Name: users; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.users ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_bloqueios; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_bloqueios ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_configuracoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_configuracoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_configuracoes agenda_configuracoes_clinic_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_configuracoes_clinic_read ON public.agenda_configuracoes FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_clinic_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_configuracoes_clinic_write ON public.agenda_configuracoes USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_configuracoes_owner ON public.agenda_configuracoes USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_eventos; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_eventos ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_eventos agenda_eventos_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_delete ON public.agenda_eventos FOR DELETE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.delete'::text)));
-
-
---
--- Name: agenda_eventos agenda_eventos_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_insert ON public.agenda_eventos FOR INSERT WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.create'::text)));
-
-
---
--- Name: agenda_eventos agenda_eventos_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_owner_all ON public.agenda_eventos TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_eventos agenda_eventos_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_select ON public.agenda_eventos FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_eventos agenda_eventos_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_update ON public.agenda_eventos FOR UPDATE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_excecoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_excecoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_excecoes agenda_excecoes_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_excecoes_owner ON public.agenda_excecoes USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_excecoes agenda_excecoes_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_excecoes_select ON public.agenda_excecoes FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_excecoes agenda_excecoes_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_excecoes_write ON public.agenda_excecoes USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_online_slots; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_online_slots ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_online_slots agenda_online_slots_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_online_slots_owner ON public.agenda_online_slots USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_online_slots agenda_online_slots_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_online_slots_select ON public.agenda_online_slots FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_online_slots agenda_online_slots_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_online_slots_write ON public.agenda_online_slots USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_regras_semanais; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_regras_semanais ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_regras_semanais_owner ON public.agenda_regras_semanais USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_regras_semanais_select ON public.agenda_regras_semanais FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_regras_semanais_write ON public.agenda_regras_semanais USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_slots_bloqueados_semanais; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_slots_bloqueados_semanais ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_bloqueados_semanais_select ON public.agenda_slots_bloqueados_semanais FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_bloqueados_semanais_write ON public.agenda_slots_bloqueados_semanais USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_slots_regras; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_slots_regras ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_slots_regras agenda_slots_regras_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_regras_select ON public.agenda_slots_regras FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_regras_write ON public.agenda_slots_regras USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agendador_configuracoes agendador_cfg_public_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_cfg_public_read ON public.agendador_configuracoes FOR SELECT TO anon USING (((ativo = true) AND (link_slug IS NOT NULL)));
-
-
---
--- Name: agendador_configuracoes agendador_cfg_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_cfg_select ON public.agendador_configuracoes FOR SELECT USING ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_configuracoes agendador_cfg_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_cfg_write ON public.agendador_configuracoes USING ((auth.uid() = owner_id)) WITH CHECK ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_configuracoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agendador_configuracoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agendador_solicitacoes agendador_sol_owner_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_owner_select ON public.agendador_solicitacoes FOR SELECT USING ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_solicitacoes agendador_sol_owner_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_owner_write ON public.agendador_solicitacoes USING ((auth.uid() = owner_id)) WITH CHECK ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_solicitacoes agendador_sol_patient_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_patient_read ON public.agendador_solicitacoes FOR SELECT TO authenticated USING (((auth.uid() = user_id) OR (auth.uid() = owner_id)));
-
-
---
--- Name: agendador_solicitacoes agendador_sol_public_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_public_insert ON public.agendador_solicitacoes FOR INSERT TO anon WITH CHECK (true);
-
-
---
--- Name: agendador_solicitacoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agendador_solicitacoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: billing_contracts; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.billing_contracts ENABLE ROW LEVEL SECURITY;
-
---
--- Name: billing_contracts billing_contracts: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "billing_contracts: owner full access" ON public.billing_contracts USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_delete ON public.agenda_bloqueios FOR DELETE TO authenticated USING ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_insert ON public.agenda_bloqueios FOR INSERT TO authenticated WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_select_clinic; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_select_clinic ON public.agenda_bloqueios FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE ((tenant_members.user_id = auth.uid()) AND (tenant_members.role = ANY (ARRAY['admin'::text, 'clinic_admin'::text, 'tenant_admin'::text, 'secretary'::text]))))));
-
-
---
--- Name: agenda_bloqueios bloqueios_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_select_own ON public.agenda_bloqueios FOR SELECT TO authenticated USING ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_update ON public.agenda_bloqueios FOR UPDATE TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: saas_docs clinic_admin_read_all_docs; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY clinic_admin_read_all_docs ON public.saas_docs FOR SELECT TO authenticated USING (((ativo = true) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = ANY (ARRAY['clinic_admin'::text, 'tenant_admin'::text])))))));
-
-
---
--- Name: commitment_services; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.commitment_services ENABLE ROW LEVEL SECURITY;
-
---
--- Name: commitment_services commitment_services: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "commitment_services: owner full access" ON public.commitment_services USING ((EXISTS ( SELECT 1
- FROM public.services s
- WHERE ((s.id = commitment_services.service_id) AND (s.owner_id = auth.uid()))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.services s
- WHERE ((s.id = commitment_services.service_id) AND (s.owner_id = auth.uid())))));
-
-
---
--- Name: commitment_time_logs; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.commitment_time_logs ENABLE ROW LEVEL SECURITY;
-
---
--- Name: commitment_time_logs ctl_delete_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_delete_for_active_member ON public.commitment_time_logs FOR DELETE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: commitment_time_logs ctl_insert_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_insert_for_active_member ON public.commitment_time_logs FOR INSERT TO authenticated WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: commitment_time_logs ctl_select_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_select_for_active_member ON public.commitment_time_logs FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: commitment_time_logs ctl_update_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_update_for_active_member ON public.commitment_time_logs FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitments dc_delete_custom_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_delete_custom_for_active_member ON public.determined_commitments FOR DELETE TO authenticated USING (((is_native = false) AND (EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))));
-
-
---
--- Name: determined_commitments dc_insert_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_insert_for_active_member ON public.determined_commitments FOR INSERT TO authenticated WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitments dc_select_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_select_for_active_member ON public.determined_commitments FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitments dc_update_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_update_for_active_member ON public.determined_commitments FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_delete_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_delete_for_active_member ON public.determined_commitment_fields FOR DELETE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_insert_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_insert_for_active_member ON public.determined_commitment_fields FOR INSERT TO authenticated WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_select_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_select_for_active_member ON public.determined_commitment_fields FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_update_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_update_for_active_member ON public.determined_commitment_fields FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: agenda_bloqueios delete own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "delete own" ON public.agenda_bloqueios FOR DELETE USING ((owner_id = auth.uid()));
-
-
---
--- Name: determined_commitment_fields; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.determined_commitment_fields ENABLE ROW LEVEL SECURITY;
-
---
--- Name: determined_commitments; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.determined_commitments ENABLE ROW LEVEL SECURITY;
-
---
--- Name: dev_user_credentials dev_creds_select_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dev_creds_select_saas_admin ON public.dev_user_credentials FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles p
- WHERE ((p.id = auth.uid()) AND (p.role = 'saas_admin'::text)))));
-
-
---
--- Name: dev_user_credentials dev_creds_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dev_creds_write_saas_admin ON public.dev_user_credentials TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles p
- WHERE ((p.id = auth.uid()) AND (p.role = 'saas_admin'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.profiles p
- WHERE ((p.id = auth.uid()) AND (p.role = 'saas_admin'::text)))));
-
-
---
--- Name: dev_user_credentials; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.dev_user_credentials ENABLE ROW LEVEL SECURITY;
-
---
--- Name: entitlements_invalidation ent_inv_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ent_inv_select_own ON public.entitlements_invalidation FOR SELECT USING (((owner_id = auth.uid()) OR public.is_saas_admin()));
-
-
---
--- Name: entitlements_invalidation ent_inv_update_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ent_inv_update_saas ON public.entitlements_invalidation FOR UPDATE USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: entitlements_invalidation ent_inv_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ent_inv_write_saas ON public.entitlements_invalidation FOR INSERT WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: entitlements_invalidation; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.entitlements_invalidation ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_faq faq_admin_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_admin_write ON public.saas_faq TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = ANY (ARRAY['saas_admin'::text, 'tenant_admin'::text, 'clinic_admin'::text]))))));
-
-
---
--- Name: saas_faq faq_auth_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_auth_read ON public.saas_faq FOR SELECT TO authenticated USING ((ativo = true));
-
-
---
--- Name: saas_faq_itens faq_itens_admin_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_itens_admin_write ON public.saas_faq_itens TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = ANY (ARRAY['saas_admin'::text, 'tenant_admin'::text, 'clinic_admin'::text]))))));
-
-
---
--- Name: saas_faq_itens faq_itens_auth_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_itens_auth_read ON public.saas_faq_itens FOR SELECT TO authenticated USING (((ativo = true) AND (EXISTS ( SELECT 1
- FROM public.saas_docs d
- WHERE ((d.id = saas_faq_itens.doc_id) AND (d.ativo = true))))));
-
-
---
--- Name: saas_faq faq_public_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_public_read ON public.saas_faq FOR SELECT USING (((publico = true) AND (ativo = true)));
-
-
---
--- Name: features; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.features ENABLE ROW LEVEL SECURITY;
-
---
--- Name: features features_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY features_read_authenticated ON public.features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: features features_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY features_write_saas_admin ON public.features TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: feriados; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.feriados ENABLE ROW LEVEL SECURITY;
-
---
--- Name: feriados feriados_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_delete ON public.feriados FOR DELETE USING ((owner_id = auth.uid()));
-
-
---
--- Name: feriados feriados_global_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_global_select ON public.feriados FOR SELECT USING ((tenant_id IS NULL));
-
-
---
--- Name: feriados feriados_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_insert ON public.feriados FOR INSERT WITH CHECK ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_saas_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_saas_delete ON public.feriados FOR DELETE USING ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_saas_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_saas_insert ON public.feriados FOR INSERT WITH CHECK ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_saas_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_saas_select ON public.feriados FOR SELECT USING ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_select ON public.feriados FOR SELECT USING ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid()))));
-
-
---
--- Name: financial_exceptions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.financial_exceptions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: financial_exceptions financial_exceptions: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "financial_exceptions: owner full access" ON public.financial_exceptions USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: financial_exceptions financial_exceptions: tenant members read clinic rules; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "financial_exceptions: tenant members read clinic rules" ON public.financial_exceptions FOR SELECT USING (((owner_id IS NULL) AND (EXISTS ( SELECT 1
- FROM public.owner_users ou
- WHERE ((ou.owner_id = financial_exceptions.tenant_id) AND (ou.user_id = auth.uid()))))));
-
-
---
--- Name: agenda_bloqueios insert own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "insert own" ON public.agenda_bloqueios FOR INSERT WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: insurance_plan_services; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.insurance_plan_services ENABLE ROW LEVEL SECURITY;
-
---
--- Name: insurance_plan_services insurance_plan_services_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY insurance_plan_services_owner ON public.insurance_plan_services USING ((EXISTS ( SELECT 1
- FROM public.insurance_plans ip
- WHERE ((ip.id = insurance_plan_services.insurance_plan_id) AND (ip.owner_id = auth.uid()))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.insurance_plans ip
- WHERE ((ip.id = insurance_plan_services.insurance_plan_id) AND (ip.owner_id = auth.uid())))));
-
-
---
--- Name: insurance_plans; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.insurance_plans ENABLE ROW LEVEL SECURITY;
-
---
--- Name: insurance_plans insurance_plans: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "insurance_plans: owner full access" ON public.insurance_plans USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: module_features; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.module_features ENABLE ROW LEVEL SECURITY;
-
---
--- Name: module_features module_features_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY module_features_read_authenticated ON public.module_features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: module_features module_features_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY module_features_write_saas_admin ON public.module_features TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: modules; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.modules ENABLE ROW LEVEL SECURITY;
-
---
--- Name: modules modules_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY modules_read_authenticated ON public.modules FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: modules modules_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY modules_write_saas_admin ON public.modules TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: owner_users; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.owner_users ENABLE ROW LEVEL SECURITY;
-
---
--- Name: owner_users owner_users: user can read own links; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "owner_users: user can read own links" ON public.owner_users FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: patient_discounts; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_discounts ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_discounts patient_discounts: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "patient_discounts: owner full access" ON public.patient_discounts USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_group_patient; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_group_patient ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_group_patient patient_group_patient_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_group_patient_owner_all ON public.patient_group_patient TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.patients p
- WHERE ((p.id = patient_group_patient.patient_id) AND (p.owner_id = auth.uid()))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.patients p
- WHERE ((p.id = patient_group_patient.patient_id) AND (p.owner_id = auth.uid())))));
-
-
---
--- Name: patient_group_patient patient_group_patient_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_group_patient_select ON public.patient_group_patient FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_group_patient patient_group_patient_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_group_patient_write ON public.patient_group_patient USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_groups; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_groups ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_groups patient_groups_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_groups_owner_all ON public.patient_groups TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_groups patient_groups_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_groups_select ON public.patient_groups FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_groups patient_groups_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_groups_write ON public.patient_groups USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_intake_requests; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_intake_requests ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_intake_requests patient_intake_requests_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_intake_requests_owner_all ON public.patient_intake_requests TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_intake_requests patient_intake_requests_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_intake_requests_select ON public.patient_intake_requests FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_intake_requests patient_intake_requests_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_intake_requests_write ON public.patient_intake_requests USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_invites; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_invites ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_invites patient_invites_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_invites_owner_all ON public.patient_invites TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_invites patient_invites_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_invites_select ON public.patient_invites FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_invites patient_invites_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_invites_write ON public.patient_invites USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_patient_tag; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_patient_tag ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_patient_tag patient_patient_tag_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_patient_tag_owner_all ON public.patient_patient_tag TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_patient_tag patient_patient_tag_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_patient_tag_select ON public.patient_patient_tag FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_patient_tag patient_patient_tag_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_patient_tag_write ON public.patient_patient_tag USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_tags; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_tags ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_tags patient_tags_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_tags_owner_all ON public.patient_tags TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_tags patient_tags_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_tags_select ON public.patient_tags FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_tags patient_tags_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_tags_write ON public.patient_tags USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patients; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patients ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patients patients_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_delete ON public.patients FOR DELETE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.delete'::text)));
-
-
---
--- Name: patients patients_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_insert ON public.patients FOR INSERT WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.create'::text)));
-
-
---
--- Name: patients patients_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_owner_all ON public.patients TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patients patients_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_select ON public.patients FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patients patients_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_update ON public.patients FOR UPDATE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: payment_settings; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.payment_settings ENABLE ROW LEVEL SECURITY;
-
---
--- Name: payment_settings payment_settings: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "payment_settings: owner full access" ON public.payment_settings USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: plan_features; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.plan_features ENABLE ROW LEVEL SECURITY;
-
---
--- Name: plan_features plan_features_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plan_features_read_authenticated ON public.plan_features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plan_features plan_features_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plan_features_write_saas_admin ON public.plan_features TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: plans; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.plans ENABLE ROW LEVEL SECURITY;
-
---
--- Name: plans plans_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plans_read_authenticated ON public.plans FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plans plans_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plans_write_saas_admin ON public.plans TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: professional_pricing; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.professional_pricing ENABLE ROW LEVEL SECURITY;
-
---
--- Name: professional_pricing professional_pricing: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "professional_pricing: owner full access" ON public.professional_pricing USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: profiles; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;
-
---
--- Name: profiles profiles_insert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_insert_own ON public.profiles FOR INSERT WITH CHECK ((id = auth.uid()));
-
-
---
--- Name: profiles profiles_read_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_read_saas_admin ON public.profiles FOR SELECT USING (public.is_saas_admin());
-
-
---
--- Name: profiles profiles_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_select_own ON public.profiles FOR SELECT USING ((id = auth.uid()));
-
-
---
--- Name: profiles profiles_update_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_update_own ON public.profiles FOR UPDATE USING ((id = auth.uid())) WITH CHECK ((id = auth.uid()));
-
-
---
--- Name: features read features (auth); Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "read features (auth)" ON public.features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plan_features read plan_features (auth); Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "read plan_features (auth)" ON public.plan_features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plans read plans (auth); Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "read plans (auth)" ON public.plans FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: recurrence_exceptions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.recurrence_exceptions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: recurrence_exceptions recurrence_exceptions_tenant; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_exceptions_tenant ON public.recurrence_exceptions TO authenticated USING ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid())))) WITH CHECK ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid()))));
-
-
---
--- Name: recurrence_rule_services; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.recurrence_rule_services ENABLE ROW LEVEL SECURITY;
-
---
--- Name: recurrence_rule_services recurrence_rule_services: clinic read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "recurrence_rule_services: clinic read" ON public.recurrence_rule_services FOR SELECT USING ((EXISTS ( SELECT 1
- FROM public.recurrence_rules r
- WHERE ((r.id = recurrence_rule_services.rule_id) AND public.is_clinic_tenant(r.tenant_id) AND public.is_tenant_member(r.tenant_id) AND public.tenant_has_feature(r.tenant_id, 'agenda.view'::text)))));
-
-
---
--- Name: recurrence_rule_services recurrence_rule_services: clinic write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "recurrence_rule_services: clinic write" ON public.recurrence_rule_services USING ((EXISTS ( SELECT 1
- FROM public.recurrence_rules r
- WHERE ((r.id = recurrence_rule_services.rule_id) AND public.is_clinic_tenant(r.tenant_id) AND public.is_tenant_member(r.tenant_id) AND public.tenant_has_feature(r.tenant_id, 'agenda.edit'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.recurrence_rules r
- WHERE ((r.id = recurrence_rule_services.rule_id) AND public.is_clinic_tenant(r.tenant_id) AND public.is_tenant_member(r.tenant_id) AND public.tenant_has_feature(r.tenant_id, 'agenda.edit'::text)))));
-
-
---
--- Name: recurrence_rule_services recurrence_rule_services: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "recurrence_rule_services: owner full access" ON public.recurrence_rule_services TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.recurrence_rules r
- WHERE ((r.id = recurrence_rule_services.rule_id) AND (r.owner_id = auth.uid()))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.recurrence_rules r
- WHERE ((r.id = recurrence_rule_services.rule_id) AND (r.owner_id = auth.uid())))));
-
-
---
--- Name: recurrence_rules; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.recurrence_rules ENABLE ROW LEVEL SECURITY;
-
---
--- Name: recurrence_rules recurrence_rules_clinic_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_rules_clinic_read ON public.recurrence_rules FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: recurrence_rules recurrence_rules_clinic_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_rules_clinic_write ON public.recurrence_rules USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: recurrence_rules recurrence_rules_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_rules_owner ON public.recurrence_rules TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: subscription_intents_legacy saas_admin can read subscription_intents; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "saas_admin can read subscription_intents" ON public.subscription_intents_legacy FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.saas_admins a
- WHERE (a.user_id = auth.uid()))));
-
-
---
--- Name: subscription_intents_legacy saas_admin can update subscription_intents; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "saas_admin can update subscription_intents" ON public.subscription_intents_legacy FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.saas_admins a
- WHERE (a.user_id = auth.uid())))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.saas_admins a
- WHERE (a.user_id = auth.uid()))));
-
-
---
--- Name: saas_docs saas_admin_full_access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY saas_admin_full_access ON public.saas_docs TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid())))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: saas_admins; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_admins ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_admins saas_admins_select_self; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY saas_admins_select_self ON public.saas_admins FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: saas_doc_votos; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_doc_votos ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_docs; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_docs ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_faq; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_faq ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_faq_itens; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_faq_itens ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_bloqueios select own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "select own" ON public.agenda_bloqueios FOR SELECT USING ((owner_id = auth.uid()));
-
-
---
--- Name: services; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.services ENABLE ROW LEVEL SECURITY;
-
---
--- Name: services services: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "services: owner full access" ON public.services USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: subscription_events; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.subscription_events ENABLE ROW LEVEL SECURITY;
-
---
--- Name: subscription_events subscription_events_read_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_events_read_saas ON public.subscription_events FOR SELECT USING (public.is_saas_admin());
-
-
---
--- Name: subscription_events subscription_events_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_events_write_saas ON public.subscription_events FOR INSERT WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: subscription_intents_legacy subscription_intents_insert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_intents_insert_own ON public.subscription_intents_legacy FOR INSERT TO authenticated WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: subscription_intents_legacy; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.subscription_intents_legacy ENABLE ROW LEVEL SECURITY;
-
---
--- Name: subscription_intents_legacy subscription_intents_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_intents_select_own ON public.subscription_intents_legacy FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: subscriptions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.subscriptions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: subscriptions subscriptions read own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "subscriptions read own" ON public.subscriptions FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: subscriptions subscriptions: read if linked owner_users; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "subscriptions: read if linked owner_users" ON public.subscriptions FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.owner_users ou
- WHERE ((ou.owner_id = subscriptions.user_id) AND (ou.user_id = auth.uid())))));
-
-
---
--- Name: subscriptions subscriptions_insert_own_personal; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_insert_own_personal ON public.subscriptions FOR INSERT TO authenticated WITH CHECK (((user_id = auth.uid()) AND (tenant_id IS NULL)));
-
-
---
--- Name: subscriptions subscriptions_no_direct_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_no_direct_update ON public.subscriptions FOR UPDATE TO authenticated USING (false) WITH CHECK (false);
-
-
---
--- Name: subscriptions subscriptions_read_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_read_own ON public.subscriptions FOR SELECT TO authenticated USING (((user_id = auth.uid()) OR public.is_saas_admin()));
-
-
---
--- Name: subscriptions subscriptions_select_for_tenant_members; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_select_for_tenant_members ON public.subscriptions FOR SELECT TO authenticated USING (((tenant_id IS NOT NULL) AND (EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = subscriptions.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))));
-
-
---
--- Name: subscriptions subscriptions_select_own_personal; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_select_own_personal ON public.subscriptions FOR SELECT TO authenticated USING (((user_id = auth.uid()) AND (tenant_id IS NULL)));
-
-
---
--- Name: subscriptions subscriptions_update_only_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_update_only_saas_admin ON public.subscriptions FOR UPDATE TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: support_sessions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.support_sessions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: support_sessions support_sessions_saas_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY support_sessions_saas_delete ON public.support_sessions FOR DELETE USING (((auth.uid() = admin_id) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = 'saas_admin'::text))))));
-
-
---
--- Name: support_sessions support_sessions_saas_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY support_sessions_saas_insert ON public.support_sessions FOR INSERT WITH CHECK (((auth.uid() = admin_id) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = 'saas_admin'::text))))));
-
-
---
--- Name: support_sessions support_sessions_saas_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY support_sessions_saas_select ON public.support_sessions FOR SELECT USING (((auth.uid() = admin_id) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = 'saas_admin'::text))))));
-
-
---
--- Name: tenant_members; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.tenant_members ENABLE ROW LEVEL SECURITY;
-
---
--- Name: tenant_members tenant_members_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenant_members_write_saas ON public.tenant_members TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: tenant_modules; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.tenant_modules ENABLE ROW LEVEL SECURITY;
-
---
--- Name: tenant_modules tenant_modules_read_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenant_modules_read_own ON public.tenant_modules FOR SELECT TO authenticated USING (((owner_id = auth.uid()) OR public.is_saas_admin()));
-
-
---
--- Name: tenant_modules tenant_modules_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenant_modules_write_saas ON public.tenant_modules TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: tenants; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.tenants ENABLE ROW LEVEL SECURITY;
-
---
--- Name: tenants tenants_read_members; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenants_read_members ON public.tenants FOR SELECT TO authenticated USING ((public.is_saas_admin() OR (EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = tenants.id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))));
-
-
---
--- Name: tenants tenants_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenants_write_saas ON public.tenants TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: tenant_members tm_select_admin_all_members; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tm_select_admin_all_members ON public.tenant_members FOR SELECT TO authenticated USING (public.is_tenant_admin(tenant_id));
-
-
---
--- Name: tenant_members tm_select_own_membership; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tm_select_own_membership ON public.tenant_members FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios update own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "update own" ON public.agenda_bloqueios FOR UPDATE USING ((owner_id = auth.uid()));
-
-
---
--- Name: user_settings; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.user_settings ENABLE ROW LEVEL SECURITY;
-
---
--- Name: user_settings user_settings_insert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY user_settings_insert_own ON public.user_settings FOR INSERT WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: user_settings user_settings_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY user_settings_select_own ON public.user_settings FOR SELECT USING ((user_id = auth.uid()));
-
-
---
--- Name: user_settings user_settings_update_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY user_settings_update_own ON public.user_settings FOR UPDATE USING ((user_id = auth.uid())) WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: saas_docs users_read_usuario_docs; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY users_read_usuario_docs ON public.saas_docs FOR SELECT TO authenticated USING (((ativo = true) AND (tipo_acesso = 'usuario'::text)));
-
-
---
--- Name: saas_doc_votos votos_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY votos_select_own ON public.saas_doc_votos FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: saas_doc_votos votos_upsert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY votos_upsert_own ON public.saas_doc_votos TO authenticated USING ((user_id = auth.uid())) WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: messages; Type: ROW SECURITY; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER TABLE realtime.messages ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects agendador_storage_owner_delete; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_owner_delete ON storage.objects FOR DELETE TO authenticated USING (((bucket_id = 'agendador'::text) AND ((storage.foldername(name))[1] = (auth.uid())::text)));
-
-
---
--- Name: objects agendador_storage_owner_insert; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_owner_insert ON storage.objects FOR INSERT TO authenticated WITH CHECK (((bucket_id = 'agendador'::text) AND ((storage.foldername(name))[1] = (auth.uid())::text)));
-
-
---
--- Name: objects agendador_storage_owner_update; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_owner_update ON storage.objects FOR UPDATE TO authenticated USING (((bucket_id = 'agendador'::text) AND ((storage.foldername(name))[1] = (auth.uid())::text)));
-
-
---
--- Name: objects agendador_storage_public_read; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_public_read ON storage.objects FOR SELECT USING ((bucket_id = 'agendador'::text));
-
-
---
--- Name: objects avatars_delete_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_delete_own ON storage.objects FOR DELETE TO authenticated USING (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_delete_own_folder; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_delete_own_folder ON storage.objects FOR DELETE USING (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text))));
-
-
---
--- Name: objects avatars_insert_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_insert_own ON storage.objects FOR INSERT TO authenticated WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_insert_own_folder; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_insert_own_folder ON storage.objects FOR INSERT WITH CHECK (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text))));
-
-
---
--- Name: objects avatars_read; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_read ON storage.objects FOR SELECT USING ((bucket_id = 'avatars'::text));
-
-
---
--- Name: objects avatars_select_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_select_own ON storage.objects FOR SELECT TO authenticated USING (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_update_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_update_own ON storage.objects FOR UPDATE TO authenticated USING (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text)))) WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_update_own_folder; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_update_own_folder ON storage.objects FOR UPDATE USING (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text)))) WITH CHECK (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text))));
-
-
---
--- Name: buckets; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.buckets ENABLE ROW LEVEL SECURITY;
-
---
--- Name: buckets_analytics; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.buckets_analytics ENABLE ROW LEVEL SECURITY;
-
---
--- Name: buckets_vectors; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.buckets_vectors ENABLE ROW LEVEL SECURITY;
-
---
--- Name: iceberg_namespaces; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.iceberg_namespaces ENABLE ROW LEVEL SECURITY;
-
---
--- Name: iceberg_tables; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.iceberg_tables ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects intake_read_anon; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_read_anon ON storage.objects FOR SELECT TO anon USING (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: objects intake_read_public; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_read_public ON storage.objects FOR SELECT USING (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: objects intake_upload_anon; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_upload_anon ON storage.objects FOR INSERT TO anon WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: objects intake_upload_public; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_upload_public ON storage.objects FOR INSERT WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: migrations; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.migrations ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.objects ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects public_read; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY public_read ON storage.objects FOR SELECT USING ((bucket_id = 'saas-docs'::text));
-
-
---
--- Name: s3_multipart_uploads; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.s3_multipart_uploads ENABLE ROW LEVEL SECURITY;
-
---
--- Name: s3_multipart_uploads_parts; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.s3_multipart_uploads_parts ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects saas_admin_delete; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY saas_admin_delete ON storage.objects FOR DELETE TO authenticated USING (((bucket_id = 'saas-docs'::text) AND (EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid())))));
-
-
---
--- Name: objects saas_admin_upload; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY saas_admin_upload ON storage.objects FOR INSERT TO authenticated WITH CHECK (((bucket_id = 'saas-docs'::text) AND (EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid())))));
-
-
---
--- Name: vector_indexes; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.vector_indexes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: supabase_realtime; Type: PUBLICATION; Schema: -; Owner: postgres
---
-
-CREATE PUBLICATION supabase_realtime WITH (publish = 'insert, update, delete, truncate');
-
-
-ALTER PUBLICATION supabase_realtime OWNER TO postgres;
-
---
--- Name: SCHEMA auth; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA auth TO anon;
-GRANT USAGE ON SCHEMA auth TO authenticated;
-GRANT USAGE ON SCHEMA auth TO service_role;
-GRANT ALL ON SCHEMA auth TO supabase_auth_admin;
-GRANT ALL ON SCHEMA auth TO dashboard_user;
-GRANT USAGE ON SCHEMA auth TO postgres;
-
-
---
--- Name: SCHEMA extensions; Type: ACL; Schema: -; Owner: postgres
---
-
-GRANT USAGE ON SCHEMA extensions TO anon;
-GRANT USAGE ON SCHEMA extensions TO authenticated;
-GRANT USAGE ON SCHEMA extensions TO service_role;
-GRANT ALL ON SCHEMA extensions TO dashboard_user;
-
-
---
--- Name: SCHEMA net; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA net TO supabase_functions_admin;
-GRANT USAGE ON SCHEMA net TO postgres;
-GRANT USAGE ON SCHEMA net TO anon;
-GRANT USAGE ON SCHEMA net TO authenticated;
-GRANT USAGE ON SCHEMA net TO service_role;
-
-
---
--- Name: SCHEMA public; Type: ACL; Schema: -; Owner: pg_database_owner
---
-
-GRANT USAGE ON SCHEMA public TO postgres;
-GRANT USAGE ON SCHEMA public TO anon;
-GRANT USAGE ON SCHEMA public TO authenticated;
-GRANT USAGE ON SCHEMA public TO service_role;
-
-
---
--- Name: SCHEMA realtime; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA realtime TO postgres;
-GRANT USAGE ON SCHEMA realtime TO anon;
-GRANT USAGE ON SCHEMA realtime TO authenticated;
-GRANT USAGE ON SCHEMA realtime TO service_role;
-GRANT ALL ON SCHEMA realtime TO supabase_realtime_admin;
-
-
---
--- Name: SCHEMA storage; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA storage TO postgres WITH GRANT OPTION;
-GRANT USAGE ON SCHEMA storage TO anon;
-GRANT USAGE ON SCHEMA storage TO authenticated;
-GRANT USAGE ON SCHEMA storage TO service_role;
-GRANT ALL ON SCHEMA storage TO supabase_storage_admin WITH GRANT OPTION;
-GRANT ALL ON SCHEMA storage TO dashboard_user;
-
-
---
--- Name: SCHEMA supabase_functions; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA supabase_functions TO postgres;
-GRANT USAGE ON SCHEMA supabase_functions TO anon;
-GRANT USAGE ON SCHEMA supabase_functions TO authenticated;
-GRANT USAGE ON SCHEMA supabase_functions TO service_role;
-GRANT ALL ON SCHEMA supabase_functions TO supabase_functions_admin;
-
-
---
--- Name: SCHEMA vault; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA vault TO postgres WITH GRANT OPTION;
-GRANT USAGE ON SCHEMA vault TO service_role;
-
-
---
--- Name: FUNCTION citextin(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextin(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.citextin(cstring) TO anon;
-GRANT ALL ON FUNCTION public.citextin(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.citextin(cstring) TO service_role;
-
-
---
--- Name: FUNCTION citextout(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citextrecv(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO postgres;
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO anon;
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO service_role;
-
-
---
--- Name: FUNCTION citextsend(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey16_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey16_out(public.gbtreekey16); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey2_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey2_out(public.gbtreekey2); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey32_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey32_out(public.gbtreekey32); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey4_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey4_out(public.gbtreekey4); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey8_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey8_out(public.gbtreekey8); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey_var_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey_var_out(public.gbtreekey_var); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_out(public.gtrgm); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO service_role;
-
-
---
--- Name: FUNCTION citext(boolean); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext(boolean) TO postgres;
-GRANT ALL ON FUNCTION public.citext(boolean) TO anon;
-GRANT ALL ON FUNCTION public.citext(boolean) TO authenticated;
-GRANT ALL ON FUNCTION public.citext(boolean) TO service_role;
-
-
---
--- Name: FUNCTION citext(character); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext(character) TO postgres;
-GRANT ALL ON FUNCTION public.citext(character) TO anon;
-GRANT ALL ON FUNCTION public.citext(character) TO authenticated;
-GRANT ALL ON FUNCTION public.citext(character) TO service_role;
-
-
---
--- Name: FUNCTION citext(inet); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext(inet) TO postgres;
-GRANT ALL ON FUNCTION public.citext(inet) TO anon;
-GRANT ALL ON FUNCTION public.citext(inet) TO authenticated;
-GRANT ALL ON FUNCTION public.citext(inet) TO service_role;
-
-
---
--- Name: FUNCTION email(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.email() TO dashboard_user;
-
-
---
--- Name: FUNCTION jwt(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.jwt() TO postgres;
-GRANT ALL ON FUNCTION auth.jwt() TO dashboard_user;
-
-
---
--- Name: FUNCTION role(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.role() TO dashboard_user;
-
-
---
--- Name: FUNCTION uid(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.uid() TO dashboard_user;
-
-
---
--- Name: FUNCTION armor(bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.armor(bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.armor(bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION armor(bytea, text[], text[]); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.armor(bytea, text[], text[]) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.armor(bytea, text[], text[]) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION crypt(text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.crypt(text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.crypt(text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION dearmor(text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.dearmor(text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.dearmor(text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION decrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.decrypt(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.decrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION decrypt_iv(bytea, bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.decrypt_iv(bytea, bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.decrypt_iv(bytea, bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION digest(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.digest(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.digest(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION digest(text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.digest(text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.digest(text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION encrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.encrypt(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.encrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION encrypt_iv(bytea, bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.encrypt_iv(bytea, bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.encrypt_iv(bytea, bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_random_bytes(integer); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_random_bytes(integer) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_random_bytes(integer) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_random_uuid(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_random_uuid() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_random_uuid() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_salt(text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_salt(text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_salt(text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_salt(text, integer); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_salt(text, integer) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_salt(text, integer) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION grant_pg_cron_access(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION extensions.grant_pg_cron_access() FROM supabase_admin;
-GRANT ALL ON FUNCTION extensions.grant_pg_cron_access() TO supabase_admin WITH GRANT OPTION;
-GRANT ALL ON FUNCTION extensions.grant_pg_cron_access() TO dashboard_user;
-
-
---
--- Name: FUNCTION grant_pg_graphql_access(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.grant_pg_graphql_access() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION grant_pg_net_access(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION extensions.grant_pg_net_access() FROM supabase_admin;
-GRANT ALL ON FUNCTION extensions.grant_pg_net_access() TO supabase_admin WITH GRANT OPTION;
-GRANT ALL ON FUNCTION extensions.grant_pg_net_access() TO dashboard_user;
-
-
---
--- Name: FUNCTION hmac(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.hmac(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.hmac(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION hmac(text, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.hmac(text, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.hmac(text, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pg_stat_statements(showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT shared_blk_read_time double precision, OUT shared_blk_write_time double precision, OUT local_blk_read_time double precision, OUT local_blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision, OUT jit_deform_count bigint, OUT jit_deform_time double precision, OUT stats_since timestamp with time zone, OUT minmax_stats_since timestamp with time zone); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pg_stat_statements(showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT shared_blk_read_time double precision, OUT shared_blk_write_time double precision, OUT local_blk_read_time double precision, OUT local_blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision, OUT jit_deform_count bigint, OUT jit_deform_time double precision, OUT stats_since timestamp with time zone, OUT minmax_stats_since timestamp with time zone) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pg_stat_statements_info(OUT dealloc bigint, OUT stats_reset timestamp with time zone); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pg_stat_statements_info(OUT dealloc bigint, OUT stats_reset timestamp with time zone) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pg_stat_statements_reset(userid oid, dbid oid, queryid bigint, minmax_only boolean); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pg_stat_statements_reset(userid oid, dbid oid, queryid bigint, minmax_only boolean) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_armor_headers(text, OUT key text, OUT value text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_armor_headers(text, OUT key text, OUT value text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_armor_headers(text, OUT key text, OUT value text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_key_id(bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_key_id(bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_key_id(bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt(bytea, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt(bytea, bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt(text, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt(text, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt_bytea(bytea, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt_bytea(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt(bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt_bytea(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt_bytea(bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt(text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt(text, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt_bytea(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt_bytea(bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgrst_ddl_watch(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgrst_ddl_watch() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgrst_drop_watch(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgrst_drop_watch() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION set_graphql_placeholder(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.set_graphql_placeholder() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v1(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v1mc(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1mc() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1mc() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v3(namespace uuid, name text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v3(namespace uuid, name text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v3(namespace uuid, name text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v4(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v4() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v4() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v5(namespace uuid, name text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v5(namespace uuid, name text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v5(namespace uuid, name text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_nil(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_nil() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_nil() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_dns(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_dns() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_dns() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_oid(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_oid() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_oid() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_url(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_url() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_url() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_x500(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_x500() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_x500() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION graphql("operationName" text, query text, variables jsonb, extensions jsonb); Type: ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO postgres;
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO anon;
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO authenticated;
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO service_role;
-
-
---
--- Name: FUNCTION http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer); Type: ACL; Schema: net; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO postgres;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO anon;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO authenticated;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO service_role;
-
-
---
--- Name: FUNCTION http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer); Type: ACL; Schema: net; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO postgres;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO anon;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO authenticated;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO service_role;
-
-
---
--- Name: FUNCTION pg_reload_conf(); Type: ACL; Schema: pg_catalog; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION pg_catalog.pg_reload_conf() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION get_auth(p_usename text); Type: ACL; Schema: pgbouncer; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION pgbouncer.get_auth(p_usename text) FROM PUBLIC;
-GRANT ALL ON FUNCTION pgbouncer.get_auth(p_usename text) TO pgbouncer;
-
-
---
--- Name: FUNCTION __rls_ping(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.__rls_ping() TO postgres;
-GRANT ALL ON FUNCTION public.__rls_ping() TO anon;
-GRANT ALL ON FUNCTION public.__rls_ping() TO authenticated;
-GRANT ALL ON FUNCTION public.__rls_ping() TO service_role;
-
-
---
--- Name: TABLE subscriptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscriptions TO postgres;
-GRANT ALL ON TABLE public.subscriptions TO anon;
-GRANT ALL ON TABLE public.subscriptions TO authenticated;
-GRANT ALL ON TABLE public.subscriptions TO service_role;
-
-
---
--- Name: FUNCTION activate_subscription_from_intent(p_intent_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION admin_fix_plan_target(p_plan_key text, p_new_target text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) FROM PUBLIC;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO postgres;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO anon;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO authenticated;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO service_role;
-
-
---
--- Name: FUNCTION agenda_cfg_sync(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO postgres;
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO anon;
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO authenticated;
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO service_role;
-
-
---
--- Name: FUNCTION agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO postgres;
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO anon;
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO authenticated;
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO service_role;
-
-
---
--- Name: FUNCTION agendador_gerar_slug(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO postgres;
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO anon;
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO authenticated;
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO service_role;
-
-
---
--- Name: FUNCTION agendador_slots_disponiveis(p_slug text, p_data date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO postgres;
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO anon;
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO authenticated;
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO service_role;
-
-
---
--- Name: FUNCTION cancel_recurrence_from(p_recurrence_id uuid, p_from_date date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO postgres;
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO anon;
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO authenticated;
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO service_role;
-
-
---
--- Name: FUNCTION cancel_subscription(p_subscription_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO postgres;
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO anon;
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO service_role;
-
-
---
--- Name: FUNCTION cash_dist(money, money); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO postgres;
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO anon;
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO authenticated;
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO service_role;
-
-
---
--- Name: FUNCTION change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION citext_cmp(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_eq(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_ge(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_gt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_hash(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_hash_extended(public.citext, bigint); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO postgres;
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO anon;
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO service_role;
-
-
---
--- Name: FUNCTION citext_larger(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_le(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_lt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_ne(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_cmp(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_ge(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_gt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_le(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_lt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_smaller(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION create_clinic_tenant(p_name text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO postgres;
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO anon;
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO authenticated;
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO service_role;
-
-
---
--- Name: FUNCTION create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO postgres;
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO anon;
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO authenticated;
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO service_role;
-
-
---
--- Name: FUNCTION create_patient_intake_request_v2(p_token text, p_payload jsonb); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) FROM PUBLIC;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO postgres;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO anon;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO authenticated;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO service_role;
-
-
---
--- Name: FUNCTION create_support_session(p_tenant_id uuid, p_ttl_minutes integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO postgres;
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO anon;
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO authenticated;
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO service_role;
-
-
---
--- Name: FUNCTION current_member_id(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION current_member_role(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION date_dist(date, date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO postgres;
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO anon;
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO authenticated;
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO service_role;
-
-
---
--- Name: FUNCTION delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid); Type: ACL; Schema: public; Owner: postgres
---
-
-GRANT ALL ON FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION dev_list_auth_users(p_limit integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO postgres;
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO anon;
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO authenticated;
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO service_role;
-
-
---
--- Name: FUNCTION dev_list_custom_users(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.dev_list_custom_users() FROM PUBLIC;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO postgres;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO anon;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO authenticated;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO service_role;
-
-
---
--- Name: FUNCTION dev_list_intent_leads(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.dev_list_intent_leads() FROM PUBLIC;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO postgres;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO anon;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO authenticated;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO service_role;
-
-
---
--- Name: FUNCTION dev_public_debug_snapshot(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO postgres;
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO anon;
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO authenticated;
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO service_role;
-
-
---
--- Name: FUNCTION ensure_personal_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO anon;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO service_role;
-
-
---
--- Name: FUNCTION ensure_personal_tenant_for_user(p_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION faq_votar(faq_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION fix_all_subscription_mismatches(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO postgres;
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO anon;
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO authenticated;
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO service_role;
-
-
---
--- Name: FUNCTION float4_dist(real, real); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO postgres;
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO anon;
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO authenticated;
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO service_role;
-
-
---
--- Name: FUNCTION float8_dist(double precision, double precision); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO postgres;
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO anon;
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO authenticated;
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO service_role;
-
-
---
--- Name: FUNCTION fn_agenda_regras_semanais_no_overlap(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO postgres;
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO anon;
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO authenticated;
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_consistent(internal, bit, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_consistent(internal, boolean, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bpchar_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bpchar_consistent(internal, character, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_consistent(internal, bytea, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_consistent(internal, money, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_distance(internal, money, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_consistent(internal, date, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_distance(internal, date, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_consistent(internal, anyenum, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_consistent(internal, real, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_distance(internal, real, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_consistent(internal, double precision, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_distance(internal, double precision, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_consistent(internal, inet, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_consistent(internal, smallint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_distance(internal, smallint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_consistent(internal, integer, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_distance(internal, integer, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_consistent(internal, bigint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_distance(internal, bigint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_consistent(internal, interval, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_distance(internal, interval, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_consistent(internal, macaddr, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_consistent(internal, numeric, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_consistent(internal, oid, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_distance(internal, oid, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_consistent(internal, text, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_consistent(internal, time without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_distance(internal, time without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_timetz_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_tstz_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_consistent(internal, uuid, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_var_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_var_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION get_my_email(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.get_my_email() FROM PUBLIC;
-GRANT ALL ON FUNCTION public.get_my_email() TO postgres;
-GRANT ALL ON FUNCTION public.get_my_email() TO anon;
-GRANT ALL ON FUNCTION public.get_my_email() TO authenticated;
-GRANT ALL ON FUNCTION public.get_my_email() TO service_role;
-
-
---
--- Name: FUNCTION gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gin_extract_value_trgm(text, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO service_role;
-
-
---
--- Name: FUNCTION gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_consistent(internal, text, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_distance(internal, text, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_options(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_same(public.gtrgm, public.gtrgm, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION guard_account_type_immutable(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO postgres;
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO anon;
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO service_role;
-
-
---
--- Name: FUNCTION guard_locked_commitment(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO postgres;
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO anon;
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO service_role;
-
-
---
--- Name: FUNCTION guard_no_change_core_plan_key(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO postgres;
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO anon;
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO service_role;
-
-
---
--- Name: FUNCTION guard_no_change_plan_target(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO postgres;
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO anon;
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO service_role;
-
-
---
--- Name: FUNCTION guard_no_delete_core_plans(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO postgres;
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO anon;
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO service_role;
-
-
---
--- Name: FUNCTION guard_patient_cannot_own_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO anon;
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO service_role;
-
-
---
--- Name: FUNCTION guard_tenant_kind_immutable(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO postgres;
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO anon;
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO service_role;
-
-
---
--- Name: FUNCTION handle_new_user(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.handle_new_user() TO postgres;
-GRANT ALL ON FUNCTION public.handle_new_user() TO anon;
-GRANT ALL ON FUNCTION public.handle_new_user() TO authenticated;
-GRANT ALL ON FUNCTION public.handle_new_user() TO service_role;
-
-
---
--- Name: FUNCTION handle_new_user_create_personal_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO anon;
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO service_role;
-
-
---
--- Name: FUNCTION has_feature(p_owner_id uuid, p_feature_key text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO postgres;
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO anon;
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO authenticated;
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO service_role;
-
-
---
--- Name: FUNCTION int2_dist(smallint, smallint); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO postgres;
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO anon;
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO authenticated;
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO service_role;
-
-
---
--- Name: FUNCTION int4_dist(integer, integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO postgres;
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO anon;
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO authenticated;
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO service_role;
-
-
---
--- Name: FUNCTION int8_dist(bigint, bigint); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO postgres;
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO anon;
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO authenticated;
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO service_role;
-
-
---
--- Name: FUNCTION interval_dist(interval, interval); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO postgres;
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO anon;
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO authenticated;
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO service_role;
-
-
---
--- Name: FUNCTION is_clinic_tenant(_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION is_saas_admin(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_saas_admin() TO postgres;
-GRANT ALL ON FUNCTION public.is_saas_admin() TO anon;
-GRANT ALL ON FUNCTION public.is_saas_admin() TO authenticated;
-GRANT ALL ON FUNCTION public.is_saas_admin() TO service_role;
-
-
---
--- Name: FUNCTION is_tenant_admin(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION is_tenant_member(_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION is_therapist_tenant(_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION jwt_email(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.jwt_email() TO postgres;
-GRANT ALL ON FUNCTION public.jwt_email() TO anon;
-GRANT ALL ON FUNCTION public.jwt_email() TO authenticated;
-GRANT ALL ON FUNCTION public.jwt_email() TO service_role;
-
-
---
--- Name: FUNCTION my_tenants(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.my_tenants() TO postgres;
-GRANT ALL ON FUNCTION public.my_tenants() TO anon;
-GRANT ALL ON FUNCTION public.my_tenants() TO authenticated;
-GRANT ALL ON FUNCTION public.my_tenants() TO service_role;
-
-
---
--- Name: FUNCTION oid_dist(oid, oid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO postgres;
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO anon;
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO authenticated;
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO service_role;
-
-
---
--- Name: FUNCTION on_new_user_seed_patient_groups(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO postgres;
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO anon;
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO authenticated;
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO service_role;
-
-
---
--- Name: FUNCTION patients_validate_member_consistency(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO postgres;
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO anon;
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO authenticated;
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO service_role;
-
-
---
--- Name: FUNCTION patients_validate_responsible_member_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO anon;
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO service_role;
-
-
---
--- Name: FUNCTION prevent_promoting_to_system(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO postgres;
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO anon;
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO authenticated;
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO service_role;
-
-
---
--- Name: FUNCTION prevent_saas_membership(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO postgres;
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO anon;
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO authenticated;
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO service_role;
-
-
---
--- Name: FUNCTION prevent_system_group_changes(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO postgres;
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO anon;
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO authenticated;
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO service_role;
-
-
---
--- Name: FUNCTION provision_account_tenant(p_user_id uuid, p_kind text, p_name text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO postgres;
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO anon;
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO authenticated;
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO service_role;
-
-
---
--- Name: FUNCTION reactivate_subscription(p_subscription_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION rebuild_owner_entitlements(p_owner_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION regexp_match(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_match(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_matches(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_matches(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_replace(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_replace(public.citext, public.citext, text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_array(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_array(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_table(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_table(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION replace(public.citext, public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION revoke_support_session(p_token text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO postgres;
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO anon;
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO authenticated;
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO service_role;
-
-
---
--- Name: FUNCTION rotate_patient_invite_token(p_new_token text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO postgres;
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO anon;
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO authenticated;
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO service_role;
-
-
---
--- Name: FUNCTION saas_votar_doc(p_doc_id uuid, p_util boolean); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO postgres;
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO anon;
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO authenticated;
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO service_role;
-
-
---
--- Name: FUNCTION seed_determined_commitments(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION set_insurance_plans_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_insurance_plans_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.set_insurance_plans_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.set_insurance_plans_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.set_insurance_plans_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION set_limit(real); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_limit(real) TO postgres;
-GRANT ALL ON FUNCTION public.set_limit(real) TO anon;
-GRANT ALL ON FUNCTION public.set_limit(real) TO authenticated;
-GRANT ALL ON FUNCTION public.set_limit(real) TO service_role;
-
-
---
--- Name: FUNCTION set_owner_id(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_owner_id() TO postgres;
-GRANT ALL ON FUNCTION public.set_owner_id() TO anon;
-GRANT ALL ON FUNCTION public.set_owner_id() TO authenticated;
-GRANT ALL ON FUNCTION public.set_owner_id() TO service_role;
-
-
---
--- Name: FUNCTION set_services_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_services_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.set_services_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.set_services_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.set_services_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO postgres;
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO anon;
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO authenticated;
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO service_role;
-
-
---
--- Name: FUNCTION set_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.set_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.set_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.set_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION set_updated_at_recurrence(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO postgres;
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO anon;
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO authenticated;
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO service_role;
-
-
---
--- Name: FUNCTION show_limit(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.show_limit() TO postgres;
-GRANT ALL ON FUNCTION public.show_limit() TO anon;
-GRANT ALL ON FUNCTION public.show_limit() TO authenticated;
-GRANT ALL ON FUNCTION public.show_limit() TO service_role;
-
-
---
--- Name: FUNCTION show_trgm(text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.show_trgm(text) TO postgres;
-GRANT ALL ON FUNCTION public.show_trgm(text) TO anon;
-GRANT ALL ON FUNCTION public.show_trgm(text) TO authenticated;
-GRANT ALL ON FUNCTION public.show_trgm(text) TO service_role;
-
-
---
--- Name: FUNCTION similarity(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.similarity(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.similarity(text, text) TO anon;
-GRANT ALL ON FUNCTION public.similarity(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.similarity(text, text) TO service_role;
-
-
---
--- Name: FUNCTION similarity_dist(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO anon;
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO service_role;
-
-
---
--- Name: FUNCTION similarity_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION split_part(public.citext, public.citext, integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO postgres;
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO anon;
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO authenticated;
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO service_role;
-
-
---
--- Name: FUNCTION split_recurrence_at(p_recurrence_id uuid, p_from_date date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO postgres;
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO anon;
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO authenticated;
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_dist_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_dist_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strpos(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION subscription_intents_view_insert(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO postgres;
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO anon;
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO authenticated;
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO service_role;
-
-
---
--- Name: FUNCTION subscriptions_validate_scope(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO postgres;
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO anon;
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO authenticated;
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO service_role;
-
-
---
--- Name: FUNCTION sync_busy_mirror_agenda_eventos(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO postgres;
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO anon;
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO authenticated;
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO service_role;
-
-
---
--- Name: FUNCTION tenant_accept_invite(p_token uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO service_role;
-
-
---
--- Name: TABLE tenant_members; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_members TO postgres;
-GRANT SELECT,REFERENCES,TRIGGER,TRUNCATE,MAINTAIN ON TABLE public.tenant_members TO authenticated;
-GRANT ALL ON TABLE public.tenant_members TO service_role;
-
-
---
--- Name: FUNCTION tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_feature_allowed(p_tenant_id uuid, p_feature_key text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_feature_enabled(p_tenant_id uuid, p_feature_key text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_features_guard_with_plan(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO postgres;
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO anon;
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO service_role;
-
-
---
--- Name: FUNCTION tenant_has_feature(_tenant_id uuid, _feature text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) FROM PUBLIC;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO service_role;
-
-
---
--- Name: FUNCTION texticlike(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticlike(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION texticnlike(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticnlike(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION texticregexeq(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticregexeq(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION texticregexne(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticregexne(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION time_dist(time without time zone, time without time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO postgres;
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO anon;
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO service_role;
-
-
---
--- Name: FUNCTION toggle_plan(owner uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO postgres;
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO anon;
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO service_role;
-
-
---
--- Name: FUNCTION transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO postgres;
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO anon;
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO authenticated;
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO service_role;
-
-
---
--- Name: FUNCTION translate(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION ts_dist(timestamp without time zone, timestamp without time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO postgres;
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO anon;
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO service_role;
-
-
---
--- Name: FUNCTION tstz_dist(timestamp with time zone, timestamp with time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO postgres;
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO anon;
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO service_role;
-
-
---
--- Name: FUNCTION update_payment_settings_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION update_professional_pricing_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION user_has_feature(_user_id uuid, _feature text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO postgres;
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO anon;
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO authenticated;
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO service_role;
-
-
---
--- Name: FUNCTION validate_support_session(p_token text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO postgres;
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO anon;
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO authenticated;
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO service_role;
-
-
---
--- Name: FUNCTION whoami(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.whoami() TO postgres;
-GRANT ALL ON FUNCTION public.whoami() TO anon;
-GRANT ALL ON FUNCTION public.whoami() TO authenticated;
-GRANT ALL ON FUNCTION public.whoami() TO service_role;
-
-
---
--- Name: FUNCTION word_similarity(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_dist_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_dist_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION apply_rls(wal jsonb, max_record_bytes integer); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO postgres;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO anon;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO authenticated;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO service_role;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text) TO postgres;
-GRANT ALL ON FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text) TO dashboard_user;
-
-
---
--- Name: FUNCTION build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO postgres;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO anon;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO authenticated;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO service_role;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION "cast"(val text, type_ regtype); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO postgres;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO anon;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO authenticated;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO service_role;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO postgres;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO anon;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO authenticated;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO service_role;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO postgres;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO anon;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO authenticated;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO service_role;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO postgres;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO anon;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO authenticated;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO service_role;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION quote_wal2json(entity regclass); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO postgres;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO anon;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO authenticated;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO service_role;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION send(payload jsonb, event text, topic text, private boolean); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean) TO postgres;
-GRANT ALL ON FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean) TO dashboard_user;
-
-
---
--- Name: FUNCTION subscription_check_filters(); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO postgres;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO anon;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO authenticated;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO service_role;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION to_regrole(role_name text); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO postgres;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO anon;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO authenticated;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO service_role;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION topic(); Type: ACL; Schema: realtime; Owner: supabase_realtime_admin
---
-
-GRANT ALL ON FUNCTION realtime.topic() TO postgres;
-GRANT ALL ON FUNCTION realtime.topic() TO dashboard_user;
-
-
---
--- Name: FUNCTION http_request(); Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-REVOKE ALL ON FUNCTION supabase_functions.http_request() FROM PUBLIC;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO postgres;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO anon;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO authenticated;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO service_role;
-
-
---
--- Name: FUNCTION _crypto_aead_det_decrypt(message bytea, additional bytea, key_id bigint, context bytea, nonce bytea); Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION vault._crypto_aead_det_decrypt(message bytea, additional bytea, key_id bigint, context bytea, nonce bytea) TO postgres WITH GRANT OPTION;
-GRANT ALL ON FUNCTION vault._crypto_aead_det_decrypt(message bytea, additional bytea, key_id bigint, context bytea, nonce bytea) TO service_role;
-
-
---
--- Name: FUNCTION create_secret(new_secret text, new_name text, new_description text, new_key_id uuid); Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION vault.create_secret(new_secret text, new_name text, new_description text, new_key_id uuid) TO postgres WITH GRANT OPTION;
-GRANT ALL ON FUNCTION vault.create_secret(new_secret text, new_name text, new_description text, new_key_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION update_secret(secret_id uuid, new_secret text, new_name text, new_description text, new_key_id uuid); Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION vault.update_secret(secret_id uuid, new_secret text, new_name text, new_description text, new_key_id uuid) TO postgres WITH GRANT OPTION;
-GRANT ALL ON FUNCTION vault.update_secret(secret_id uuid, new_secret text, new_name text, new_description text, new_key_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION max(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.max(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.max(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.max(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.max(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION min(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.min(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.min(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.min(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.min(public.citext) TO service_role;
-
-
---
--- Name: TABLE audit_log_entries; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.audit_log_entries TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.audit_log_entries TO postgres;
-GRANT SELECT ON TABLE auth.audit_log_entries TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE flow_state; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.flow_state TO postgres;
-GRANT SELECT ON TABLE auth.flow_state TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.flow_state TO dashboard_user;
-
-
---
--- Name: TABLE identities; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.identities TO postgres;
-GRANT SELECT ON TABLE auth.identities TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.identities TO dashboard_user;
-
-
---
--- Name: TABLE instances; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.instances TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.instances TO postgres;
-GRANT SELECT ON TABLE auth.instances TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE mfa_amr_claims; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.mfa_amr_claims TO postgres;
-GRANT SELECT ON TABLE auth.mfa_amr_claims TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.mfa_amr_claims TO dashboard_user;
-
-
---
--- Name: TABLE mfa_challenges; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.mfa_challenges TO postgres;
-GRANT SELECT ON TABLE auth.mfa_challenges TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.mfa_challenges TO dashboard_user;
-
-
---
--- Name: TABLE mfa_factors; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.mfa_factors TO postgres;
-GRANT SELECT ON TABLE auth.mfa_factors TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.mfa_factors TO dashboard_user;
-
-
---
--- Name: TABLE oauth_authorizations; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_authorizations TO postgres;
-GRANT ALL ON TABLE auth.oauth_authorizations TO dashboard_user;
-
-
---
--- Name: TABLE oauth_client_states; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_client_states TO postgres;
-GRANT ALL ON TABLE auth.oauth_client_states TO dashboard_user;
-
-
---
--- Name: TABLE oauth_clients; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_clients TO postgres;
-GRANT ALL ON TABLE auth.oauth_clients TO dashboard_user;
-
-
---
--- Name: TABLE oauth_consents; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_consents TO postgres;
-GRANT ALL ON TABLE auth.oauth_consents TO dashboard_user;
-
-
---
--- Name: TABLE one_time_tokens; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.one_time_tokens TO postgres;
-GRANT SELECT ON TABLE auth.one_time_tokens TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.one_time_tokens TO dashboard_user;
-
-
---
--- Name: TABLE refresh_tokens; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.refresh_tokens TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.refresh_tokens TO postgres;
-GRANT SELECT ON TABLE auth.refresh_tokens TO postgres WITH GRANT OPTION;
-
-
---
--- Name: SEQUENCE refresh_tokens_id_seq; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON SEQUENCE auth.refresh_tokens_id_seq TO dashboard_user;
-GRANT ALL ON SEQUENCE auth.refresh_tokens_id_seq TO postgres;
-
-
---
--- Name: TABLE saml_providers; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.saml_providers TO postgres;
-GRANT SELECT ON TABLE auth.saml_providers TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.saml_providers TO dashboard_user;
-
-
---
--- Name: TABLE saml_relay_states; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.saml_relay_states TO postgres;
-GRANT SELECT ON TABLE auth.saml_relay_states TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.saml_relay_states TO dashboard_user;
-
-
---
--- Name: TABLE schema_migrations; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT SELECT ON TABLE auth.schema_migrations TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE sessions; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.sessions TO postgres;
-GRANT SELECT ON TABLE auth.sessions TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.sessions TO dashboard_user;
-
-
---
--- Name: TABLE sso_domains; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.sso_domains TO postgres;
-GRANT SELECT ON TABLE auth.sso_domains TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.sso_domains TO dashboard_user;
-
-
---
--- Name: TABLE sso_providers; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.sso_providers TO postgres;
-GRANT SELECT ON TABLE auth.sso_providers TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.sso_providers TO dashboard_user;
-
-
---
--- Name: TABLE users; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.users TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.users TO postgres;
-GRANT SELECT ON TABLE auth.users TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE pg_stat_statements; Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE extensions.pg_stat_statements TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE pg_stat_statements_info; Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE extensions.pg_stat_statements_info TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE agenda_bloqueios; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_bloqueios TO postgres;
-GRANT ALL ON TABLE public.agenda_bloqueios TO anon;
-GRANT ALL ON TABLE public.agenda_bloqueios TO authenticated;
-GRANT ALL ON TABLE public.agenda_bloqueios TO service_role;
-
-
---
--- Name: TABLE agenda_configuracoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_configuracoes TO postgres;
-GRANT ALL ON TABLE public.agenda_configuracoes TO anon;
-GRANT ALL ON TABLE public.agenda_configuracoes TO authenticated;
-GRANT ALL ON TABLE public.agenda_configuracoes TO service_role;
-
-
---
--- Name: TABLE agenda_eventos; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_eventos TO postgres;
-GRANT ALL ON TABLE public.agenda_eventos TO anon;
-GRANT ALL ON TABLE public.agenda_eventos TO authenticated;
-GRANT ALL ON TABLE public.agenda_eventos TO service_role;
-
-
---
--- Name: TABLE agenda_excecoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_excecoes TO postgres;
-GRANT ALL ON TABLE public.agenda_excecoes TO anon;
-GRANT ALL ON TABLE public.agenda_excecoes TO authenticated;
-GRANT ALL ON TABLE public.agenda_excecoes TO service_role;
-
-
---
--- Name: TABLE agenda_online_slots; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_online_slots TO postgres;
-GRANT ALL ON TABLE public.agenda_online_slots TO anon;
-GRANT ALL ON TABLE public.agenda_online_slots TO authenticated;
-GRANT ALL ON TABLE public.agenda_online_slots TO service_role;
-
-
---
--- Name: SEQUENCE agenda_online_slots_id_seq; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO postgres;
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO anon;
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO authenticated;
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO service_role;
-
-
---
--- Name: TABLE agenda_regras_semanais; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_regras_semanais TO postgres;
-GRANT ALL ON TABLE public.agenda_regras_semanais TO anon;
-GRANT ALL ON TABLE public.agenda_regras_semanais TO authenticated;
-GRANT ALL ON TABLE public.agenda_regras_semanais TO service_role;
-
-
---
--- Name: TABLE agenda_slots_bloqueados_semanais; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO postgres;
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO anon;
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO authenticated;
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO service_role;
-
-
---
--- Name: TABLE agenda_slots_regras; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_slots_regras TO postgres;
-GRANT ALL ON TABLE public.agenda_slots_regras TO anon;
-GRANT ALL ON TABLE public.agenda_slots_regras TO authenticated;
-GRANT ALL ON TABLE public.agenda_slots_regras TO service_role;
-
-
---
--- Name: TABLE agendador_configuracoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agendador_configuracoes TO postgres;
-GRANT ALL ON TABLE public.agendador_configuracoes TO anon;
-GRANT ALL ON TABLE public.agendador_configuracoes TO authenticated;
-GRANT ALL ON TABLE public.agendador_configuracoes TO service_role;
-
-
---
--- Name: TABLE agendador_solicitacoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agendador_solicitacoes TO postgres;
-GRANT ALL ON TABLE public.agendador_solicitacoes TO anon;
-GRANT ALL ON TABLE public.agendador_solicitacoes TO authenticated;
-GRANT ALL ON TABLE public.agendador_solicitacoes TO service_role;
-
-
---
--- Name: TABLE billing_contracts; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.billing_contracts TO postgres;
-GRANT ALL ON TABLE public.billing_contracts TO anon;
-GRANT ALL ON TABLE public.billing_contracts TO authenticated;
-GRANT ALL ON TABLE public.billing_contracts TO service_role;
-
-
---
--- Name: TABLE commitment_services; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.commitment_services TO postgres;
-GRANT ALL ON TABLE public.commitment_services TO anon;
-GRANT ALL ON TABLE public.commitment_services TO authenticated;
-GRANT ALL ON TABLE public.commitment_services TO service_role;
-
-
---
--- Name: TABLE commitment_time_logs; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.commitment_time_logs TO postgres;
-GRANT ALL ON TABLE public.commitment_time_logs TO anon;
-GRANT ALL ON TABLE public.commitment_time_logs TO authenticated;
-GRANT ALL ON TABLE public.commitment_time_logs TO service_role;
-
-
---
--- Name: TABLE current_tenant_id; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.current_tenant_id TO postgres;
-GRANT ALL ON TABLE public.current_tenant_id TO anon;
-GRANT ALL ON TABLE public.current_tenant_id TO authenticated;
-GRANT ALL ON TABLE public.current_tenant_id TO service_role;
-
-
---
--- Name: TABLE determined_commitment_fields; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.determined_commitment_fields TO postgres;
-GRANT ALL ON TABLE public.determined_commitment_fields TO anon;
-GRANT ALL ON TABLE public.determined_commitment_fields TO authenticated;
-GRANT ALL ON TABLE public.determined_commitment_fields TO service_role;
-
-
---
--- Name: TABLE determined_commitments; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.determined_commitments TO postgres;
-GRANT ALL ON TABLE public.determined_commitments TO anon;
-GRANT ALL ON TABLE public.determined_commitments TO authenticated;
-GRANT ALL ON TABLE public.determined_commitments TO service_role;
-
-
---
--- Name: TABLE dev_user_credentials; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.dev_user_credentials TO postgres;
-GRANT ALL ON TABLE public.dev_user_credentials TO anon;
-GRANT ALL ON TABLE public.dev_user_credentials TO authenticated;
-GRANT ALL ON TABLE public.dev_user_credentials TO service_role;
-
-
---
--- Name: TABLE entitlements_invalidation; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.entitlements_invalidation TO postgres;
-GRANT ALL ON TABLE public.entitlements_invalidation TO anon;
-GRANT ALL ON TABLE public.entitlements_invalidation TO authenticated;
-GRANT ALL ON TABLE public.entitlements_invalidation TO service_role;
-
-
---
--- Name: TABLE features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.features TO postgres;
-GRANT ALL ON TABLE public.features TO anon;
-GRANT ALL ON TABLE public.features TO authenticated;
-GRANT ALL ON TABLE public.features TO service_role;
-
-
---
--- Name: TABLE feriados; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.feriados TO postgres;
-GRANT ALL ON TABLE public.feriados TO anon;
-GRANT ALL ON TABLE public.feriados TO authenticated;
-GRANT ALL ON TABLE public.feriados TO service_role;
-
-
---
--- Name: TABLE financial_exceptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.financial_exceptions TO postgres;
-GRANT ALL ON TABLE public.financial_exceptions TO anon;
-GRANT ALL ON TABLE public.financial_exceptions TO authenticated;
-GRANT ALL ON TABLE public.financial_exceptions TO service_role;
-
-
---
--- Name: TABLE insurance_plan_services; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.insurance_plan_services TO postgres;
-GRANT ALL ON TABLE public.insurance_plan_services TO anon;
-GRANT ALL ON TABLE public.insurance_plan_services TO authenticated;
-GRANT ALL ON TABLE public.insurance_plan_services TO service_role;
-
-
---
--- Name: TABLE insurance_plans; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.insurance_plans TO postgres;
-GRANT ALL ON TABLE public.insurance_plans TO anon;
-GRANT ALL ON TABLE public.insurance_plans TO authenticated;
-GRANT ALL ON TABLE public.insurance_plans TO service_role;
-
-
---
--- Name: TABLE module_features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.module_features TO postgres;
-GRANT ALL ON TABLE public.module_features TO anon;
-GRANT ALL ON TABLE public.module_features TO authenticated;
-GRANT ALL ON TABLE public.module_features TO service_role;
-
-
---
--- Name: TABLE modules; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.modules TO postgres;
-GRANT ALL ON TABLE public.modules TO anon;
-GRANT ALL ON TABLE public.modules TO authenticated;
-GRANT ALL ON TABLE public.modules TO service_role;
-
-
---
--- Name: TABLE plan_features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_features TO postgres;
-GRANT ALL ON TABLE public.plan_features TO anon;
-GRANT ALL ON TABLE public.plan_features TO authenticated;
-GRANT ALL ON TABLE public.plan_features TO service_role;
-
-
---
--- Name: TABLE tenant_modules; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_modules TO postgres;
-GRANT ALL ON TABLE public.tenant_modules TO anon;
-GRANT ALL ON TABLE public.tenant_modules TO authenticated;
-GRANT ALL ON TABLE public.tenant_modules TO service_role;
-
-
---
--- Name: TABLE owner_feature_entitlements; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.owner_feature_entitlements TO postgres;
-GRANT ALL ON TABLE public.owner_feature_entitlements TO anon;
-GRANT ALL ON TABLE public.owner_feature_entitlements TO authenticated;
-GRANT ALL ON TABLE public.owner_feature_entitlements TO service_role;
-
-
---
--- Name: TABLE owner_users; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.owner_users TO postgres;
-GRANT ALL ON TABLE public.owner_users TO anon;
-GRANT ALL ON TABLE public.owner_users TO authenticated;
-GRANT ALL ON TABLE public.owner_users TO service_role;
-
-
---
--- Name: TABLE patient_discounts; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_discounts TO postgres;
-GRANT ALL ON TABLE public.patient_discounts TO anon;
-GRANT ALL ON TABLE public.patient_discounts TO authenticated;
-GRANT ALL ON TABLE public.patient_discounts TO service_role;
-
-
---
--- Name: TABLE patient_group_patient; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_group_patient TO postgres;
-GRANT ALL ON TABLE public.patient_group_patient TO anon;
-GRANT ALL ON TABLE public.patient_group_patient TO authenticated;
-GRANT ALL ON TABLE public.patient_group_patient TO service_role;
-
-
---
--- Name: TABLE patient_groups; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_groups TO postgres;
-GRANT ALL ON TABLE public.patient_groups TO anon;
-GRANT ALL ON TABLE public.patient_groups TO authenticated;
-GRANT ALL ON TABLE public.patient_groups TO service_role;
-
-
---
--- Name: TABLE patient_intake_requests; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_intake_requests TO postgres;
-GRANT ALL ON TABLE public.patient_intake_requests TO authenticated;
-GRANT ALL ON TABLE public.patient_intake_requests TO service_role;
-
-
---
--- Name: TABLE patient_invites; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_invites TO postgres;
-GRANT ALL ON TABLE public.patient_invites TO authenticated;
-GRANT ALL ON TABLE public.patient_invites TO service_role;
-
-
---
--- Name: TABLE patient_patient_tag; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_patient_tag TO postgres;
-GRANT ALL ON TABLE public.patient_patient_tag TO anon;
-GRANT ALL ON TABLE public.patient_patient_tag TO authenticated;
-GRANT ALL ON TABLE public.patient_patient_tag TO service_role;
-
-
---
--- Name: TABLE patient_tags; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_tags TO postgres;
-GRANT ALL ON TABLE public.patient_tags TO anon;
-GRANT ALL ON TABLE public.patient_tags TO authenticated;
-GRANT ALL ON TABLE public.patient_tags TO service_role;
-
-
---
--- Name: TABLE patients; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patients TO postgres;
-GRANT ALL ON TABLE public.patients TO anon;
-GRANT ALL ON TABLE public.patients TO authenticated;
-GRANT ALL ON TABLE public.patients TO service_role;
-
-
---
--- Name: TABLE payment_settings; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.payment_settings TO postgres;
-GRANT ALL ON TABLE public.payment_settings TO anon;
-GRANT ALL ON TABLE public.payment_settings TO authenticated;
-GRANT ALL ON TABLE public.payment_settings TO service_role;
-
-
---
--- Name: TABLE plan_prices; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_prices TO postgres;
-GRANT ALL ON TABLE public.plan_prices TO anon;
-GRANT ALL ON TABLE public.plan_prices TO authenticated;
-GRANT ALL ON TABLE public.plan_prices TO service_role;
-
-
---
--- Name: TABLE plan_public; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_public TO postgres;
-GRANT ALL ON TABLE public.plan_public TO anon;
-GRANT ALL ON TABLE public.plan_public TO authenticated;
-GRANT ALL ON TABLE public.plan_public TO service_role;
-
-
---
--- Name: TABLE plan_public_bullets; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_public_bullets TO postgres;
-GRANT ALL ON TABLE public.plan_public_bullets TO anon;
-GRANT ALL ON TABLE public.plan_public_bullets TO authenticated;
-GRANT ALL ON TABLE public.plan_public_bullets TO service_role;
-
-
---
--- Name: TABLE plans; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plans TO postgres;
-GRANT ALL ON TABLE public.plans TO anon;
-GRANT ALL ON TABLE public.plans TO authenticated;
-GRANT ALL ON TABLE public.plans TO service_role;
-
-
---
--- Name: TABLE professional_pricing; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.professional_pricing TO postgres;
-GRANT ALL ON TABLE public.professional_pricing TO anon;
-GRANT ALL ON TABLE public.professional_pricing TO authenticated;
-GRANT ALL ON TABLE public.professional_pricing TO service_role;
-
-
---
--- Name: TABLE profiles; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.profiles TO postgres;
-GRANT ALL ON TABLE public.profiles TO anon;
-GRANT ALL ON TABLE public.profiles TO authenticated;
-GRANT ALL ON TABLE public.profiles TO service_role;
-
-
---
--- Name: TABLE recurrence_exceptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.recurrence_exceptions TO postgres;
-GRANT ALL ON TABLE public.recurrence_exceptions TO anon;
-GRANT ALL ON TABLE public.recurrence_exceptions TO authenticated;
-GRANT ALL ON TABLE public.recurrence_exceptions TO service_role;
-
-
---
--- Name: TABLE recurrence_rule_services; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.recurrence_rule_services TO postgres;
-GRANT ALL ON TABLE public.recurrence_rule_services TO anon;
-GRANT ALL ON TABLE public.recurrence_rule_services TO authenticated;
-GRANT ALL ON TABLE public.recurrence_rule_services TO service_role;
-
-
---
--- Name: TABLE recurrence_rules; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.recurrence_rules TO postgres;
-GRANT ALL ON TABLE public.recurrence_rules TO anon;
-GRANT ALL ON TABLE public.recurrence_rules TO authenticated;
-GRANT ALL ON TABLE public.recurrence_rules TO service_role;
-
-
---
--- Name: TABLE saas_admins; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_admins TO postgres;
-GRANT ALL ON TABLE public.saas_admins TO anon;
-GRANT ALL ON TABLE public.saas_admins TO authenticated;
-GRANT ALL ON TABLE public.saas_admins TO service_role;
-
-
---
--- Name: TABLE saas_doc_votos; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_doc_votos TO postgres;
-GRANT ALL ON TABLE public.saas_doc_votos TO anon;
-GRANT ALL ON TABLE public.saas_doc_votos TO authenticated;
-GRANT ALL ON TABLE public.saas_doc_votos TO service_role;
-
-
---
--- Name: TABLE saas_docs; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_docs TO postgres;
-GRANT ALL ON TABLE public.saas_docs TO anon;
-GRANT ALL ON TABLE public.saas_docs TO authenticated;
-GRANT ALL ON TABLE public.saas_docs TO service_role;
-
-
---
--- Name: TABLE saas_faq; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_faq TO postgres;
-GRANT ALL ON TABLE public.saas_faq TO anon;
-GRANT ALL ON TABLE public.saas_faq TO authenticated;
-GRANT ALL ON TABLE public.saas_faq TO service_role;
-
-
---
--- Name: TABLE saas_faq_itens; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_faq_itens TO postgres;
-GRANT ALL ON TABLE public.saas_faq_itens TO anon;
-GRANT ALL ON TABLE public.saas_faq_itens TO authenticated;
-GRANT ALL ON TABLE public.saas_faq_itens TO service_role;
-
-
---
--- Name: TABLE services; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.services TO postgres;
-GRANT ALL ON TABLE public.services TO anon;
-GRANT ALL ON TABLE public.services TO authenticated;
-GRANT ALL ON TABLE public.services TO service_role;
-
-
---
--- Name: TABLE subscription_events; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_events TO postgres;
-GRANT ALL ON TABLE public.subscription_events TO anon;
-GRANT ALL ON TABLE public.subscription_events TO authenticated;
-GRANT ALL ON TABLE public.subscription_events TO service_role;
-
-
---
--- Name: TABLE subscription_intents_personal; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents_personal TO postgres;
-GRANT ALL ON TABLE public.subscription_intents_personal TO anon;
-GRANT ALL ON TABLE public.subscription_intents_personal TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents_personal TO service_role;
-
-
---
--- Name: TABLE subscription_intents_tenant; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents_tenant TO postgres;
-GRANT ALL ON TABLE public.subscription_intents_tenant TO anon;
-GRANT ALL ON TABLE public.subscription_intents_tenant TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents_tenant TO service_role;
-
-
---
--- Name: TABLE subscription_intents; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents TO postgres;
-GRANT ALL ON TABLE public.subscription_intents TO anon;
-GRANT ALL ON TABLE public.subscription_intents TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents TO service_role;
-
-
---
--- Name: TABLE subscription_intents_legacy; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents_legacy TO postgres;
-GRANT ALL ON TABLE public.subscription_intents_legacy TO anon;
-GRANT ALL ON TABLE public.subscription_intents_legacy TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents_legacy TO service_role;
-
-
---
--- Name: TABLE support_sessions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.support_sessions TO postgres;
-GRANT ALL ON TABLE public.support_sessions TO anon;
-GRANT ALL ON TABLE public.support_sessions TO authenticated;
-GRANT ALL ON TABLE public.support_sessions TO service_role;
-
-
---
--- Name: TABLE tenant_feature_exceptions_log; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO postgres;
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO anon;
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO authenticated;
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO service_role;
-
-
---
--- Name: TABLE tenant_features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_features TO postgres;
-GRANT ALL ON TABLE public.tenant_features TO anon;
-GRANT ALL ON TABLE public.tenant_features TO authenticated;
-GRANT ALL ON TABLE public.tenant_features TO service_role;
-
-
---
--- Name: TABLE tenant_invites; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_invites TO postgres;
-GRANT ALL ON TABLE public.tenant_invites TO authenticated;
-GRANT ALL ON TABLE public.tenant_invites TO service_role;
-
-
---
--- Name: TABLE tenants; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenants TO postgres;
-GRANT ALL ON TABLE public.tenants TO anon;
-GRANT ALL ON TABLE public.tenants TO authenticated;
-GRANT ALL ON TABLE public.tenants TO service_role;
-
-
---
--- Name: TABLE user_settings; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.user_settings TO postgres;
-GRANT ALL ON TABLE public.user_settings TO anon;
-GRANT ALL ON TABLE public.user_settings TO authenticated;
-GRANT ALL ON TABLE public.user_settings TO service_role;
-
-
---
--- Name: TABLE v_auth_users_public; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_auth_users_public TO postgres;
-GRANT ALL ON TABLE public.v_auth_users_public TO anon;
-GRANT ALL ON TABLE public.v_auth_users_public TO authenticated;
-GRANT ALL ON TABLE public.v_auth_users_public TO service_role;
-
-
---
--- Name: TABLE v_commitment_totals; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_commitment_totals TO postgres;
-GRANT ALL ON TABLE public.v_commitment_totals TO anon;
-GRANT ALL ON TABLE public.v_commitment_totals TO authenticated;
-GRANT ALL ON TABLE public.v_commitment_totals TO service_role;
-
-
---
--- Name: TABLE v_patient_groups_with_counts; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO postgres;
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO anon;
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO authenticated;
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO service_role;
-
-
---
--- Name: TABLE v_plan_active_prices; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_plan_active_prices TO postgres;
-GRANT ALL ON TABLE public.v_plan_active_prices TO anon;
-GRANT ALL ON TABLE public.v_plan_active_prices TO authenticated;
-GRANT ALL ON TABLE public.v_plan_active_prices TO service_role;
-
-
---
--- Name: TABLE v_public_pricing; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_public_pricing TO postgres;
-GRANT ALL ON TABLE public.v_public_pricing TO anon;
-GRANT ALL ON TABLE public.v_public_pricing TO authenticated;
-GRANT ALL ON TABLE public.v_public_pricing TO service_role;
-
-
---
--- Name: TABLE v_subscription_feature_mismatch; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO postgres;
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO anon;
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO authenticated;
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO service_role;
-
-
---
--- Name: TABLE v_subscription_health; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_subscription_health TO postgres;
-GRANT ALL ON TABLE public.v_subscription_health TO anon;
-GRANT ALL ON TABLE public.v_subscription_health TO authenticated;
-GRANT ALL ON TABLE public.v_subscription_health TO service_role;
-
-
---
--- Name: TABLE v_subscription_health_v2; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO postgres;
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO anon;
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO authenticated;
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO service_role;
-
-
---
--- Name: TABLE v_tag_patient_counts; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tag_patient_counts TO postgres;
-GRANT ALL ON TABLE public.v_tag_patient_counts TO anon;
-GRANT ALL ON TABLE public.v_tag_patient_counts TO authenticated;
-GRANT ALL ON TABLE public.v_tag_patient_counts TO service_role;
-
-
---
--- Name: TABLE v_tenant_active_subscription; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO postgres;
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO anon;
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO service_role;
-
-
---
--- Name: TABLE v_tenant_entitlements; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_entitlements TO postgres;
-GRANT ALL ON TABLE public.v_tenant_entitlements TO anon;
-GRANT ALL ON TABLE public.v_tenant_entitlements TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_entitlements TO service_role;
-
-
---
--- Name: TABLE v_tenant_entitlements_full; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO postgres;
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO anon;
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO service_role;
-
-
---
--- Name: TABLE v_tenant_entitlements_json; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO postgres;
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO anon;
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO service_role;
-
-
---
--- Name: TABLE v_tenant_feature_exceptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO postgres;
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO anon;
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO service_role;
-
-
---
--- Name: TABLE v_tenant_feature_mismatch; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO postgres;
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO anon;
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO service_role;
-
-
---
--- Name: TABLE v_tenant_members_with_profiles; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO postgres;
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO anon;
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO service_role;
-
-
---
--- Name: TABLE v_tenant_people; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_people TO postgres;
-GRANT ALL ON TABLE public.v_tenant_people TO anon;
-GRANT ALL ON TABLE public.v_tenant_people TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_people TO service_role;
-
-
---
--- Name: TABLE v_tenant_staff; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_staff TO postgres;
-GRANT ALL ON TABLE public.v_tenant_staff TO anon;
-GRANT ALL ON TABLE public.v_tenant_staff TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_staff TO service_role;
-
-
---
--- Name: TABLE v_user_active_subscription; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_user_active_subscription TO postgres;
-GRANT ALL ON TABLE public.v_user_active_subscription TO anon;
-GRANT ALL ON TABLE public.v_user_active_subscription TO authenticated;
-GRANT ALL ON TABLE public.v_user_active_subscription TO service_role;
-
-
---
--- Name: TABLE v_user_entitlements; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_user_entitlements TO postgres;
-GRANT ALL ON TABLE public.v_user_entitlements TO anon;
-GRANT ALL ON TABLE public.v_user_entitlements TO authenticated;
-GRANT ALL ON TABLE public.v_user_entitlements TO service_role;
-
-
---
--- Name: TABLE messages; Type: ACL; Schema: realtime; Owner: supabase_realtime_admin
---
-
-GRANT ALL ON TABLE realtime.messages TO postgres;
-GRANT ALL ON TABLE realtime.messages TO dashboard_user;
-GRANT SELECT,INSERT,UPDATE ON TABLE realtime.messages TO anon;
-GRANT SELECT,INSERT,UPDATE ON TABLE realtime.messages TO authenticated;
-GRANT SELECT,INSERT,UPDATE ON TABLE realtime.messages TO service_role;
-
-
---
--- Name: TABLE messages_2026_03_11; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_11 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_11 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_12; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_12 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_12 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_13; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_13 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_13 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_14; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_14 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_14 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_15; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_15 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_15 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_16; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_16 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_16 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_17; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_17 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_17 TO dashboard_user;
-
-
---
--- Name: TABLE schema_migrations; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.schema_migrations TO postgres;
-GRANT ALL ON TABLE realtime.schema_migrations TO dashboard_user;
-GRANT SELECT ON TABLE realtime.schema_migrations TO anon;
-GRANT SELECT ON TABLE realtime.schema_migrations TO authenticated;
-GRANT SELECT ON TABLE realtime.schema_migrations TO service_role;
-GRANT ALL ON TABLE realtime.schema_migrations TO supabase_realtime_admin;
-
-
---
--- Name: TABLE subscription; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.subscription TO postgres;
-GRANT ALL ON TABLE realtime.subscription TO dashboard_user;
-GRANT SELECT ON TABLE realtime.subscription TO anon;
-GRANT SELECT ON TABLE realtime.subscription TO authenticated;
-GRANT SELECT ON TABLE realtime.subscription TO service_role;
-GRANT ALL ON TABLE realtime.subscription TO supabase_realtime_admin;
-
-
---
--- Name: SEQUENCE subscription_id_seq; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON SEQUENCE realtime.subscription_id_seq TO postgres;
-GRANT ALL ON SEQUENCE realtime.subscription_id_seq TO dashboard_user;
-GRANT USAGE ON SEQUENCE realtime.subscription_id_seq TO anon;
-GRANT USAGE ON SEQUENCE realtime.subscription_id_seq TO authenticated;
-GRANT USAGE ON SEQUENCE realtime.subscription_id_seq TO service_role;
-GRANT ALL ON SEQUENCE realtime.subscription_id_seq TO supabase_realtime_admin;
-
-
---
--- Name: TABLE buckets; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.buckets TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE storage.buckets TO service_role;
-GRANT ALL ON TABLE storage.buckets TO authenticated;
-GRANT ALL ON TABLE storage.buckets TO anon;
-
-
---
--- Name: TABLE buckets_analytics; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.buckets_analytics TO service_role;
-GRANT ALL ON TABLE storage.buckets_analytics TO authenticated;
-GRANT ALL ON TABLE storage.buckets_analytics TO anon;
-
-
---
--- Name: TABLE buckets_vectors; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT SELECT ON TABLE storage.buckets_vectors TO service_role;
-GRANT SELECT ON TABLE storage.buckets_vectors TO authenticated;
-GRANT SELECT ON TABLE storage.buckets_vectors TO anon;
-
-
---
--- Name: TABLE iceberg_namespaces; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.iceberg_namespaces TO service_role;
-GRANT SELECT ON TABLE storage.iceberg_namespaces TO authenticated;
-GRANT SELECT ON TABLE storage.iceberg_namespaces TO anon;
-
-
---
--- Name: TABLE iceberg_tables; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.iceberg_tables TO service_role;
-GRANT SELECT ON TABLE storage.iceberg_tables TO authenticated;
-GRANT SELECT ON TABLE storage.iceberg_tables TO anon;
-
-
---
--- Name: TABLE objects; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.objects TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE storage.objects TO service_role;
-GRANT ALL ON TABLE storage.objects TO authenticated;
-GRANT ALL ON TABLE storage.objects TO anon;
-
-
---
--- Name: TABLE s3_multipart_uploads; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.s3_multipart_uploads TO service_role;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads TO authenticated;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads TO anon;
-
-
---
--- Name: TABLE s3_multipart_uploads_parts; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.s3_multipart_uploads_parts TO service_role;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads_parts TO authenticated;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads_parts TO anon;
-
-
---
--- Name: TABLE vector_indexes; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT SELECT ON TABLE storage.vector_indexes TO service_role;
-GRANT SELECT ON TABLE storage.vector_indexes TO authenticated;
-GRANT SELECT ON TABLE storage.vector_indexes TO anon;
-
-
---
--- Name: TABLE hooks; Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-GRANT ALL ON TABLE supabase_functions.hooks TO postgres;
-GRANT ALL ON TABLE supabase_functions.hooks TO anon;
-GRANT ALL ON TABLE supabase_functions.hooks TO authenticated;
-GRANT ALL ON TABLE supabase_functions.hooks TO service_role;
-
-
---
--- Name: SEQUENCE hooks_id_seq; Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO postgres;
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO anon;
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO authenticated;
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO service_role;
-
-
---
--- Name: TABLE migrations; Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-GRANT ALL ON TABLE supabase_functions.migrations TO postgres;
-GRANT ALL ON TABLE supabase_functions.migrations TO anon;
-GRANT ALL ON TABLE supabase_functions.migrations TO authenticated;
-GRANT ALL ON TABLE supabase_functions.migrations TO service_role;
-
-
---
--- Name: TABLE secrets; Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT SELECT,REFERENCES,DELETE,TRUNCATE ON TABLE vault.secrets TO postgres WITH GRANT OPTION;
-GRANT SELECT,DELETE ON TABLE vault.secrets TO service_role;
-
-
---
--- Name: TABLE decrypted_secrets; Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT SELECT,REFERENCES,DELETE,TRUNCATE ON TABLE vault.decrypted_secrets TO postgres WITH GRANT OPTION;
-GRANT SELECT,DELETE ON TABLE vault.decrypted_secrets TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON SEQUENCES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON FUNCTIONS TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON TABLES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON SEQUENCES TO postgres WITH GRANT OPTION;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON FUNCTIONS TO postgres WITH GRANT OPTION;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON TABLES TO postgres WITH GRANT OPTION;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: public; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: public; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: public; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON SEQUENCES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON FUNCTIONS TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON TABLES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: storage; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: storage; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: storage; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: supabase_functions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: supabase_functions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: supabase_functions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: issue_graphql_placeholder; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_graphql_placeholder ON sql_drop
- WHEN TAG IN ('DROP EXTENSION')
- EXECUTE FUNCTION extensions.set_graphql_placeholder();
-
-
-ALTER EVENT TRIGGER issue_graphql_placeholder OWNER TO supabase_admin;
-
---
--- Name: issue_pg_cron_access; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_pg_cron_access ON ddl_command_end
- WHEN TAG IN ('CREATE EXTENSION')
- EXECUTE FUNCTION extensions.grant_pg_cron_access();
-
-
-ALTER EVENT TRIGGER issue_pg_cron_access OWNER TO supabase_admin;
-
---
--- Name: issue_pg_graphql_access; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_pg_graphql_access ON ddl_command_end
- WHEN TAG IN ('CREATE FUNCTION')
- EXECUTE FUNCTION extensions.grant_pg_graphql_access();
-
-
-ALTER EVENT TRIGGER issue_pg_graphql_access OWNER TO supabase_admin;
-
---
--- Name: issue_pg_net_access; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_pg_net_access ON ddl_command_end
- WHEN TAG IN ('CREATE EXTENSION')
- EXECUTE FUNCTION extensions.grant_pg_net_access();
-
-
-ALTER EVENT TRIGGER issue_pg_net_access OWNER TO supabase_admin;
-
---
--- Name: pgrst_ddl_watch; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER pgrst_ddl_watch ON ddl_command_end
- EXECUTE FUNCTION extensions.pgrst_ddl_watch();
-
-
-ALTER EVENT TRIGGER pgrst_ddl_watch OWNER TO supabase_admin;
-
---
--- Name: pgrst_drop_watch; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER pgrst_drop_watch ON sql_drop
- EXECUTE FUNCTION extensions.pgrst_drop_watch();
-
-
-ALTER EVENT TRIGGER pgrst_drop_watch OWNER TO supabase_admin;
-
---
--- PostgreSQL database dump complete
---
-
-\unrestrict yeY9H8V42lbJiLOWXgm32d7gqvrbttAXIQpuhmJAUW6CcywchAbLQWIAldNEVsZ
-
diff --git a/DBS/2026-03-15/schema.sql b/DBS/2026-03-15/schema.sql
deleted file mode 100644
index f8dd56d..0000000
--- a/DBS/2026-03-15/schema.sql
+++ /dev/null
@@ -1,21933 +0,0 @@
---
--- PostgreSQL database dump
---
-
-\restrict jIaZyygk9Cg9Z4ELczVcfs8ceh7EIWutd6NCBTzG3dunNfjBgnAm5uGtlm0D4Zf
-
--- Dumped from database version 17.6
--- Dumped by pg_dump version 17.6
-
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET idle_in_transaction_session_timeout = 0;
-SET transaction_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = on;
-SELECT pg_catalog.set_config('search_path', '', false);
-SET check_function_bodies = false;
-SET xmloption = content;
-SET client_min_messages = warning;
-SET row_security = off;
-
---
--- Name: _realtime; Type: SCHEMA; Schema: -; Owner: postgres
---
-
-CREATE SCHEMA _realtime;
-
-
-ALTER SCHEMA _realtime OWNER TO postgres;
-
---
--- Name: auth; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA auth;
-
-
-ALTER SCHEMA auth OWNER TO supabase_admin;
-
---
--- Name: extensions; Type: SCHEMA; Schema: -; Owner: postgres
---
-
-CREATE SCHEMA extensions;
-
-
-ALTER SCHEMA extensions OWNER TO postgres;
-
---
--- Name: graphql; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA graphql;
-
-
-ALTER SCHEMA graphql OWNER TO supabase_admin;
-
---
--- Name: graphql_public; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA graphql_public;
-
-
-ALTER SCHEMA graphql_public OWNER TO supabase_admin;
-
---
--- Name: pg_net; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_net WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION pg_net; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_net IS 'Async HTTP';
-
-
---
--- Name: pgbouncer; Type: SCHEMA; Schema: -; Owner: pgbouncer
---
-
-CREATE SCHEMA pgbouncer;
-
-
-ALTER SCHEMA pgbouncer OWNER TO pgbouncer;
-
---
--- Name: realtime; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA realtime;
-
-
-ALTER SCHEMA realtime OWNER TO supabase_admin;
-
---
--- Name: storage; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA storage;
-
-
-ALTER SCHEMA storage OWNER TO supabase_admin;
-
---
--- Name: supabase_functions; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA supabase_functions;
-
-
-ALTER SCHEMA supabase_functions OWNER TO supabase_admin;
-
---
--- Name: vault; Type: SCHEMA; Schema: -; Owner: supabase_admin
---
-
-CREATE SCHEMA vault;
-
-
-ALTER SCHEMA vault OWNER TO supabase_admin;
-
---
--- Name: btree_gist; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS btree_gist WITH SCHEMA public;
-
-
---
--- Name: EXTENSION btree_gist; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION btree_gist IS 'support for indexing common datatypes in GiST';
-
-
---
--- Name: citext; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;
-
-
---
--- Name: EXTENSION citext; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION citext IS 'data type for case-insensitive character strings';
-
-
---
--- Name: pg_graphql; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_graphql WITH SCHEMA graphql;
-
-
---
--- Name: EXTENSION pg_graphql; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_graphql IS 'pg_graphql: GraphQL support';
-
-
---
--- Name: pg_stat_statements; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION pg_stat_statements; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_stat_statements IS 'track planning and execution statistics of all SQL statements executed';
-
-
---
--- Name: pg_trgm; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA public;
-
-
---
--- Name: EXTENSION pg_trgm; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pg_trgm IS 'text similarity measurement and index searching based on trigrams';
-
-
---
--- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';
-
-
---
--- Name: supabase_vault; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS supabase_vault WITH SCHEMA vault;
-
-
---
--- Name: EXTENSION supabase_vault; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION supabase_vault IS 'Supabase Vault Extension';
-
-
---
--- Name: uuid-ossp; Type: EXTENSION; Schema: -; Owner: -
---
-
-CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA extensions;
-
-
---
--- Name: EXTENSION "uuid-ossp"; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)';
-
-
---
--- Name: aal_level; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.aal_level AS ENUM (
- 'aal1',
- 'aal2',
- 'aal3'
-);
-
-
-ALTER TYPE auth.aal_level OWNER TO supabase_auth_admin;
-
---
--- Name: code_challenge_method; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.code_challenge_method AS ENUM (
- 's256',
- 'plain'
-);
-
-
-ALTER TYPE auth.code_challenge_method OWNER TO supabase_auth_admin;
-
---
--- Name: factor_status; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.factor_status AS ENUM (
- 'unverified',
- 'verified'
-);
-
-
-ALTER TYPE auth.factor_status OWNER TO supabase_auth_admin;
-
---
--- Name: factor_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.factor_type AS ENUM (
- 'totp',
- 'webauthn',
- 'phone'
-);
-
-
-ALTER TYPE auth.factor_type OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_authorization_status; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_authorization_status AS ENUM (
- 'pending',
- 'approved',
- 'denied',
- 'expired'
-);
-
-
-ALTER TYPE auth.oauth_authorization_status OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_client_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_client_type AS ENUM (
- 'public',
- 'confidential'
-);
-
-
-ALTER TYPE auth.oauth_client_type OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_registration_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_registration_type AS ENUM (
- 'dynamic',
- 'manual'
-);
-
-
-ALTER TYPE auth.oauth_registration_type OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_response_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.oauth_response_type AS ENUM (
- 'code'
-);
-
-
-ALTER TYPE auth.oauth_response_type OWNER TO supabase_auth_admin;
-
---
--- Name: one_time_token_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TYPE auth.one_time_token_type AS ENUM (
- 'confirmation_token',
- 'reauthentication_token',
- 'recovery_token',
- 'email_change_token_new',
- 'email_change_token_current',
- 'phone_change_token'
-);
-
-
-ALTER TYPE auth.one_time_token_type OWNER TO supabase_auth_admin;
-
---
--- Name: commitment_log_source; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.commitment_log_source AS ENUM (
- 'manual',
- 'auto'
-);
-
-
-ALTER TYPE public.commitment_log_source OWNER TO supabase_admin;
-
---
--- Name: determined_field_type; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.determined_field_type AS ENUM (
- 'text',
- 'textarea',
- 'number',
- 'date',
- 'select',
- 'boolean'
-);
-
-
-ALTER TYPE public.determined_field_type OWNER TO supabase_admin;
-
---
--- Name: recurrence_exception_type; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.recurrence_exception_type AS ENUM (
- 'cancel_session',
- 'reschedule_session',
- 'patient_missed',
- 'therapist_canceled',
- 'holiday_block'
-);
-
-
-ALTER TYPE public.recurrence_exception_type OWNER TO supabase_admin;
-
---
--- Name: recurrence_type; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.recurrence_type AS ENUM (
- 'weekly',
- 'biweekly',
- 'monthly',
- 'yearly',
- 'custom_weekdays'
-);
-
-
-ALTER TYPE public.recurrence_type OWNER TO supabase_admin;
-
---
--- Name: status_agenda_serie; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.status_agenda_serie AS ENUM (
- 'ativo',
- 'pausado',
- 'cancelado'
-);
-
-
-ALTER TYPE public.status_agenda_serie OWNER TO supabase_admin;
-
---
--- Name: status_evento_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.status_evento_agenda AS ENUM (
- 'agendado',
- 'realizado',
- 'faltou',
- 'cancelado',
- 'remarcar'
-);
-
-
-ALTER TYPE public.status_evento_agenda OWNER TO supabase_admin;
-
---
--- Name: status_excecao_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.status_excecao_agenda AS ENUM (
- 'pendente',
- 'ativo',
- 'arquivado'
-);
-
-
-ALTER TYPE public.status_excecao_agenda OWNER TO supabase_admin;
-
---
--- Name: tipo_evento_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.tipo_evento_agenda AS ENUM (
- 'sessao',
- 'bloqueio'
-);
-
-
-ALTER TYPE public.tipo_evento_agenda OWNER TO supabase_admin;
-
---
--- Name: tipo_excecao_agenda; Type: TYPE; Schema: public; Owner: supabase_admin
---
-
-CREATE TYPE public.tipo_excecao_agenda AS ENUM (
- 'bloqueio',
- 'horario_extra'
-);
-
-
-ALTER TYPE public.tipo_excecao_agenda OWNER TO supabase_admin;
-
---
--- Name: action; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.action AS ENUM (
- 'INSERT',
- 'UPDATE',
- 'DELETE',
- 'TRUNCATE',
- 'ERROR'
-);
-
-
-ALTER TYPE realtime.action OWNER TO supabase_admin;
-
---
--- Name: equality_op; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.equality_op AS ENUM (
- 'eq',
- 'neq',
- 'lt',
- 'lte',
- 'gt',
- 'gte',
- 'in'
-);
-
-
-ALTER TYPE realtime.equality_op OWNER TO supabase_admin;
-
---
--- Name: user_defined_filter; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.user_defined_filter AS (
- column_name text,
- op realtime.equality_op,
- value text
-);
-
-
-ALTER TYPE realtime.user_defined_filter OWNER TO supabase_admin;
-
---
--- Name: wal_column; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.wal_column AS (
- name text,
- type_name text,
- type_oid oid,
- value jsonb,
- is_pkey boolean,
- is_selectable boolean
-);
-
-
-ALTER TYPE realtime.wal_column OWNER TO supabase_admin;
-
---
--- Name: wal_rls; Type: TYPE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TYPE realtime.wal_rls AS (
- wal jsonb,
- is_rls_enabled boolean,
- subscription_ids uuid[],
- errors text[]
-);
-
-
-ALTER TYPE realtime.wal_rls OWNER TO supabase_admin;
-
---
--- Name: buckettype; Type: TYPE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TYPE storage.buckettype AS ENUM (
- 'STANDARD',
- 'ANALYTICS',
- 'VECTOR'
-);
-
-
-ALTER TYPE storage.buckettype OWNER TO supabase_storage_admin;
-
---
--- Name: email(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.email() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim.email', true), ''),
- (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'email')
- )::text
-$$;
-
-
-ALTER FUNCTION auth.email() OWNER TO supabase_auth_admin;
-
---
--- Name: FUNCTION email(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON FUNCTION auth.email() IS 'Deprecated. Use auth.jwt() -> ''email'' instead.';
-
-
---
--- Name: jwt(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.jwt() RETURNS jsonb
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim', true), ''),
- nullif(current_setting('request.jwt.claims', true), '')
- )::jsonb
-$$;
-
-
-ALTER FUNCTION auth.jwt() OWNER TO supabase_auth_admin;
-
---
--- Name: role(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.role() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim.role', true), ''),
- (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'role')
- )::text
-$$;
-
-
-ALTER FUNCTION auth.role() OWNER TO supabase_auth_admin;
-
---
--- Name: FUNCTION role(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON FUNCTION auth.role() IS 'Deprecated. Use auth.jwt() -> ''role'' instead.';
-
-
---
--- Name: uid(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE FUNCTION auth.uid() RETURNS uuid
- LANGUAGE sql STABLE
- AS $$
- select
- coalesce(
- nullif(current_setting('request.jwt.claim.sub', true), ''),
- (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'sub')
- )::uuid
-$$;
-
-
-ALTER FUNCTION auth.uid() OWNER TO supabase_auth_admin;
-
---
--- Name: FUNCTION uid(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON FUNCTION auth.uid() IS 'Deprecated. Use auth.jwt() -> ''sub'' instead.';
-
-
---
--- Name: grant_pg_cron_access(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.grant_pg_cron_access() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF EXISTS (
- SELECT
- FROM pg_event_trigger_ddl_commands() AS ev
- JOIN pg_extension AS ext
- ON ev.objid = ext.oid
- WHERE ext.extname = 'pg_cron'
- )
- THEN
- grant usage on schema cron to postgres with grant option;
-
- alter default privileges in schema cron grant all on tables to postgres with grant option;
- alter default privileges in schema cron grant all on functions to postgres with grant option;
- alter default privileges in schema cron grant all on sequences to postgres with grant option;
-
- alter default privileges for user supabase_admin in schema cron grant all
- on sequences to postgres with grant option;
- alter default privileges for user supabase_admin in schema cron grant all
- on tables to postgres with grant option;
- alter default privileges for user supabase_admin in schema cron grant all
- on functions to postgres with grant option;
-
- grant all privileges on all tables in schema cron to postgres with grant option;
- revoke all on table cron.job from postgres;
- grant select on table cron.job to postgres with grant option;
- END IF;
-END;
-$$;
-
-
-ALTER FUNCTION extensions.grant_pg_cron_access() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION grant_pg_cron_access(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.grant_pg_cron_access() IS 'Grants access to pg_cron';
-
-
---
--- Name: grant_pg_graphql_access(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.grant_pg_graphql_access() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $_$
-DECLARE
- func_is_graphql_resolve bool;
-BEGIN
- func_is_graphql_resolve = (
- SELECT n.proname = 'resolve'
- FROM pg_event_trigger_ddl_commands() AS ev
- LEFT JOIN pg_catalog.pg_proc AS n
- ON ev.objid = n.oid
- );
-
- IF func_is_graphql_resolve
- THEN
- -- Update public wrapper to pass all arguments through to the pg_graphql resolve func
- DROP FUNCTION IF EXISTS graphql_public.graphql;
- create or replace function graphql_public.graphql(
- "operationName" text default null,
- query text default null,
- variables jsonb default null,
- extensions jsonb default null
- )
- returns jsonb
- language sql
- as $$
- select graphql.resolve(
- query := query,
- variables := coalesce(variables, '{}'),
- "operationName" := "operationName",
- extensions := extensions
- );
- $$;
-
- -- This hook executes when `graphql.resolve` is created. That is not necessarily the last
- -- function in the extension so we need to grant permissions on existing entities AND
- -- update default permissions to any others that are created after `graphql.resolve`
- grant usage on schema graphql to postgres, anon, authenticated, service_role;
- grant select on all tables in schema graphql to postgres, anon, authenticated, service_role;
- grant execute on all functions in schema graphql to postgres, anon, authenticated, service_role;
- grant all on all sequences in schema graphql to postgres, anon, authenticated, service_role;
- alter default privileges in schema graphql grant all on tables to postgres, anon, authenticated, service_role;
- alter default privileges in schema graphql grant all on functions to postgres, anon, authenticated, service_role;
- alter default privileges in schema graphql grant all on sequences to postgres, anon, authenticated, service_role;
-
- -- Allow postgres role to allow granting usage on graphql and graphql_public schemas to custom roles
- grant usage on schema graphql_public to postgres with grant option;
- grant usage on schema graphql to postgres with grant option;
- END IF;
-
-END;
-$_$;
-
-
-ALTER FUNCTION extensions.grant_pg_graphql_access() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION grant_pg_graphql_access(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.grant_pg_graphql_access() IS 'Grants access to pg_graphql';
-
-
---
--- Name: grant_pg_net_access(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.grant_pg_net_access() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF EXISTS (
- SELECT 1
- FROM pg_event_trigger_ddl_commands() AS ev
- JOIN pg_extension AS ext
- ON ev.objid = ext.oid
- WHERE ext.extname = 'pg_net'
- )
- THEN
- GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role;
-
- ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
- ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
-
- ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
- ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
-
- REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
- REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
-
- GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
- GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
- END IF;
-END;
-$$;
-
-
-ALTER FUNCTION extensions.grant_pg_net_access() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION grant_pg_net_access(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.grant_pg_net_access() IS 'Grants access to pg_net';
-
-
---
--- Name: pgrst_ddl_watch(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.pgrst_ddl_watch() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- cmd record;
-BEGIN
- FOR cmd IN SELECT * FROM pg_event_trigger_ddl_commands()
- LOOP
- IF cmd.command_tag IN (
- 'CREATE SCHEMA', 'ALTER SCHEMA'
- , 'CREATE TABLE', 'CREATE TABLE AS', 'SELECT INTO', 'ALTER TABLE'
- , 'CREATE FOREIGN TABLE', 'ALTER FOREIGN TABLE'
- , 'CREATE VIEW', 'ALTER VIEW'
- , 'CREATE MATERIALIZED VIEW', 'ALTER MATERIALIZED VIEW'
- , 'CREATE FUNCTION', 'ALTER FUNCTION'
- , 'CREATE TRIGGER'
- , 'CREATE TYPE', 'ALTER TYPE'
- , 'CREATE RULE'
- , 'COMMENT'
- )
- -- don't notify in case of CREATE TEMP table or other objects created on pg_temp
- AND cmd.schema_name is distinct from 'pg_temp'
- THEN
- NOTIFY pgrst, 'reload schema';
- END IF;
- END LOOP;
-END; $$;
-
-
-ALTER FUNCTION extensions.pgrst_ddl_watch() OWNER TO supabase_admin;
-
---
--- Name: pgrst_drop_watch(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.pgrst_drop_watch() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- obj record;
-BEGIN
- FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects()
- LOOP
- IF obj.object_type IN (
- 'schema'
- , 'table'
- , 'foreign table'
- , 'view'
- , 'materialized view'
- , 'function'
- , 'trigger'
- , 'type'
- , 'rule'
- )
- AND obj.is_temporary IS false -- no pg_temp objects
- THEN
- NOTIFY pgrst, 'reload schema';
- END IF;
- END LOOP;
-END; $$;
-
-
-ALTER FUNCTION extensions.pgrst_drop_watch() OWNER TO supabase_admin;
-
---
--- Name: set_graphql_placeholder(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin
---
-
-CREATE FUNCTION extensions.set_graphql_placeholder() RETURNS event_trigger
- LANGUAGE plpgsql
- AS $_$
- DECLARE
- graphql_is_dropped bool;
- BEGIN
- graphql_is_dropped = (
- SELECT ev.schema_name = 'graphql_public'
- FROM pg_event_trigger_dropped_objects() AS ev
- WHERE ev.schema_name = 'graphql_public'
- );
-
- IF graphql_is_dropped
- THEN
- create or replace function graphql_public.graphql(
- "operationName" text default null,
- query text default null,
- variables jsonb default null,
- extensions jsonb default null
- )
- returns jsonb
- language plpgsql
- as $$
- DECLARE
- server_version float;
- BEGIN
- server_version = (SELECT (SPLIT_PART((select version()), ' ', 2))::float);
-
- IF server_version >= 14 THEN
- RETURN jsonb_build_object(
- 'errors', jsonb_build_array(
- jsonb_build_object(
- 'message', 'pg_graphql extension is not enabled.'
- )
- )
- );
- ELSE
- RETURN jsonb_build_object(
- 'errors', jsonb_build_array(
- jsonb_build_object(
- 'message', 'pg_graphql is only available on projects running Postgres 14 onwards.'
- )
- )
- );
- END IF;
- END;
- $$;
- END IF;
-
- END;
-$_$;
-
-
-ALTER FUNCTION extensions.set_graphql_placeholder() OWNER TO supabase_admin;
-
---
--- Name: FUNCTION set_graphql_placeholder(); Type: COMMENT; Schema: extensions; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION extensions.set_graphql_placeholder() IS 'Reintroduces placeholder function for graphql_public.graphql';
-
-
---
--- Name: get_auth(text); Type: FUNCTION; Schema: pgbouncer; Owner: supabase_admin
---
-
-CREATE FUNCTION pgbouncer.get_auth(p_usename text) RETURNS TABLE(username text, password text)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO ''
- AS $_$
-begin
- raise debug 'PgBouncer auth request: %', p_usename;
-
- return query
- select
- rolname::text,
- case when rolvaliduntil < now()
- then null
- else rolpassword::text
- end
- from pg_authid
- where rolname=$1 and rolcanlogin;
-end;
-$_$;
-
-
-ALTER FUNCTION pgbouncer.get_auth(p_usename text) OWNER TO supabase_admin;
-
---
--- Name: __rls_ping(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.__rls_ping() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select 'ok'::text;
-$$;
-
-
-ALTER FUNCTION public.__rls_ping() OWNER TO supabase_admin;
-
-SET default_tablespace = '';
-
-SET default_table_access_method = heap;
-
---
--- Name: subscriptions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscriptions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid,
- plan_id uuid NOT NULL,
- status text DEFAULT 'active'::text NOT NULL,
- current_period_start timestamp with time zone,
- current_period_end timestamp with time zone,
- cancel_at_period_end boolean DEFAULT false NOT NULL,
- provider text DEFAULT 'manual'::text NOT NULL,
- provider_customer_id text,
- provider_subscription_id text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid,
- plan_key text,
- "interval" text,
- source text DEFAULT 'manual'::text NOT NULL,
- started_at timestamp with time zone DEFAULT now() NOT NULL,
- canceled_at timestamp with time zone,
- activated_at timestamp with time zone,
- past_due_since timestamp with time zone,
- suspended_at timestamp with time zone,
- suspended_reason text,
- cancelled_at timestamp with time zone,
- cancel_reason text,
- expired_at timestamp with time zone,
- CONSTRAINT subscriptions_interval_check CHECK (("interval" = ANY (ARRAY['month'::text, 'year'::text]))),
- CONSTRAINT subscriptions_owner_xor CHECK ((((tenant_id IS NOT NULL) AND (user_id IS NULL)) OR ((tenant_id IS NULL) AND (user_id IS NOT NULL)))),
- CONSTRAINT subscriptions_status_check CHECK ((status = ANY (ARRAY['pending'::text, 'active'::text, 'past_due'::text, 'suspended'::text, 'cancelled'::text, 'expired'::text])))
-);
-
-
-ALTER TABLE public.subscriptions OWNER TO supabase_admin;
-
---
--- Name: activate_subscription_from_intent(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_intent record;
- v_sub public.subscriptions;
- v_days int;
- v_user_id uuid;
- v_plan_id uuid;
- v_target text;
-begin
- -- lê pela VIEW unificada
- select * into v_intent
- from public.subscription_intents
- where id = p_intent_id;
-
- if not found then
- raise exception 'Intent não encontrado: %', p_intent_id;
- end if;
-
- if v_intent.status <> 'paid' then
- raise exception 'Intent precisa estar paid para ativar assinatura';
- end if;
-
- -- resolve target e plan_id via plans.key
- select p.id, p.target
- into v_plan_id, v_target
- from public.plans p
- where p.key = v_intent.plan_key
- limit 1;
-
- if v_plan_id is null then
- raise exception 'Plano não encontrado em plans.key = %', v_intent.plan_key;
- end if;
-
- v_target := lower(coalesce(v_target, ''));
-
- -- ✅ supervisor adicionado
- if v_target not in ('clinic', 'therapist', 'supervisor') then
- raise exception 'Target inválido em plans.target: %', v_target;
- end if;
-
- -- regra por target
- if v_target = 'clinic' then
- if v_intent.tenant_id is null then
- raise exception 'Intent sem tenant_id';
- end if;
- else
- -- therapist ou supervisor: vinculado ao user
- v_user_id := v_intent.user_id;
- if v_user_id is null then
- v_user_id := v_intent.created_by_user_id;
- end if;
- end if;
-
- if v_target in ('therapist', 'supervisor') and v_user_id is null then
- raise exception 'Não foi possível determinar user_id para assinatura %.', v_target;
- end if;
-
- -- cancela assinatura ativa anterior
- if v_target = 'clinic' then
- update public.subscriptions
- set status = 'cancelled',
- cancelled_at = now()
- where tenant_id = v_intent.tenant_id
- and plan_id = v_plan_id
- and status = 'active';
- else
- -- therapist ou supervisor
- update public.subscriptions
- set status = 'cancelled',
- cancelled_at = now()
- where user_id = v_user_id
- and plan_id = v_plan_id
- and status = 'active'
- and tenant_id is null;
- end if;
-
- -- duração do plano (30 dias para mensal)
- v_days := case
- when lower(coalesce(v_intent.interval, 'month')) = 'year' then 365
- else 30
- end;
-
- -- cria nova assinatura
- insert into public.subscriptions (
- user_id,
- plan_id,
- status,
- started_at,
- expires_at,
- cancelled_at,
- activated_at,
- tenant_id,
- plan_key,
- interval,
- source,
- created_at,
- updated_at
- )
- values (
- case when v_target = 'clinic' then null else v_user_id end,
- v_plan_id,
- 'active',
- now(),
- now() + make_interval(days => v_days),
- null,
- now(),
- case when v_target = 'clinic' then v_intent.tenant_id else null end,
- v_intent.plan_key,
- v_intent.interval,
- 'manual',
- now(),
- now()
- )
- returning * into v_sub;
-
- -- grava vínculo intent → subscription
- if v_target = 'clinic' then
- update public.subscription_intents_tenant
- set subscription_id = v_sub.id
- where id = p_intent_id;
- else
- update public.subscription_intents_personal
- set subscription_id = v_sub.id
- where id = p_intent_id;
- end if;
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) OWNER TO supabase_admin;
-
---
--- Name: admin_fix_plan_target(text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_plan_id uuid;
-begin
- -- (opcional) restringe targets válidos
- if p_new_target not in ('clinic','therapist') then
- raise exception 'Target inválido: %', p_new_target using errcode='P0001';
- end if;
-
- -- trava o plano
- select id into v_plan_id
- from public.plans
- where key = p_plan_key
- for update;
-
- if v_plan_id is null then
- raise exception 'Plano não encontrado: %', p_plan_key using errcode='P0001';
- end if;
-
- -- segurança: não mexer se existe subscription
- if exists (select 1 from public.subscriptions s where s.plan_id = v_plan_id) then
- raise exception 'Plano % possui subscriptions. Migração bloqueada.', p_plan_key using errcode='P0001';
- end if;
-
- -- liga bypass SOMENTE nesta transação
- perform set_config('app.plan_migration_bypass', '1', true);
-
- update public.plans
- set target = p_new_target
- where id = v_plan_id;
-
-end
-$$;
-
-
-ALTER FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) OWNER TO supabase_admin;
-
---
--- Name: agenda_cfg_sync(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agenda_cfg_sync() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if new.agenda_view_mode = 'custom' then
- new.usar_horario_admin_custom := true;
- new.admin_inicio_visualizacao := new.agenda_custom_start;
- new.admin_fim_visualizacao := new.agenda_custom_end;
- else
- new.usar_horario_admin_custom := false;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.agenda_cfg_sync() OWNER TO supabase_admin;
-
---
--- Name: agendador_dias_disponiveis(text, integer, integer); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) RETURNS TABLE(data date, tem_slots boolean)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_owner_id uuid;
- v_antecedencia int;
- v_agora timestamptz;
- v_data date;
- v_data_inicio date;
- v_data_fim date;
- v_db_dow int;
- v_tem_slot boolean;
-BEGIN
- SELECT c.owner_id, c.antecedencia_minima_horas
- INTO v_owner_id, v_antecedencia
- FROM public.agendador_configuracoes c
- WHERE c.link_slug = p_slug AND c.ativo = true
- LIMIT 1;
-
- IF v_owner_id IS NULL THEN RETURN; END IF;
-
- v_agora := now();
- v_data_inicio := make_date(p_ano, p_mes, 1);
- v_data_fim := (v_data_inicio + interval '1 month' - interval '1 day')::date;
-
- v_data := v_data_inicio;
- WHILE v_data <= v_data_fim LOOP
- v_db_dow := extract(dow from v_data::timestamp)::int;
-
- SELECT EXISTS (
- SELECT 1 FROM public.agenda_online_slots s
- WHERE s.owner_id = v_owner_id
- AND s.weekday = v_db_dow
- AND s.enabled = true
- AND (v_data::text || ' ' || s.time::text)::timestamp
- AT TIME ZONE 'America/Sao_Paulo'
- >= v_agora + (v_antecedencia || ' hours')::interval
- ) INTO v_tem_slot;
-
- IF v_tem_slot THEN
- data := v_data;
- tem_slots := true;
- RETURN NEXT;
- END IF;
-
- v_data := v_data + 1;
- END LOOP;
-END;
-$$;
-
-
-ALTER FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) OWNER TO supabase_admin;
-
---
--- Name: agendador_gerar_slug(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agendador_gerar_slug() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_slug text;
- v_exists boolean;
-BEGIN
- -- só gera se ativou e não tem slug ainda
- IF NEW.ativo = true AND (NEW.link_slug IS NULL OR NEW.link_slug = '') THEN
- LOOP
- v_slug := lower(substring(replace(gen_random_uuid()::text, '-', ''), 1, 8));
- SELECT EXISTS (
- SELECT 1 FROM public.agendador_configuracoes
- WHERE link_slug = v_slug AND owner_id <> NEW.owner_id
- ) INTO v_exists;
- EXIT WHEN NOT v_exists;
- END LOOP;
- NEW.link_slug := v_slug;
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.agendador_gerar_slug() OWNER TO supabase_admin;
-
---
--- Name: agendador_slots_disponiveis(text, date); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) RETURNS TABLE(hora time without time zone, disponivel boolean)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_owner_id uuid;
- v_duracao int;
- v_antecedencia int;
- v_agora timestamptz;
- v_db_dow int;
- v_slot time;
- v_slot_fim time;
- v_slot_ts timestamptz;
- v_ocupado boolean;
- -- loop de recorrências
- v_rule RECORD;
- v_rule_start_dow int;
- v_first_occ date;
- v_day_diff int;
- v_ex_type text;
-BEGIN
- SELECT c.owner_id, c.duracao_sessao_min, c.antecedencia_minima_horas
- INTO v_owner_id, v_duracao, v_antecedencia
- FROM public.agendador_configuracoes c
- WHERE c.link_slug = p_slug AND c.ativo = true
- LIMIT 1;
-
- IF v_owner_id IS NULL THEN RETURN; END IF;
-
- v_agora := now();
- v_db_dow := extract(dow from p_data::timestamp)::int;
-
- FOR v_slot IN
- SELECT s.time
- FROM public.agenda_online_slots s
- WHERE s.owner_id = v_owner_id
- AND s.weekday = v_db_dow
- AND s.enabled = true
- ORDER BY s.time
- LOOP
- v_slot_fim := v_slot + (v_duracao || ' minutes')::interval;
- v_ocupado := false;
-
- -- ── Antecedência mínima ──────────────────────────────────────────────────
- v_slot_ts := (p_data::text || ' ' || v_slot::text)::timestamp
- AT TIME ZONE 'America/Sao_Paulo';
- IF v_slot_ts < v_agora + (v_antecedencia || ' hours')::interval THEN
- v_ocupado := true;
- END IF;
-
- -- ── Eventos avulsos internos (agenda_eventos) ────────────────────────────
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1 FROM public.agenda_eventos e
- WHERE e.owner_id = v_owner_id
- AND e.status::text NOT IN ('cancelado', 'faltou')
- AND (e.inicio_em AT TIME ZONE 'America/Sao_Paulo')::date = p_data
- AND (e.inicio_em AT TIME ZONE 'America/Sao_Paulo')::time < v_slot_fim
- AND (e.fim_em AT TIME ZONE 'America/Sao_Paulo')::time > v_slot
- ) INTO v_ocupado;
- END IF;
-
- -- ── Recorrências ativas (recurrence_rules) ───────────────────────────────
- -- Loop explícito para evitar erros de tipo no cálculo do ciclo semanal
- IF NOT v_ocupado THEN
- FOR v_rule IN
- SELECT
- r.id,
- r.start_date::date AS start_date,
- r.end_date::date AS end_date,
- r.start_time::time AS start_time,
- r.end_time::time AS end_time,
- COALESCE(r.interval, 1)::int AS interval
- FROM public.recurrence_rules r
- WHERE r.owner_id = v_owner_id
- AND r.status = 'ativo'
- AND p_data >= r.start_date::date
- AND (r.end_date IS NULL OR p_data <= r.end_date::date)
- AND v_db_dow = ANY(r.weekdays)
- AND r.start_time::time < v_slot_fim
- AND r.end_time::time > v_slot
- LOOP
- -- Calcula a primeira ocorrência do dia-da-semana a partir do start_date
- v_rule_start_dow := extract(dow from v_rule.start_date)::int;
- v_first_occ := v_rule.start_date
- + (((v_db_dow - v_rule_start_dow + 7) % 7))::int;
- v_day_diff := (p_data - v_first_occ)::int;
-
- -- Ocorrência válida: diff >= 0 e divisível pelo ciclo semanal
- IF v_day_diff >= 0 AND v_day_diff % (7 * v_rule.interval) = 0 THEN
-
- -- Verifica se há exceção para esta data
- v_ex_type := NULL;
- SELECT ex.type INTO v_ex_type
- FROM public.recurrence_exceptions ex
- WHERE ex.recurrence_id = v_rule.id
- AND ex.original_date = p_data
- LIMIT 1;
-
- -- Sem exceção, ou exceção que não cancela → bloqueia o slot
- IF v_ex_type IS NULL OR v_ex_type NOT IN (
- 'cancel_session', 'patient_missed',
- 'therapist_canceled', 'holiday_block',
- 'reschedule_session'
- ) THEN
- v_ocupado := true;
- EXIT; -- já basta uma regra que conflite
- END IF;
-
- END IF;
- END LOOP;
- END IF;
-
- -- ── Recorrências remarcadas para este dia (reschedule → new_date = p_data) ─
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1
- FROM public.recurrence_exceptions ex
- JOIN public.recurrence_rules r ON r.id = ex.recurrence_id
- WHERE r.owner_id = v_owner_id
- AND r.status = 'ativo'
- AND ex.type = 'reschedule_session'
- AND ex.new_date = p_data
- AND COALESCE(ex.new_start_time, r.start_time)::time < v_slot_fim
- AND COALESCE(ex.new_end_time, r.end_time)::time > v_slot
- ) INTO v_ocupado;
- END IF;
-
- -- ── Solicitações públicas pendentes ──────────────────────────────────────
- IF NOT v_ocupado THEN
- SELECT EXISTS (
- SELECT 1 FROM public.agendador_solicitacoes sol
- WHERE sol.owner_id = v_owner_id
- AND sol.status = 'pendente'
- AND sol.data_solicitada = p_data
- AND sol.hora_solicitada = v_slot
- AND (sol.reservado_ate IS NULL OR sol.reservado_ate > v_agora)
- ) INTO v_ocupado;
- END IF;
-
- hora := v_slot;
- disponivel := NOT v_ocupado;
- RETURN NEXT;
- END LOOP;
-END;
-$$;
-
-
-ALTER FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) OWNER TO supabase_admin;
-
---
--- Name: cancel_recurrence_from(uuid, date); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-BEGIN
- UPDATE public.recurrence_rules
- SET
- end_date = p_from_date - INTERVAL '1 day',
- open_ended = false,
- status = CASE
- WHEN p_from_date <= start_date THEN 'cancelado'
- ELSE status
- END,
- updated_at = now()
- WHERE id = p_recurrence_id;
-END;
-$$;
-
-
-ALTER FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) OWNER TO supabase_admin;
-
---
--- Name: cancel_subscription(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.cancel_subscription(p_subscription_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_owner_type text;
- v_owner_ref uuid;
-begin
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- if v_sub.status = 'canceled' then
- return v_sub;
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set status = 'canceled',
- cancel_at_period_end = false,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'canceled',
- v_sub.plan_id,
- v_sub.plan_id,
- auth.uid(),
- 'Cancelamento manual via admin',
- 'admin_panel',
- jsonb_build_object('previous_status', 'active')
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation(owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-
-end;
-$$;
-
-
-ALTER FUNCTION public.cancel_subscription(p_subscription_id uuid) OWNER TO supabase_admin;
-
---
--- Name: cancelar_eventos_serie(uuid, timestamp with time zone); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone DEFAULT now()) RETURNS integer
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-DECLARE
- v_count integer;
-BEGIN
- UPDATE public.agenda_eventos
- SET status = 'cancelado',
- updated_at = now()
- WHERE serie_id = p_serie_id
- AND inicio_em >= p_a_partir_de
- AND status NOT IN ('realizado', 'cancelado');
-
- GET DIAGNOSTICS v_count = ROW_COUNT;
- RETURN v_count;
-END;
-$$;
-
-
-ALTER FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) OWNER TO supabase_admin;
-
---
--- Name: FUNCTION cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone); Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) IS 'Cancela todos os eventos futuros de uma série a partir de p_a_partir_de (inclusive).
- Não cancela eventos já realizados.';
-
-
---
--- Name: change_subscription_plan(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_old_plan uuid;
- v_new_key text;
-
- v_owner_type text;
- v_owner_ref uuid;
-
- v_new_target text;
- v_sub_target text;
-begin
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- v_old_plan := v_sub.plan_id;
-
- if v_old_plan = p_new_plan_id then
- return v_sub;
- end if;
-
- select key, target
- into v_new_key, v_new_target
- from public.plans
- where id = p_new_plan_id;
-
- if v_new_key is null then
- raise exception 'Plano não encontrado';
- end if;
-
- v_new_target := lower(coalesce(v_new_target, ''));
-
- v_sub_target := case
- when v_sub.tenant_id is not null then 'clinic'
- else 'therapist'
- end;
-
- if v_new_target <> v_sub_target then
- raise exception 'Plano inválido para este tipo de assinatura. Assinatura é % e o plano é %.',
- v_sub_target, v_new_target
- using errcode = 'P0001';
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set plan_id = p_new_plan_id,
- plan_key = v_new_key,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'plan_changed',
- v_old_plan,
- p_new_plan_id,
- auth.uid(),
- 'Plan change via DEV menu',
- 'dev_menu',
- jsonb_build_object(
- 'previous_plan', v_old_plan,
- 'new_plan', p_new_plan_id,
- 'new_plan_key', v_new_key,
- 'new_plan_target', v_new_target
- )
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation (owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) OWNER TO supabase_admin;
-
---
--- Name: create_clinic_tenant(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_clinic_tenant(p_name text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_uid uuid;
- v_tenant uuid;
- v_name text;
-begin
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'Not authenticated';
- end if;
-
- v_name := nullif(trim(coalesce(p_name, '')), '');
- if v_name is null then
- v_name := 'Clínica';
- end if;
-
- insert into public.tenants (name, kind, created_at)
- values (v_name, 'clinic', now())
- returning id into v_tenant;
-
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_tenant, v_uid, 'tenant_admin', 'active', now());
-
- return v_tenant;
-end;
-$$;
-
-
-ALTER FUNCTION public.create_clinic_tenant(p_name text) OWNER TO supabase_admin;
-
---
--- Name: create_patient_intake_request(text, text, text, text, text, boolean); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text DEFAULT NULL::text, p_phone text DEFAULT NULL::text, p_notes text DEFAULT NULL::text, p_consent boolean DEFAULT false) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_owner uuid;
- v_active boolean;
- v_expires timestamptz;
- v_max_uses int;
- v_uses int;
- v_id uuid;
-begin
- select owner_id, active, expires_at, max_uses, uses
- into v_owner, v_active, v_expires, v_max_uses, v_uses
- from public.patient_invites
- where token = p_token
- limit 1;
-
- if v_owner is null then
- raise exception 'Token inválido';
- end if;
-
- if v_active is not true then
- raise exception 'Link desativado';
- end if;
-
- if v_expires is not null and now() > v_expires then
- raise exception 'Link expirado';
- end if;
-
- if v_max_uses is not null and v_uses >= v_max_uses then
- raise exception 'Limite de uso atingido';
- end if;
-
- if p_name is null or length(trim(p_name)) = 0 then
- raise exception 'Nome é obrigatório';
- end if;
-
- insert into public.patient_intake_requests
- (owner_id, token, name, email, phone, notes, consent, status)
- values
- (v_owner, p_token, trim(p_name),
- nullif(lower(trim(p_email)), ''),
- nullif(trim(p_phone), ''),
- nullif(trim(p_notes), ''),
- coalesce(p_consent, false),
- 'new')
- returning id into v_id;
-
- update public.patient_invites
- set uses = uses + 1
- where token = p_token;
-
- return v_id;
-end;
-$$;
-
-
-ALTER FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) OWNER TO supabase_admin;
-
---
--- Name: create_patient_intake_request_v2(text, jsonb); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $_$
-declare
- v_owner_id uuid;
- v_intake_id uuid;
- v_birth_raw text;
- v_birth date;
-begin
- select owner_id
- into v_owner_id
- from public.patient_invites
- where token = p_token;
-
- if v_owner_id is null then
- raise exception 'Token inválido ou expirado';
- end if;
-
- v_birth_raw := nullif(trim(coalesce(
- p_payload->>'data_nascimento',
- ''
- )), '');
-
- v_birth := case
- when v_birth_raw is null then null
- when v_birth_raw ~ '^\d{4}-\d{2}-\d{2}$' then v_birth_raw::date
- when v_birth_raw ~ '^\d{2}-\d{2}-\d{4}$' then to_date(v_birth_raw, 'DD-MM-YYYY')
- else null
- end;
-
- insert into public.patient_intake_requests (
- owner_id,
- token,
- status,
- consent,
-
- nome_completo,
- email_principal,
- telefone,
-
- avatar_url, -- 🔥 AQUI
-
- data_nascimento,
- cpf,
- rg,
- genero,
- estado_civil,
- profissao,
- escolaridade,
- nacionalidade,
- naturalidade,
-
- cep,
- pais,
- cidade,
- estado,
- endereco,
- numero,
- complemento,
- bairro,
-
- observacoes,
- notas_internas,
-
- encaminhado_por,
- onde_nos_conheceu
- )
- values (
- v_owner_id,
- p_token,
- 'new',
- coalesce((p_payload->>'consent')::boolean, false),
-
- nullif(trim(p_payload->>'nome_completo'), ''),
- nullif(trim(p_payload->>'email_principal'), ''),
- nullif(regexp_replace(coalesce(p_payload->>'telefone',''), '\D', '', 'g'), ''),
-
- nullif(trim(p_payload->>'avatar_url'), ''), -- 🔥 AQUI
-
- v_birth,
- nullif(regexp_replace(coalesce(p_payload->>'cpf',''), '\D', '', 'g'), ''),
- nullif(trim(p_payload->>'rg'), ''),
- nullif(trim(p_payload->>'genero'), ''),
- nullif(trim(p_payload->>'estado_civil'), ''),
- nullif(trim(p_payload->>'profissao'), ''),
- nullif(trim(p_payload->>'escolaridade'), ''),
- nullif(trim(p_payload->>'nacionalidade'), ''),
- nullif(trim(p_payload->>'naturalidade'), ''),
-
- nullif(regexp_replace(coalesce(p_payload->>'cep',''), '\D', '', 'g'), ''),
- nullif(trim(p_payload->>'pais'), ''),
- nullif(trim(p_payload->>'cidade'), ''),
- nullif(trim(p_payload->>'estado'), ''),
- nullif(trim(p_payload->>'endereco'), ''),
- nullif(trim(p_payload->>'numero'), ''),
- nullif(trim(p_payload->>'complemento'), ''),
- nullif(trim(p_payload->>'bairro'), ''),
-
- nullif(trim(p_payload->>'observacoes'), ''),
- nullif(trim(p_payload->>'notas_internas'), ''),
-
- nullif(trim(p_payload->>'encaminhado_por'), ''),
- nullif(trim(p_payload->>'onde_nos_conheceu'), '')
- )
- returning id into v_intake_id;
-
- return v_intake_id;
-end;
-$_$;
-
-
-ALTER FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) OWNER TO supabase_admin;
-
---
--- Name: create_support_session(uuid, integer); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer DEFAULT 60) RETURNS json
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_admin_id uuid;
- v_role text;
- v_token text;
- v_expires timestamp with time zone;
- v_session support_sessions;
-BEGIN
- -- Verifica autenticação
- v_admin_id := auth.uid();
- IF v_admin_id IS NULL THEN
- RAISE EXCEPTION 'Não autenticado.' USING ERRCODE = 'P0001';
- END IF;
-
- -- Verifica role saas_admin
- SELECT role INTO v_role
- FROM public.profiles
- WHERE id = v_admin_id;
-
- IF v_role <> 'saas_admin' THEN
- RAISE EXCEPTION 'Acesso negado. Somente saas_admin pode criar sessões de suporte.'
- USING ERRCODE = 'P0002';
- END IF;
-
- -- Valida TTL (1 a 120 minutos)
- IF p_ttl_minutes < 1 OR p_ttl_minutes > 120 THEN
- RAISE EXCEPTION 'TTL inválido. Use entre 1 e 120 minutos.'
- USING ERRCODE = 'P0003';
- END IF;
-
- -- Valida tenant
- IF NOT EXISTS (SELECT 1 FROM public.tenants WHERE id = p_tenant_id) THEN
- RAISE EXCEPTION 'Tenant não encontrado.'
- USING ERRCODE = 'P0004';
- END IF;
-
- -- Gera token único (64 chars hex, sem pgcrypto)
- v_token := replace(gen_random_uuid()::text, '-', '') || replace(gen_random_uuid()::text, '-', '');
- v_expires := now() + (p_ttl_minutes || ' minutes')::interval;
-
- -- Insere sessão
- INSERT INTO public.support_sessions (tenant_id, admin_id, token, expires_at)
- VALUES (p_tenant_id, v_admin_id, v_token, v_expires)
- RETURNING * INTO v_session;
-
- RETURN json_build_object(
- 'token', v_session.token,
- 'expires_at', v_session.expires_at,
- 'session_id', v_session.id
- );
-END;
-$$;
-
-
-ALTER FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) OWNER TO supabase_admin;
-
---
--- Name: current_member_id(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.current_member_id(p_tenant_id uuid) RETURNS uuid
- LANGUAGE sql STABLE
- AS $$
- select tm.id
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- limit 1
-$$;
-
-
-ALTER FUNCTION public.current_member_id(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: current_member_role(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.current_member_role(p_tenant_id uuid) RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select tm.role
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- limit 1
-$$;
-
-
-ALTER FUNCTION public.current_member_role(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: delete_commitment_full(uuid, uuid); Type: FUNCTION; Schema: public; Owner: postgres
---
-
-CREATE FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_is_native boolean;
- v_fields int := 0;
- v_logs int := 0;
- v_parent int := 0;
-begin
- if auth.uid() is null then
- raise exception 'Not authenticated';
- end if;
-
- if not exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.status = 'active'
- ) then
- raise exception 'Not allowed';
- end if;
-
- select dc.is_native
- into v_is_native
- from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
-
- if v_is_native is null then
- raise exception 'Commitment not found';
- end if;
-
- if v_is_native = true then
- raise exception 'Cannot delete native commitment';
- end if;
-
- delete from public.determined_commitment_fields
- where tenant_id = p_tenant_id
- and commitment_id = p_commitment_id;
- get diagnostics v_fields = row_count;
-
- delete from public.commitment_time_logs
- where tenant_id = p_tenant_id
- and commitment_id = p_commitment_id;
- get diagnostics v_logs = row_count;
-
- delete from public.determined_commitments
- where tenant_id = p_tenant_id
- and id = p_commitment_id;
- get diagnostics v_parent = row_count;
-
- if v_parent <> 1 then
- raise exception 'Parent not deleted (RLS/owner issue).';
- end if;
-
- return jsonb_build_object(
- 'ok', true,
- 'deleted', jsonb_build_object(
- 'fields', v_fields,
- 'logs', v_logs,
- 'commitment', v_parent
- )
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) OWNER TO postgres;
-
---
--- Name: delete_determined_commitment(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_is_native boolean;
- v_fields_deleted int := 0;
- v_logs_deleted int := 0;
- v_commitment_deleted int := 0;
-begin
- if auth.uid() is null then
- raise exception 'Not authenticated';
- end if;
-
- if not exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.status = 'active'
- ) then
- raise exception 'Not allowed';
- end if;
-
- select dc.is_native
- into v_is_native
- from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
-
- if v_is_native is null then
- raise exception 'Commitment not found for tenant';
- end if;
-
- if v_is_native = true then
- raise exception 'Cannot delete native commitment';
- end if;
-
- delete from public.determined_commitment_fields f
- where f.tenant_id = p_tenant_id
- and f.commitment_id = p_commitment_id;
- get diagnostics v_fields_deleted = row_count;
-
- delete from public.commitment_time_logs l
- where l.tenant_id = p_tenant_id
- and l.commitment_id = p_commitment_id;
- get diagnostics v_logs_deleted = row_count;
-
- delete from public.determined_commitments dc
- where dc.tenant_id = p_tenant_id
- and dc.id = p_commitment_id;
- get diagnostics v_commitment_deleted = row_count;
-
- if v_commitment_deleted <> 1 then
- raise exception 'Delete did not remove the commitment (tenant mismatch?)';
- end if;
-
- return jsonb_build_object(
- 'ok', true,
- 'tenant_id', p_tenant_id,
- 'commitment_id', p_commitment_id,
- 'deleted', jsonb_build_object(
- 'fields', v_fields_deleted,
- 'logs', v_logs_deleted,
- 'commitment', v_commitment_deleted
- )
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) OWNER TO supabase_admin;
-
---
--- Name: dev_list_auth_users(integer); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_list_auth_users(p_limit integer DEFAULT 50) RETURNS TABLE(id uuid, email text, created_at timestamp with time zone)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-begin
- -- só saas_admin pode ver
- if not exists (
- select 1
- from public.profiles p
- where p.id = auth.uid()
- and p.role = 'saas_admin'
- ) then
- return;
- end if;
-
- return query
- select
- u.id,
- u.email,
- u.created_at
- from auth.users u
- order by u.created_at desc
- limit greatest(1, least(coalesce(p_limit, 50), 500));
-end;
-$$;
-
-
-ALTER FUNCTION public.dev_list_auth_users(p_limit integer) OWNER TO supabase_admin;
-
---
--- Name: dev_list_custom_users(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_list_custom_users() RETURNS TABLE(user_id uuid, email text, created_at timestamp with time zone, global_role text, tenant_role text, tenant_id uuid, password_dev text, kind text)
- LANGUAGE sql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
- with base as (
- select
- u.id as user_id,
- lower(u.email) as email,
- u.created_at
- from auth.users u
- where lower(u.email) not in (
- 'clinic@agenciapsi.com.br',
- 'therapist@agenciapsi.com.br',
- 'patient@agenciapsi.com.br',
- 'saas@agenciapsi.com.br'
- )
- ),
- prof as (
- select p.id, p.role as global_role
- from public.profiles p
- ),
- last_membership as (
- select distinct on (tm.user_id)
- tm.user_id,
- tm.tenant_id,
- tm.role as tenant_role,
- tm.created_at
- from public.tenant_members tm
- where tm.status = 'active'
- order by tm.user_id, tm.created_at desc
- )
- select
- b.user_id,
- b.email,
- b.created_at,
- pr.global_role,
- lm.tenant_role,
- lm.tenant_id,
- dc.password_dev,
- dc.kind
- from base b
- left join prof pr on pr.id = b.user_id
- left join last_membership lm on lm.user_id = b.user_id
- left join public.dev_user_credentials dc on lower(dc.email) = b.email
- order by b.created_at desc;
-$$;
-
-
-ALTER FUNCTION public.dev_list_custom_users() OWNER TO supabase_admin;
-
---
--- Name: dev_list_intent_leads(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_list_intent_leads() RETURNS TABLE(email text, last_intent_at timestamp with time zone, plan_key text, billing_interval text, status text, tenant_id uuid)
- LANGUAGE sql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
- select
- lower(si.email) as email,
- max(si.created_at) as last_intent_at,
- (array_agg(si.plan_key order by si.created_at desc))[1] as plan_key,
- (array_agg(si.interval order by si.created_at desc))[1] as billing_interval,
- (array_agg(si.status order by si.created_at desc))[1] as status,
- (array_agg(si.tenant_id order by si.created_at desc))[1] as tenant_id
- from public.subscription_intents si
- where si.email is not null
- and not exists (
- select 1
- from auth.users au
- where lower(au.email) = lower(si.email)
- )
- group by lower(si.email)
- order by max(si.created_at) desc;
-$$;
-
-
-ALTER FUNCTION public.dev_list_intent_leads() OWNER TO supabase_admin;
-
---
--- Name: dev_public_debug_snapshot(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.dev_public_debug_snapshot() RETURNS TABLE(users_total integer, tenants_total integer, intents_new_total integer, latest_intents jsonb)
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $_$
-declare
- v_latest jsonb;
-begin
- select jsonb_agg(
- jsonb_build_object(
- 'created_at', si.created_at,
- 'email_masked',
- regexp_replace(lower(si.email), '(^.).*(@.*$)', '\1***\2'),
- 'plan_key', si.plan_key,
- 'status', si.status
- )
- order by si.created_at desc
- )
- into v_latest
- from (
- select si.*
- from public.subscription_intents si
- where si.email is not null
- order by si.created_at desc
- limit 5
- ) si;
-
- return query
- select
- (select count(*)::int from auth.users) as users_total,
- (select count(*)::int from public.tenants) as tenants_total,
- (select count(*)::int from public.subscription_intents where status = 'new') as intents_new_total,
- coalesce(v_latest, '[]'::jsonb) as latest_intents;
-end;
-$_$;
-
-
-ALTER FUNCTION public.dev_public_debug_snapshot() OWNER TO supabase_admin;
-
---
--- Name: ensure_personal_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.ensure_personal_tenant() RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-DECLARE
- v_uid uuid;
- v_existing uuid;
-BEGIN
- v_uid := auth.uid();
- IF v_uid IS NULL THEN
- RAISE EXCEPTION 'Not authenticated';
- END IF;
-
- SELECT tm.tenant_id INTO v_existing
- FROM public.tenant_members tm
- JOIN public.tenants t ON t.id = tm.tenant_id
- WHERE tm.user_id = v_uid
- AND tm.status = 'active'
- AND t.kind IN ('therapist', 'saas')
- ORDER BY tm.created_at DESC
- LIMIT 1;
-
- IF v_existing IS NOT NULL THEN
- RETURN v_existing;
- END IF;
-
- RETURN public.provision_account_tenant(v_uid, 'therapist');
-END;
-$$;
-
-
-ALTER FUNCTION public.ensure_personal_tenant() OWNER TO supabase_admin;
-
---
--- Name: ensure_personal_tenant_for_user(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_uid uuid;
- v_existing uuid;
- v_tenant uuid;
- v_email text;
- v_name text;
-begin
- v_uid := p_user_id;
- if v_uid is null then
- raise exception 'Missing user id';
- end if;
-
- -- só considera tenant pessoal (kind='saas')
- select tm.tenant_id
- into v_existing
- from public.tenant_members tm
- join public.tenants t on t.id = tm.tenant_id
- where tm.user_id = v_uid
- and tm.status = 'active'
- and t.kind = 'saas'
- order by tm.created_at desc
- limit 1;
-
- if v_existing is not null then
- return v_existing;
- end if;
-
- select email into v_email
- from auth.users
- where id = v_uid;
-
- v_name := coalesce(split_part(v_email, '@', 1), 'Conta');
-
- insert into public.tenants (name, kind, created_at)
- values (v_name || ' (Pessoal)', 'saas', now())
- returning id into v_tenant;
-
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_tenant, v_uid, 'tenant_admin', 'active', now());
-
- return v_tenant;
-end;
-$$;
-
-
-ALTER FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: faq_votar(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.faq_votar(faq_id uuid) RETURNS void
- LANGUAGE sql SECURITY DEFINER
- AS $$
- update public.saas_faq
- set votos = votos + 1,
- updated_at = now()
- where id = faq_id
- and ativo = true;
-$$;
-
-
-ALTER FUNCTION public.faq_votar(faq_id uuid) OWNER TO supabase_admin;
-
---
--- Name: fix_all_subscription_mismatches(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.fix_all_subscription_mismatches() RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- r record;
-begin
- for r in
- select distinct s.user_id as owner_id
- from public.subscriptions s
- where s.status = 'active'
- and s.user_id is not null
- loop
- perform public.rebuild_owner_entitlements(r.owner_id);
- end loop;
-end;
-$$;
-
-
-ALTER FUNCTION public.fix_all_subscription_mismatches() OWNER TO supabase_admin;
-
---
--- Name: fn_agenda_regras_semanais_no_overlap(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.fn_agenda_regras_semanais_no_overlap() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- v_count int;
-begin
- if new.ativo is false then
- return new;
- end if;
-
- select count(*) into v_count
- from public.agenda_regras_semanais r
- where r.owner_id = new.owner_id
- and r.dia_semana = new.dia_semana
- and r.ativo is true
- and (tg_op = 'INSERT' or r.id <> new.id)
- and (new.hora_inicio < r.hora_fim and new.hora_fim > r.hora_inicio);
-
- if v_count > 0 then
- raise exception 'Janela sobreposta: já existe uma regra ativa nesse intervalo.';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.fn_agenda_regras_semanais_no_overlap() OWNER TO supabase_admin;
-
---
--- Name: get_my_email(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.get_my_email() RETURNS text
- LANGUAGE sql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
- select lower(email)
- from auth.users
- where id = auth.uid();
-$$;
-
-
-ALTER FUNCTION public.get_my_email() OWNER TO supabase_admin;
-
---
--- Name: guard_account_type_immutable(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_account_type_immutable() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF OLD.account_type <> 'free' AND NEW.account_type IS DISTINCT FROM OLD.account_type THEN
- RAISE EXCEPTION 'account_type é imutável após escolha (atual: "%" para tentativa: "%"). Para mudar de perfil, crie uma nova conta.', OLD.account_type, NEW.account_type
- USING ERRCODE = 'P0001';
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.guard_account_type_immutable() OWNER TO supabase_admin;
-
---
--- Name: guard_locked_commitment(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_locked_commitment() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if (old.is_locked = true) then
- if (tg_op = 'DELETE') then
- raise exception 'Compromisso bloqueado não pode ser excluído.';
- end if;
-
- if (tg_op = 'UPDATE') then
- if (new.active = false) then
- raise exception 'Compromisso bloqueado não pode ser desativado.';
- end if;
-
- -- trava renomear (mantém o "Sessão" sempre igual)
- if (new.name is distinct from old.name) then
- raise exception 'Compromisso bloqueado não pode ser renomeado.';
- end if;
-
- -- se quiser travar descrição também, descomente:
- -- if (new.description is distinct from old.description) then
- -- raise exception 'Compromisso bloqueado não pode alterar descrição.';
- -- end if;
- end if;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.guard_locked_commitment() OWNER TO supabase_admin;
-
---
--- Name: guard_no_change_core_plan_key(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_no_change_core_plan_key() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if old.key in ('clinic_free','clinic_pro','therapist_free','therapist_pro')
- and new.key is distinct from old.key then
- raise exception 'Não é permitido alterar a key do plano padrão (%).', old.key
- using errcode = 'P0001';
- end if;
-
- return new;
-end $$;
-
-
-ALTER FUNCTION public.guard_no_change_core_plan_key() OWNER TO supabase_admin;
-
---
--- Name: guard_no_change_plan_target(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_no_change_plan_target() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- v_bypass text;
-begin
- -- bypass controlado por sessão/transação:
- -- só passa se app.plan_migration_bypass = '1'
- v_bypass := current_setting('app.plan_migration_bypass', true);
-
- if v_bypass = '1' then
- return new;
- end if;
-
- -- comportamento original (bloqueia qualquer mudança)
- if new.target is distinct from old.target then
- raise exception 'Não é permitido alterar target do plano (%) de % para %.',
- old.key, old.target, new.target
- using errcode = 'P0001';
- end if;
-
- return new;
-end
-$$;
-
-
-ALTER FUNCTION public.guard_no_change_plan_target() OWNER TO supabase_admin;
-
---
--- Name: guard_no_delete_core_plans(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_no_delete_core_plans() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if old.key in ('clinic_free','clinic_pro','therapist_free','therapist_pro') then
- raise exception 'Plano padrão (%) não pode ser removido.', old.key
- using errcode = 'P0001';
- end if;
-
- return old;
-end $$;
-
-
-ALTER FUNCTION public.guard_no_delete_core_plans() OWNER TO supabase_admin;
-
---
--- Name: guard_patient_cannot_own_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_patient_cannot_own_tenant() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_account_type text;
-BEGIN
- SELECT account_type INTO v_account_type
- FROM public.profiles
- WHERE id = NEW.user_id;
-
- IF v_account_type = 'patient' AND NEW.role IN ('tenant_admin', 'therapist') THEN
- RAISE EXCEPTION 'Usuário com perfil "patient" não pode ser proprietário ou terapeuta de um tenant. Se tornou profissional? Crie uma nova conta.'
- USING ERRCODE = 'P0001';
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.guard_patient_cannot_own_tenant() OWNER TO supabase_admin;
-
---
--- Name: guard_tenant_kind_immutable(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.guard_tenant_kind_immutable() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF NEW.kind IS DISTINCT FROM OLD.kind THEN
- RAISE EXCEPTION 'tenants.kind é imutável após criação. Tentativa de alterar "%" para "%".', OLD.kind, NEW.kind
- USING ERRCODE = 'P0001';
- END IF;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.guard_tenant_kind_immutable() OWNER TO supabase_admin;
-
---
--- Name: handle_new_user(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.handle_new_user() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-BEGIN
- INSERT INTO public.profiles (id, role, account_type)
- VALUES (NEW.id, 'portal_user', 'free')
- ON CONFLICT (id) DO NOTHING;
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.handle_new_user() OWNER TO supabase_admin;
-
---
--- Name: handle_new_user_create_personal_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.handle_new_user_create_personal_tenant() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-BEGIN
- -- Desabilitado. Tenant criado no onboarding via provision_account_tenant().
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.handle_new_user_create_personal_tenant() OWNER TO supabase_admin;
-
---
--- Name: has_feature(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.owner_feature_entitlements e
- where e.owner_id = p_owner_id
- and e.feature_key = p_feature_key
- );
-$$;
-
-
-ALTER FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) OWNER TO supabase_admin;
-
---
--- Name: is_clinic_tenant(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_clinic_tenant(_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- SELECT EXISTS (
- SELECT 1 FROM public.tenants t
- WHERE t.id = _tenant_id
- AND t.kind IN ('clinic', 'clinic_coworking', 'clinic_reception', 'clinic_full')
- );
-$$;
-
-
-ALTER FUNCTION public.is_clinic_tenant(_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: is_saas_admin(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_saas_admin() RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1 from public.saas_admins sa
- where sa.user_id = auth.uid()
- );
-$$;
-
-
-ALTER FUNCTION public.is_saas_admin() OWNER TO supabase_admin;
-
---
--- Name: is_tenant_admin(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_tenant_admin(p_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
- select exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.role = 'tenant_admin'
- and tm.status = 'active'
- );
-$$;
-
-
-ALTER FUNCTION public.is_tenant_admin(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: is_tenant_member(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_tenant_member(_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.tenant_members m
- where m.tenant_id = _tenant_id
- and m.user_id = auth.uid()
- and m.status = 'active'
- );
-$$;
-
-
-ALTER FUNCTION public.is_tenant_member(_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: is_therapist_tenant(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.is_therapist_tenant(_tenant_id uuid) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- SELECT EXISTS (
- SELECT 1 FROM public.tenants t
- WHERE t.id = _tenant_id AND t.kind = 'therapist'
- );
-$$;
-
-
-ALTER FUNCTION public.is_therapist_tenant(_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: jwt_email(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.jwt_email() RETURNS text
- LANGUAGE sql STABLE
- AS $$
- select nullif(lower(current_setting('request.jwt.claim.email', true)), '');
-$$;
-
-
-ALTER FUNCTION public.jwt_email() OWNER TO supabase_admin;
-
---
--- Name: my_tenants(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.my_tenants() RETURNS TABLE(tenant_id uuid, role text, status text, kind text)
- LANGUAGE sql STABLE
- AS $$
- select
- tm.tenant_id,
- tm.role,
- tm.status,
- t.kind
- from public.tenant_members tm
- join public.tenants t on t.id = tm.tenant_id
- where tm.user_id = auth.uid();
-$$;
-
-
-ALTER FUNCTION public.my_tenants() OWNER TO supabase_admin;
-
---
--- Name: on_new_user_seed_patient_groups(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.on_new_user_seed_patient_groups() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
- BEGIN
- PERFORM public.seed_default_patient_groups(NEW.id);
- RETURN NEW;
- END;
- $$;
-
-
-ALTER FUNCTION public.on_new_user_seed_patient_groups() OWNER TO supabase_admin;
-
---
--- Name: patients_validate_member_consistency(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.patients_validate_member_consistency() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_tenant_responsible uuid;
- v_tenant_therapist uuid;
-BEGIN
- -- responsible_member sempre deve existir e ser do tenant
- SELECT tenant_id INTO v_tenant_responsible
- FROM public.tenant_members
- WHERE id = NEW.responsible_member_id;
-
- IF v_tenant_responsible IS NULL THEN
- RAISE EXCEPTION 'Responsible member not found';
- END IF;
-
- IF NEW.tenant_id IS NULL THEN
- RAISE EXCEPTION 'tenant_id is required';
- END IF;
-
- IF v_tenant_responsible <> NEW.tenant_id THEN
- RAISE EXCEPTION 'Responsible member must belong to the same tenant';
- END IF;
-
- -- therapist scope: therapist_member_id deve existir e ser do mesmo tenant
- IF NEW.patient_scope = 'therapist' THEN
- IF NEW.therapist_member_id IS NULL THEN
- RAISE EXCEPTION 'therapist_member_id is required when patient_scope=therapist';
- END IF;
-
- SELECT tenant_id INTO v_tenant_therapist
- FROM public.tenant_members
- WHERE id = NEW.therapist_member_id;
-
- IF v_tenant_therapist IS NULL THEN
- RAISE EXCEPTION 'Therapist member not found';
- END IF;
-
- IF v_tenant_therapist <> NEW.tenant_id THEN
- RAISE EXCEPTION 'Therapist member must belong to the same tenant';
- END IF;
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.patients_validate_member_consistency() OWNER TO supabase_admin;
-
---
--- Name: patients_validate_responsible_member_tenant(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.patients_validate_responsible_member_tenant() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- m_tenant uuid;
-begin
- select tenant_id into m_tenant
- from public.tenant_members
- where id = new.responsible_member_id;
-
- if m_tenant is null then
- raise exception 'Responsible member not found';
- end if;
-
- if new.tenant_id is null then
- raise exception 'tenant_id is required';
- end if;
-
- if m_tenant <> new.tenant_id then
- raise exception 'Responsible member must belong to the same tenant';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.patients_validate_responsible_member_tenant() OWNER TO supabase_admin;
-
---
--- Name: prevent_promoting_to_system(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.prevent_promoting_to_system() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if new.is_system = true and old.is_system is distinct from true then
- raise exception 'Não é permitido transformar um grupo comum em grupo do sistema.';
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.prevent_promoting_to_system() OWNER TO supabase_admin;
-
---
--- Name: prevent_saas_membership(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.prevent_saas_membership() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- IF EXISTS (
- SELECT 1
- FROM public.profiles
- WHERE id = NEW.user_id
- AND role = 'saas_admin'
- ) THEN
- RAISE EXCEPTION 'SaaS admin cannot belong to tenant';
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.prevent_saas_membership() OWNER TO supabase_admin;
-
---
--- Name: prevent_system_group_changes(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.prevent_system_group_changes() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- -- Se for grupo do sistema, regras rígidas:
- if old.is_system = true then
-
- -- nunca pode deletar
- if tg_op = 'DELETE' then
- raise exception 'Grupos padrão do sistema não podem ser alterados ou excluídos.';
- end if;
-
- if tg_op = 'UPDATE' then
- -- permite SOMENTE mudar tenant_id e/ou updated_at
- -- qualquer mudança de conteúdo permanece proibida
- if
- new.nome is distinct from old.nome or
- new.descricao is distinct from old.descricao or
- new.cor is distinct from old.cor or
- new.is_active is distinct from old.is_active or
- new.is_system is distinct from old.is_system or
- new.owner_id is distinct from old.owner_id or
- new.therapist_id is distinct from old.therapist_id or
- new.created_at is distinct from old.created_at
- then
- raise exception 'Grupos padrão do sistema não podem ser alterados ou excluídos.';
- end if;
-
- -- chegou aqui: só tenant_id/updated_at mudaram -> ok
- return new;
- end if;
-
- end if;
-
- -- não-system: deixa passar
- if tg_op = 'DELETE' then
- return old;
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.prevent_system_group_changes() OWNER TO supabase_admin;
-
---
--- Name: provision_account_tenant(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text DEFAULT NULL::text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-DECLARE
- v_tenant_id uuid;
- v_account_type text;
- v_name text;
-BEGIN
- IF p_kind NOT IN ('therapist', 'clinic_coworking', 'clinic_reception', 'clinic_full') THEN
- RAISE EXCEPTION 'kind inválido: "%". Use: therapist, clinic_coworking, clinic_reception, clinic_full.', p_kind
- USING ERRCODE = 'P0001';
- END IF;
-
- v_account_type := CASE WHEN p_kind = 'therapist' THEN 'therapist' ELSE 'clinic' END;
-
- IF EXISTS (
- SELECT 1
- FROM public.tenant_members tm
- JOIN public.tenants t ON t.id = tm.tenant_id
- WHERE tm.user_id = p_user_id
- AND tm.role = 'tenant_admin'
- AND tm.status = 'active'
- AND t.kind = p_kind
- ) THEN
- RAISE EXCEPTION 'Usuário já possui um tenant do tipo "%".', p_kind
- USING ERRCODE = 'P0001';
- END IF;
-
- v_name := COALESCE(
- NULLIF(TRIM(p_name), ''),
- (
- SELECT COALESCE(NULLIF(TRIM(pr.full_name), ''), SPLIT_PART(au.email, '@', 1))
- FROM public.profiles pr
- JOIN auth.users au ON au.id = pr.id
- WHERE pr.id = p_user_id
- ),
- 'Conta'
- );
-
- INSERT INTO public.tenants (name, kind, created_at)
- VALUES (v_name, p_kind, now())
- RETURNING id INTO v_tenant_id;
-
- INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
- VALUES (v_tenant_id, p_user_id, 'tenant_admin', 'active', now());
-
- UPDATE public.profiles
- SET account_type = v_account_type
- WHERE id = p_user_id;
-
- PERFORM public.seed_determined_commitments(v_tenant_id);
-
- RETURN v_tenant_id;
-END;
-$$;
-
-
-ALTER FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) OWNER TO supabase_admin;
-
---
--- Name: FUNCTION provision_account_tenant(p_user_id uuid, p_kind text, p_name text); Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) IS 'Cria o tenant do tipo correto e atualiza account_type no profile. Chamar no onboarding após escolha/pagamento de plano therapist ou clinic. p_kind: therapist | clinic_coworking | clinic_reception | clinic_full';
-
-
---
--- Name: reactivate_subscription(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.reactivate_subscription(p_subscription_id uuid) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_owner_type text;
- v_owner_ref uuid;
-begin
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id
- for update;
-
- if not found then
- raise exception 'Subscription não encontrada';
- end if;
-
- if v_sub.status = 'active' then
- return v_sub;
- end if;
-
- if v_sub.tenant_id is not null then
- v_owner_type := 'clinic';
- v_owner_ref := v_sub.tenant_id;
- elsif v_sub.user_id is not null then
- v_owner_type := 'therapist';
- v_owner_ref := v_sub.user_id;
- else
- v_owner_type := null;
- v_owner_ref := null;
- end if;
-
- update public.subscriptions
- set status = 'active',
- cancel_at_period_end = false,
- updated_at = now()
- where id = p_subscription_id
- returning * into v_sub;
-
- insert into public.subscription_events(
- subscription_id,
- owner_id,
- owner_type,
- owner_ref,
- event_type,
- old_plan_id,
- new_plan_id,
- created_by,
- reason,
- source,
- metadata
- )
- values (
- v_sub.id,
- v_owner_ref,
- v_owner_type,
- v_owner_ref,
- 'reactivated',
- v_sub.plan_id,
- v_sub.plan_id,
- auth.uid(),
- 'Reativação manual via admin',
- 'admin_panel',
- jsonb_build_object('previous_status', 'canceled')
- );
-
- if v_owner_ref is not null then
- insert into public.entitlements_invalidation(owner_id, changed_at)
- values (v_owner_ref, now())
- on conflict (owner_id)
- do update set changed_at = excluded.changed_at;
- end if;
-
- return v_sub;
-
-end;
-$$;
-
-
-ALTER FUNCTION public.reactivate_subscription(p_subscription_id uuid) OWNER TO supabase_admin;
-
---
--- Name: rebuild_owner_entitlements(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_plan_id uuid;
-begin
- -- Plano ativo do owner (owner = subscriptions.user_id)
- select s.plan_id
- into v_plan_id
- from public.subscriptions s
- where s.user_id = p_owner_id
- and s.status = 'active'
- order by s.created_at desc
- limit 1;
-
- -- Sempre zera entitlements do owner (rebuild)
- delete from public.owner_feature_entitlements e
- where e.owner_id = p_owner_id;
-
- -- Se não tem assinatura ativa, acabou
- if v_plan_id is null then
- return;
- end if;
-
- -- Recria entitlements esperados pelo plano
- insert into public.owner_feature_entitlements (owner_id, feature_key, sources, limits_list)
- select
- p_owner_id as owner_id,
- f.key as feature_key,
- array['plan'::text] as sources,
- '{}'::jsonb as limits_list
- from public.plan_features pf
- join public.features f on f.id = pf.feature_id
- where pf.plan_id = v_plan_id;
-
-end;
-$$;
-
-
-ALTER FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) OWNER TO supabase_admin;
-
---
--- Name: revoke_support_session(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.revoke_support_session(p_token text) RETURNS boolean
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_admin_id uuid;
- v_role text;
-BEGIN
- v_admin_id := auth.uid();
- IF v_admin_id IS NULL THEN
- RAISE EXCEPTION 'Não autenticado.' USING ERRCODE = 'P0001';
- END IF;
-
- SELECT role INTO v_role FROM public.profiles WHERE id = v_admin_id;
- IF v_role <> 'saas_admin' THEN
- RAISE EXCEPTION 'Acesso negado.' USING ERRCODE = 'P0002';
- END IF;
-
- DELETE FROM public.support_sessions
- WHERE token = p_token
- AND admin_id = v_admin_id;
-
- RETURN FOUND;
-END;
-$$;
-
-
-ALTER FUNCTION public.revoke_support_session(p_token text) OWNER TO supabase_admin;
-
---
--- Name: rotate_patient_invite_token(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.rotate_patient_invite_token(p_new_token text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- v_uid uuid;
- v_id uuid;
-begin
- -- pega o usuário logado
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'Usuário não autenticado';
- end if;
-
- -- desativa tokens antigos ativos do usuário
- update public.patient_invites
- set active = false
- where owner_id = v_uid
- and active = true;
-
- -- cria novo token
- insert into public.patient_invites (owner_id, token, active)
- values (v_uid, p_new_token, true)
- returning id into v_id;
-
- return v_id;
-end;
-$$;
-
-
-ALTER FUNCTION public.rotate_patient_invite_token(p_new_token text) OWNER TO supabase_admin;
-
---
--- Name: saas_votar_doc(uuid, boolean); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_uid uuid := auth.uid();
- v_voto_antigo boolean;
-begin
- if v_uid is null then
- raise exception 'Não autenticado';
- end if;
-
- -- Verifica se já votou
- select util into v_voto_antigo
- from public.saas_doc_votos
- where doc_id = p_doc_id and user_id = v_uid;
-
- if found then
- -- Já votou igual → cancela o voto (toggle)
- if v_voto_antigo = p_util then
- delete from public.saas_doc_votos
- where doc_id = p_doc_id and user_id = v_uid;
-
- update public.saas_docs set
- votos_util = greatest(0, votos_util - (case when p_util then 1 else 0 end)),
- votos_nao_util = greatest(0, votos_nao_util - (case when not p_util then 1 else 0 end)),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'removido', 'util', null);
- else
- -- Mudou de voto
- update public.saas_doc_votos set util = p_util, updated_at = now()
- where doc_id = p_doc_id and user_id = v_uid;
-
- update public.saas_docs set
- votos_util = greatest(0, votos_util + (case when p_util then 1 else -1 end)),
- votos_nao_util = greatest(0, votos_nao_util + (case when not p_util then 1 else -1 end)),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'atualizado', 'util', p_util);
- end if;
- else
- -- Primeiro voto
- insert into public.saas_doc_votos (doc_id, user_id, util)
- values (p_doc_id, v_uid, p_util);
-
- update public.saas_docs set
- votos_util = votos_util + (case when p_util then 1 else 0 end),
- votos_nao_util = votos_nao_util + (case when not p_util then 1 else 0 end),
- updated_at = now()
- where id = p_doc_id;
-
- return jsonb_build_object('acao', 'registrado', 'util', p_util);
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) OWNER TO supabase_admin;
-
---
--- Name: seed_determined_commitments(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.seed_determined_commitments(p_tenant_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_id uuid;
-begin
- -- Sessão (locked + sempre ativa)
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'session'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'session', true, true, 'Sessão', 'Sessão com paciente');
- end if;
-
- -- Leitura
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'reading'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'reading', false, true, 'Leitura', 'Praticar leitura');
- end if;
-
- -- Supervisão
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'supervision'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'supervision', false, true, 'Supervisão', 'Supervisão');
- end if;
-
- -- Aula ✅ (corrigido)
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'class'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'class', false, false, 'Aula', 'Dar aula');
- end if;
-
- -- Análise pessoal
- if not exists (
- select 1 from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'analysis'
- ) then
- insert into public.determined_commitments
- (tenant_id, is_native, native_key, is_locked, active, name, description)
- values
- (p_tenant_id, true, 'analysis', false, true, 'Análise Pessoal', 'Minha análise pessoal');
- end if;
-
- -- -------------------------------------------------------
- -- Campos padrão (idempotentes por (commitment_id, key))
- -- -------------------------------------------------------
-
- -- Leitura
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'reading'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'book') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'book', 'Livro', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'author') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'author', 'Autor', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Supervisão
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'supervision'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'supervisor') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'supervisor', 'Supervisor', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'topic') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'topic', 'Assunto', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Aula
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'class'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'theme') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'theme', 'Tema', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'group') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'group', 'Turma', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-
- -- Análise
- select id into v_id
- from public.determined_commitments
- where tenant_id = p_tenant_id and is_native = true and native_key = 'analysis'
- limit 1;
-
- if v_id is not null then
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'analyst') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'analyst', 'Analista', 'text', false, 10);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'focus') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'focus', 'Foco', 'text', false, 20);
- end if;
-
- if not exists (select 1 from public.determined_commitment_fields where commitment_id = v_id and key = 'notes') then
- insert into public.determined_commitment_fields (tenant_id, commitment_id, key, label, field_type, required, sort_order)
- values (p_tenant_id, v_id, 'notes', 'Observação', 'textarea', false, 30);
- end if;
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.seed_determined_commitments(p_tenant_id uuid) OWNER TO supabase_admin;
-
---
--- Name: set_insurance_plans_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_insurance_plans_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN NEW.updated_at = now(); RETURN NEW; END; $$;
-
-
-ALTER FUNCTION public.set_insurance_plans_updated_at() OWNER TO supabase_admin;
-
---
--- Name: set_owner_id(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_owner_id() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if new.owner_id is null then
- new.owner_id := auth.uid();
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.set_owner_id() OWNER TO supabase_admin;
-
---
--- Name: set_services_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_services_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.set_services_updated_at() OWNER TO supabase_admin;
-
---
--- Name: set_tenant_feature_exception(uuid, text, boolean, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text DEFAULT NULL::text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-begin
- -- ✅ Só owner ou admin do tenant podem alterar features
- if not exists (
- select 1 from public.tenant_members
- where tenant_id = p_tenant_id
- and user_id = auth.uid()
- and role in ('owner', 'admin')
- and status = 'active'
- ) then
- raise exception 'Acesso negado: apenas owner/admin pode alterar features do tenant.';
- end if;
-
- insert into public.tenant_features (tenant_id, feature_key, enabled)
- values (p_tenant_id, p_feature_key, p_enabled)
- on conflict (tenant_id, feature_key)
- do update set enabled = excluded.enabled;
-
- insert into public.tenant_feature_exceptions_log (
- tenant_id, feature_key, enabled, reason, created_by
- ) values (
- p_tenant_id, p_feature_key, p_enabled, p_reason, auth.uid()
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) OWNER TO supabase_admin;
-
---
--- Name: set_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- new.updated_at = now();
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.set_updated_at() OWNER TO supabase_admin;
-
---
--- Name: set_updated_at_recurrence(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.set_updated_at_recurrence() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN NEW.updated_at = now(); RETURN NEW; END;
-$$;
-
-
-ALTER FUNCTION public.set_updated_at_recurrence() OWNER TO supabase_admin;
-
---
--- Name: split_recurrence_at(uuid, date); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_old public.recurrence_rules;
- v_new_id uuid;
-BEGIN
- -- busca a regra original
- SELECT * INTO v_old
- FROM public.recurrence_rules
- WHERE id = p_recurrence_id;
-
- IF NOT FOUND THEN
- RAISE EXCEPTION 'recurrence_rule % não encontrada', p_recurrence_id;
- END IF;
-
- -- encerra a regra antiga na data anterior
- UPDATE public.recurrence_rules
- SET
- end_date = p_from_date - INTERVAL '1 day',
- open_ended = false,
- updated_at = now()
- WHERE id = p_recurrence_id;
-
- -- cria nova regra a partir de p_from_date
- INSERT INTO public.recurrence_rules (
- tenant_id, owner_id, therapist_id, patient_id,
- determined_commitment_id, type, interval, weekdays,
- start_time, end_time, timezone, duration_min,
- start_date, end_date, max_occurrences, open_ended,
- modalidade, titulo_custom, observacoes, extra_fields, status
- )
- SELECT
- tenant_id, owner_id, therapist_id, patient_id,
- determined_commitment_id, type, interval, weekdays,
- start_time, end_time, timezone, duration_min,
- p_from_date, v_old.end_date, v_old.max_occurrences, v_old.open_ended,
- modalidade, titulo_custom, observacoes, extra_fields, status
- FROM public.recurrence_rules
- WHERE id = p_recurrence_id
- RETURNING id INTO v_new_id;
-
- RETURN v_new_id;
-END;
-$$;
-
-
-ALTER FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_view_insert(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.subscription_intents_view_insert() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_target text;
- v_plan_id uuid;
-begin
- select p.id, p.target into v_plan_id, v_target
- from public.plans p
- where p.key = new.plan_key;
-
- if v_plan_id is null then
- raise exception 'Plano inválido: plan_key=%', new.plan_key;
- end if;
-
- if lower(v_target) = 'clinic' then
- if new.tenant_id is null then
- raise exception 'Intenção clinic exige tenant_id.';
- end if;
-
- insert into public.subscription_intents_tenant (
- id, tenant_id, created_by_user_id, email,
- plan_id, plan_key, interval, amount_cents, currency,
- status, source, notes, created_at, paid_at
- ) values (
- coalesce(new.id, gen_random_uuid()),
- new.tenant_id, new.created_by_user_id, new.email,
- v_plan_id, new.plan_key, coalesce(new.interval,'month'),
- new.amount_cents, coalesce(new.currency,'BRL'),
- coalesce(new.status,'pending'), coalesce(new.source,'manual'),
- new.notes, coalesce(new.created_at, now()), new.paid_at
- );
-
- new.plan_target := 'clinic';
- return new;
- end if;
-
- -- therapist ou supervisor → tabela personal
- if lower(v_target) in ('therapist', 'supervisor') then
- insert into public.subscription_intents_personal (
- id, user_id, created_by_user_id, email,
- plan_id, plan_key, interval, amount_cents, currency,
- status, source, notes, created_at, paid_at
- ) values (
- coalesce(new.id, gen_random_uuid()),
- new.user_id, new.created_by_user_id, new.email,
- v_plan_id, new.plan_key, coalesce(new.interval,'month'),
- new.amount_cents, coalesce(new.currency,'BRL'),
- coalesce(new.status,'pending'), coalesce(new.source,'manual'),
- new.notes, coalesce(new.created_at, now()), new.paid_at
- );
-
- new.plan_target := lower(v_target); -- 'therapist' ou 'supervisor'
- return new;
- end if;
-
- raise exception 'Target de plano não suportado: %', v_target;
-end;
-$$;
-
-
-ALTER FUNCTION public.subscription_intents_view_insert() OWNER TO supabase_admin;
-
---
--- Name: subscriptions_validate_scope(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.subscriptions_validate_scope() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_target text;
-BEGIN
- SELECT lower(p.target) INTO v_target
- FROM public.plans p
- WHERE p.id = NEW.plan_id;
-
- IF v_target IS NULL THEN
- RAISE EXCEPTION 'Plano inválido (target nulo).';
- END IF;
-
- IF v_target = 'clinic' THEN
- IF NEW.tenant_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura clinic exige tenant_id.';
- END IF;
- IF NEW.user_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura clinic não pode ter user_id (XOR).';
- END IF;
-
- ELSIF v_target IN ('therapist', 'supervisor') THEN
- -- supervisor é pessoal como therapist
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura % não deve ter tenant_id.', v_target;
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura % exige user_id.', v_target;
- END IF;
-
- ELSIF v_target = 'patient' THEN
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura patient não deve ter tenant_id.';
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura patient exige user_id.';
- END IF;
-
- ELSE
- RAISE EXCEPTION 'Target de plano inválido: %', v_target;
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.subscriptions_validate_scope() OWNER TO supabase_admin;
-
---
--- Name: sync_busy_mirror_agenda_eventos(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.sync_busy_mirror_agenda_eventos() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-declare
- clinic_tenant uuid;
- is_personal boolean;
- should_mirror boolean;
-begin
- -- Anti-recursão: espelho não espelha
- if (tg_op <> 'DELETE') then
- if new.mirror_of_event_id is not null then
- return new;
- end if;
- else
- if old.mirror_of_event_id is not null then
- return old;
- end if;
- end if;
-
- -- Define se é pessoal e se deve espelhar
- if (tg_op = 'DELETE') then
- is_personal := (old.tenant_id = old.owner_id);
- should_mirror := (old.visibility_scope in ('busy_only','private'));
- else
- is_personal := (new.tenant_id = new.owner_id);
- should_mirror := (new.visibility_scope in ('busy_only','private'));
- end if;
-
- -- Se não é pessoal, não faz nada
- if not is_personal then
- if (tg_op = 'DELETE') then
- return old;
- end if;
- return new;
- end if;
-
- -- DELETE: remove espelhos existentes
- if (tg_op = 'DELETE') then
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = old.id
- and e.mirror_source = 'personal_busy_mirror';
-
- return old;
- end if;
-
- -- INSERT/UPDATE:
- -- Se não deve espelhar, remove espelhos e sai
- if not should_mirror then
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = new.id
- and e.mirror_source = 'personal_busy_mirror';
-
- return new;
- end if;
-
- -- Para cada clínica onde o usuário é therapist active, cria/atualiza o "Ocupado"
- for clinic_tenant in
- select tm.tenant_id
- from public.tenant_members tm
- where tm.user_id = new.owner_id
- and tm.role = 'therapist'
- and tm.status = 'active'
- and tm.tenant_id <> new.owner_id
- loop
- insert into public.agenda_eventos (
- tenant_id,
- owner_id,
- terapeuta_id,
- paciente_id,
- tipo,
- status,
- titulo,
- observacoes,
- inicio_em,
- fim_em,
- mirror_of_event_id,
- mirror_source,
- visibility_scope,
- created_at,
- updated_at
- ) values (
- clinic_tenant,
- new.owner_id,
- new.owner_id,
- null,
- 'bloqueio'::public.tipo_evento_agenda,
- 'agendado'::public.status_evento_agenda,
- 'Ocupado',
- null,
- new.inicio_em,
- new.fim_em,
- new.id,
- 'personal_busy_mirror',
- 'public',
- now(),
- now()
- )
- on conflict (tenant_id, mirror_of_event_id) where mirror_of_event_id is not null
- do update set
- owner_id = excluded.owner_id,
- terapeuta_id = excluded.terapeuta_id,
- tipo = excluded.tipo,
- status = excluded.status,
- titulo = excluded.titulo,
- observacoes = excluded.observacoes,
- inicio_em = excluded.inicio_em,
- fim_em = excluded.fim_em,
- updated_at = now();
- end loop;
-
- -- Limpa espelhos de clínicas onde o vínculo therapist active não existe mais
- delete from public.agenda_eventos e
- where e.mirror_of_event_id = new.id
- and e.mirror_source = 'personal_busy_mirror'
- and not exists (
- select 1
- from public.tenant_members tm
- where tm.user_id = new.owner_id
- and tm.role = 'therapist'
- and tm.status = 'active'
- and tm.tenant_id = e.tenant_id
- );
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.sync_busy_mirror_agenda_eventos() OWNER TO supabase_admin;
-
---
--- Name: tenant_accept_invite(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_accept_invite(p_token uuid) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-declare
- v_uid uuid;
- v_email text;
- v_invite public.tenant_invites%rowtype;
-begin
- -- 1) precisa estar autenticado
- v_uid := auth.uid();
- if v_uid is null then
- raise exception 'not_authenticated' using errcode = 'P0001';
- end if;
-
- -- 2) pega email real do usuário logado sem depender do JWT claim
- select u.email
- into v_email
- from auth.users u
- where u.id = v_uid;
-
- if v_email is null or length(trim(v_email)) = 0 then
- raise exception 'missing_user_email' using errcode = 'P0001';
- end if;
-
- -- 3) carrega o invite e trava linha (evita 2 aceites concorrentes)
- select *
- into v_invite
- from public.tenant_invites i
- where i.token = p_token
- for update;
-
- if not found then
- raise exception 'invite_not_found' using errcode = 'P0001';
- end if;
-
- -- 4) validações de estado
- if v_invite.revoked_at is not null then
- raise exception 'invite_revoked' using errcode = 'P0001';
- end if;
-
- if v_invite.accepted_at is not null then
- raise exception 'invite_already_accepted' using errcode = 'P0001';
- end if;
-
- if v_invite.expires_at is not null and v_invite.expires_at <= now() then
- raise exception 'invite_expired' using errcode = 'P0001';
- end if;
-
- -- 5) valida email (case-insensitive)
- if lower(trim(v_invite.email)) <> lower(trim(v_email)) then
- raise exception 'email_mismatch' using errcode = 'P0001';
- end if;
-
- -- 6) consome o invite
- update public.tenant_invites
- set accepted_at = now(),
- accepted_by = v_uid
- where id = v_invite.id;
-
- -- 7) cria ou reativa o membership
- insert into public.tenant_members (tenant_id, user_id, role, status, created_at)
- values (v_invite.tenant_id, v_uid, v_invite.role, 'active', now())
- on conflict (tenant_id, user_id)
- do update set
- role = excluded.role,
- status = 'active';
-
- -- 8) retorno útil pro front (você já tenta ler tenant_id no AcceptInvitePage)
- return jsonb_build_object(
- 'ok', true,
- 'tenant_id', v_invite.tenant_id,
- 'role', v_invite.role
- );
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_accept_invite(p_token uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_members; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_members (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- user_id uuid NOT NULL,
- role text NOT NULL,
- status text DEFAULT 'active'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_members OWNER TO supabase_admin;
-
---
--- Name: tenant_add_member_by_email(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text DEFAULT 'therapist'::text) RETURNS public.tenant_members
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-declare
- v_target_uid uuid;
- v_member public.tenant_members%rowtype;
- v_is_admin boolean;
- v_email text;
-begin
- if p_tenant_id is null then
- raise exception 'tenant_id é obrigatório';
- end if;
-
- v_email := lower(trim(coalesce(p_email, '')));
- if v_email = '' then
- raise exception 'email é obrigatório';
- end if;
-
- -- valida role permitida
- if p_role not in ('tenant_admin','therapist','secretary','patient') then
- raise exception 'role inválida: %', p_role;
- end if;
-
- -- apenas admin do tenant (role real no banco)
- select exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = p_tenant_id
- and tm.user_id = auth.uid()
- and tm.role = 'tenant_admin'
- and coalesce(tm.status,'active') = 'active'
- ) into v_is_admin;
-
- if not v_is_admin then
- raise exception 'sem permissão: apenas admin da clínica pode adicionar membros';
- end if;
-
- -- acha usuário pelo e-mail no Supabase Auth
- select u.id
- into v_target_uid
- from auth.users u
- where lower(u.email) = v_email
- limit 1;
-
- if v_target_uid is null then
- raise exception 'nenhum usuário encontrado com este e-mail';
- end if;
-
- -- cria ou reativa membro
- insert into public.tenant_members (tenant_id, user_id, role, status)
- values (p_tenant_id, v_target_uid, p_role, 'active')
- on conflict (tenant_id, user_id)
- do update set
- role = excluded.role,
- status = 'active'
- returning * into v_member;
-
- return v_member;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) OWNER TO supabase_admin;
-
---
--- Name: tenant_feature_allowed(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.v_tenant_entitlements v
- where v.tenant_id = p_tenant_id
- and v.feature_key = p_feature_key
- and coalesce(v.allowed, false) = true
- );
-$$;
-
-
-ALTER FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) OWNER TO supabase_admin;
-
---
--- Name: tenant_feature_enabled(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select coalesce(
- (select tf.enabled
- from public.tenant_features tf
- where tf.tenant_id = p_tenant_id and tf.feature_key = p_feature_key),
- false
- );
-$$;
-
-
-ALTER FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) OWNER TO supabase_admin;
-
---
--- Name: tenant_features_guard_with_plan(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_features_guard_with_plan() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-declare
- v_allowed boolean;
-begin
- -- só valida quando está habilitando
- if new.enabled is distinct from true then
- return new;
- end if;
-
- -- permitido pelo plano do tenant?
- select exists (
- select 1
- from public.v_tenant_entitlements_full v
- where v.tenant_id = new.tenant_id
- and v.feature_key = new.feature_key
- and v.allowed = true
- )
- into v_allowed;
-
- if not v_allowed then
- raise exception 'Feature % não permitida pelo plano atual do tenant %.',
- new.feature_key, new.tenant_id
- using errcode = 'P0001';
- end if;
-
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_features_guard_with_plan() OWNER TO supabase_admin;
-
---
--- Name: tenant_has_feature(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select
- exists (
- select 1
- from public.v_tenant_entitlements e
- where e.tenant_id = _tenant_id
- and e.feature_key = _feature
- and e.allowed = true
- )
- or exists (
- select 1
- from public.tenant_features tf
- where tf.tenant_id = _tenant_id
- and tf.feature_key = _feature
- and tf.enabled = true
- );
-$$;
-
-
-ALTER FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) OWNER TO supabase_admin;
-
---
--- Name: tenant_invite_member_by_email(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) RETURNS uuid
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public', 'auth'
- AS $$
-declare
- v_email text;
- v_my_email text;
- v_token uuid;
- v_updated int;
-begin
- -- validações básicas
- if p_tenant_id is null then
- raise exception 'tenant_id inválido' using errcode = 'P0001';
- end if;
-
- v_email := lower(trim(coalesce(p_email, '')));
- if v_email = '' then
- raise exception 'Informe um email' using errcode = 'P0001';
- end if;
-
- -- role permitido (ajuste se quiser)
- if p_role is null or p_role not in ('therapist', 'secretary') then
- raise exception 'Role inválido (use therapist/secretary)' using errcode = 'P0001';
- end if;
-
- -- ✅ bloqueio: auto-convite
- v_my_email := public.get_my_email();
- if v_my_email is not null and v_email = v_my_email then
- raise exception 'Você não pode convidar o seu próprio email.' using errcode = 'P0001';
- end if;
-
- -- ✅ bloqueio: já é membro ativo do tenant
- if exists (
- select 1
- from tenant_members tm
- join auth.users au on au.id = tm.user_id
- where tm.tenant_id = p_tenant_id
- and tm.status = 'active'
- and lower(au.email) = v_email
- ) then
- raise exception 'Este email já está vinculado a esta clínica.' using errcode = 'P0001';
- end if;
-
- -- ✅ permissão: só admin do tenant pode convidar
- if not exists (
- select 1
- from tenant_members me
- where me.tenant_id = p_tenant_id
- and me.user_id = auth.uid()
- and me.status = 'active'
- and me.role in ('tenant_admin','clinic_admin')
- ) then
- raise exception 'Sem permissão para convidar membros.' using errcode = 'P0001';
- end if;
-
- -- Gera token (reenvio simples / regeneração)
- v_token := gen_random_uuid();
-
- -- 1) tenta "regerar" um convite pendente existente (mesmo email)
- update tenant_invites
- set token = v_token,
- role = p_role,
- created_at = now(),
- expires_at = now() + interval '7 days',
- accepted_at = null,
- revoked_at = null
- where tenant_id = p_tenant_id
- and lower(email) = v_email
- and accepted_at is null
- and revoked_at is null;
-
- get diagnostics v_updated = row_count;
-
- -- 2) se não atualizou nada, cria convite novo
- if v_updated = 0 then
- insert into tenant_invites (tenant_id, email, role, token, created_at, expires_at)
- values (p_tenant_id, v_email, p_role, v_token, now(), now() + interval '7 days');
- end if;
-
- return v_token;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) OWNER TO supabase_admin;
-
---
--- Name: tenant_reactivate_member(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- update public.tenant_members
- set status = 'active'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_remove_member(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-declare
- v_role text;
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- if p_member_user_id = auth.uid() then
- raise exception 'cannot_remove_self';
- end if;
-
- -- pega role atual do membro (se não existir, erro)
- select role into v_role
- from public.tenant_members
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if v_role is null then
- raise exception 'membership_not_found';
- end if;
-
- -- trava: se for therapist, não pode remover com eventos futuros
- if v_role = 'therapist' then
- if exists (
- select 1
- from public.agenda_eventos e
- where e.owner_id = p_tenant_id
- and e.terapeuta_id = p_member_user_id
- and e.inicio_em >= now()
- and e.status::text not in ('cancelado','cancelled','canceled')
- limit 1
- ) then
- raise exception 'cannot_remove_therapist_with_future_events';
- end if;
- end if;
-
- update public.tenant_members
- set status = 'inactive'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_remove_member_soft(uuid, uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- if p_member_user_id = auth.uid() then
- raise exception 'cannot_remove_self';
- end if;
-
- update public.tenant_members
- set status = 'inactive'
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) OWNER TO supabase_admin;
-
---
--- Name: tenant_revoke_invite(uuid, text, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-declare
- v_email text;
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- v_email := lower(trim(p_email));
-
- update public.tenant_invites
- set revoked_at = now(),
- revoked_by = auth.uid()
- where tenant_id = p_tenant_id
- and lower(email) = v_email
- and role = p_role
- and accepted_at is null
- and revoked_at is null;
-
- if not found then
- raise exception 'invite_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) OWNER TO supabase_admin;
-
---
--- Name: tenant_set_member_status(uuid, uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- -- valida status (adapte aos seus valores reais)
- if p_new_status not in ('active','inactive','suspended','invited') then
- raise exception 'invalid_status: %', p_new_status;
- end if;
-
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- -- evita desativar a si mesmo (opcional)
- if p_member_user_id = auth.uid() and p_new_status <> 'active' then
- raise exception 'cannot_disable_self';
- end if;
-
- update public.tenant_members
- set status = p_new_status
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) OWNER TO supabase_admin;
-
---
--- Name: tenant_update_member_role(uuid, uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- SET row_security TO 'off'
- AS $$
-begin
- -- exige auth
- if auth.uid() is null then
- raise exception 'not_authenticated';
- end if;
-
- -- valida role
- if p_new_role not in ('tenant_admin','therapist','secretary','patient') then
- raise exception 'invalid_role: %', p_new_role;
- end if;
-
- -- somente tenant_admin ativo pode alterar role
- if not public.is_tenant_admin(p_tenant_id) then
- raise exception 'not_allowed';
- end if;
-
- -- evita o admin remover o próprio admin sem querer (opcional mas recomendado)
- if p_member_user_id = auth.uid() and p_new_role <> 'tenant_admin' then
- raise exception 'cannot_demote_self';
- end if;
-
- update public.tenant_members
- set role = p_new_role
- where tenant_id = p_tenant_id
- and user_id = p_member_user_id;
-
- if not found then
- raise exception 'membership_not_found';
- end if;
-end;
-$$;
-
-
-ALTER FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) OWNER TO supabase_admin;
-
---
--- Name: toggle_plan(uuid); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.toggle_plan(owner uuid) RETURNS void
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- current_key text;
- new_key text;
-begin
- select p.key into current_key
- from subscriptions s
- join plans p on p.id = s.plan_id
- where s.owner_id = owner
- and s.status = 'active';
-
- new_key := case
- when current_key = 'pro' then 'free'
- else 'pro'
- end;
-
- update subscriptions s
- set plan_id = p.id
- from plans p
- where p.key = new_key
- and s.owner_id = owner
- and s.status = 'active';
-end;
-$$;
-
-
-ALTER FUNCTION public.toggle_plan(owner uuid) OWNER TO supabase_admin;
-
---
--- Name: transition_subscription(uuid, text, text, jsonb); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text DEFAULT NULL::text, p_metadata jsonb DEFAULT NULL::jsonb) RETURNS public.subscriptions
- LANGUAGE plpgsql SECURITY DEFINER
- AS $$
-declare
- v_sub public.subscriptions;
- v_uid uuid;
- v_is_allowed boolean := false;
-begin
- v_uid := auth.uid();
-
- select *
- into v_sub
- from public.subscriptions
- where id = p_subscription_id;
-
- if not found then
- raise exception 'Assinatura não encontrada';
- end if;
-
- -- =====================================================
- -- 🔐 BLOCO DE AUTORIZAÇÃO
- -- =====================================================
-
- -- 1) SaaS admin pode tudo
- if is_saas_admin() then
- v_is_allowed := true;
- end if;
-
- -- 2) Assinatura pessoal (therapist)
- if not v_is_allowed
- and v_sub.tenant_id is null
- and v_sub.user_id = v_uid then
- v_is_allowed := true;
- end if;
-
- -- 3) Assinatura de clinic (tenant)
- if not v_is_allowed
- and v_sub.tenant_id is not null then
-
- if exists (
- select 1
- from public.tenant_members tm
- where tm.tenant_id = v_sub.tenant_id
- and tm.user_id = v_uid
- and tm.status = 'active'
- and tm.role = 'tenant_admin'
- ) then
- v_is_allowed := true;
- end if;
-
- end if;
-
- if not v_is_allowed then
- raise exception 'Sem permissão para transicionar esta assinatura';
- end if;
-
- -- =====================================================
- -- 🧠 TRANSIÇÃO
- -- =====================================================
-
- update public.subscriptions
- set status = p_to_status,
- updated_at = now(),
- cancelled_at = case when p_to_status = 'cancelled' then now() else cancelled_at end,
- suspended_at = case when p_to_status = 'suspended' then now() else suspended_at end,
- past_due_since = case when p_to_status = 'past_due' then now() else past_due_since end,
- expired_at = case when p_to_status = 'expired' then now() else expired_at end,
- activated_at = case when p_to_status = 'active' then now() else activated_at end
- where id = p_subscription_id
- returning * into v_sub;
-
- -- =====================================================
- -- 🧾 EVENT LOG
- -- =====================================================
-
- insert into public.subscription_events (
- subscription_id,
- owner_id,
- event_type,
- created_at,
- created_by,
- source,
- reason,
- metadata,
- owner_type,
- owner_ref
- )
- values (
- v_sub.id,
- coalesce(v_sub.tenant_id, v_sub.user_id),
- 'status_changed',
- now(),
- v_uid,
- 'manual_transition',
- p_reason,
- p_metadata,
- case when v_sub.tenant_id is not null then 'tenant' else 'personal' end,
- coalesce(v_sub.tenant_id, v_sub.user_id)
- );
-
- return v_sub;
-end;
-$$;
-
-
-ALTER FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) OWNER TO supabase_admin;
-
---
--- Name: update_payment_settings_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.update_payment_settings_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.update_payment_settings_updated_at() OWNER TO supabase_admin;
-
---
--- Name: update_professional_pricing_updated_at(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.update_professional_pricing_updated_at() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION public.update_professional_pricing_updated_at() OWNER TO supabase_admin;
-
---
--- Name: user_has_feature(uuid, text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.user_has_feature(_user_id uuid, _feature text) RETURNS boolean
- LANGUAGE sql STABLE
- AS $$
- select exists (
- select 1
- from public.v_user_entitlements e
- where e.user_id = _user_id
- and e.feature_key = _feature
- and e.allowed = true
- );
-$$;
-
-
-ALTER FUNCTION public.user_has_feature(_user_id uuid, _feature text) OWNER TO supabase_admin;
-
---
--- Name: validate_support_session(text); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.validate_support_session(p_token text) RETURNS json
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'public'
- AS $$
-DECLARE
- v_session support_sessions;
-BEGIN
- IF p_token IS NULL OR length(trim(p_token)) < 32 THEN
- RETURN json_build_object('valid', false, 'tenant_id', null);
- END IF;
-
- SELECT * INTO v_session
- FROM public.support_sessions
- WHERE token = p_token
- AND expires_at > now()
- LIMIT 1;
-
- IF NOT FOUND THEN
- RETURN json_build_object('valid', false, 'tenant_id', null);
- END IF;
-
- RETURN json_build_object(
- 'valid', true,
- 'tenant_id', v_session.tenant_id
- );
-END;
-$$;
-
-
-ALTER FUNCTION public.validate_support_session(p_token text) OWNER TO supabase_admin;
-
---
--- Name: whoami(); Type: FUNCTION; Schema: public; Owner: supabase_admin
---
-
-CREATE FUNCTION public.whoami() RETURNS TABLE(uid uuid, role text)
- LANGUAGE sql STABLE
- AS $$
- select auth.uid() as uid, auth.role() as role;
-$$;
-
-
-ALTER FUNCTION public.whoami() OWNER TO supabase_admin;
-
---
--- Name: apply_rls(jsonb, integer); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer DEFAULT (1024 * 1024)) RETURNS SETOF realtime.wal_rls
- LANGUAGE plpgsql
- AS $$
-declare
--- Regclass of the table e.g. public.notes
-entity_ regclass = (quote_ident(wal ->> 'schema') || '.' || quote_ident(wal ->> 'table'))::regclass;
-
--- I, U, D, T: insert, update ...
-action realtime.action = (
- case wal ->> 'action'
- when 'I' then 'INSERT'
- when 'U' then 'UPDATE'
- when 'D' then 'DELETE'
- else 'ERROR'
- end
-);
-
--- Is row level security enabled for the table
-is_rls_enabled bool = relrowsecurity from pg_class where oid = entity_;
-
-subscriptions realtime.subscription[] = array_agg(subs)
- from
- realtime.subscription subs
- where
- subs.entity = entity_;
-
--- Subscription vars
-roles regrole[] = array_agg(distinct us.claims_role::text)
- from
- unnest(subscriptions) us;
-
-working_role regrole;
-claimed_role regrole;
-claims jsonb;
-
-subscription_id uuid;
-subscription_has_access bool;
-visible_to_subscription_ids uuid[] = '{}';
-
--- structured info for wal's columns
-columns realtime.wal_column[];
--- previous identity values for update/delete
-old_columns realtime.wal_column[];
-
-error_record_exceeds_max_size boolean = octet_length(wal::text) > max_record_bytes;
-
--- Primary jsonb output for record
-output jsonb;
-
-begin
-perform set_config('role', null, true);
-
-columns =
- array_agg(
- (
- x->>'name',
- x->>'type',
- x->>'typeoid',
- realtime.cast(
- (x->'value') #>> '{}',
- coalesce(
- (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4
- (x->>'type')::regtype
- )
- ),
- (pks ->> 'name') is not null,
- true
- )::realtime.wal_column
- )
- from
- jsonb_array_elements(wal -> 'columns') x
- left join jsonb_array_elements(wal -> 'pk') pks
- on (x ->> 'name') = (pks ->> 'name');
-
-old_columns =
- array_agg(
- (
- x->>'name',
- x->>'type',
- x->>'typeoid',
- realtime.cast(
- (x->'value') #>> '{}',
- coalesce(
- (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4
- (x->>'type')::regtype
- )
- ),
- (pks ->> 'name') is not null,
- true
- )::realtime.wal_column
- )
- from
- jsonb_array_elements(wal -> 'identity') x
- left join jsonb_array_elements(wal -> 'pk') pks
- on (x ->> 'name') = (pks ->> 'name');
-
-for working_role in select * from unnest(roles) loop
-
- -- Update `is_selectable` for columns and old_columns
- columns =
- array_agg(
- (
- c.name,
- c.type_name,
- c.type_oid,
- c.value,
- c.is_pkey,
- pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')
- )::realtime.wal_column
- )
- from
- unnest(columns) c;
-
- old_columns =
- array_agg(
- (
- c.name,
- c.type_name,
- c.type_oid,
- c.value,
- c.is_pkey,
- pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')
- )::realtime.wal_column
- )
- from
- unnest(old_columns) c;
-
- if action <> 'DELETE' and count(1) = 0 from unnest(columns) c where c.is_pkey then
- return next (
- jsonb_build_object(
- 'schema', wal ->> 'schema',
- 'table', wal ->> 'table',
- 'type', action
- ),
- is_rls_enabled,
- -- subscriptions is already filtered by entity
- (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),
- array['Error 400: Bad Request, no primary key']
- )::realtime.wal_rls;
-
- -- The claims role does not have SELECT permission to the primary key of entity
- elsif action <> 'DELETE' and sum(c.is_selectable::int) <> count(1) from unnest(columns) c where c.is_pkey then
- return next (
- jsonb_build_object(
- 'schema', wal ->> 'schema',
- 'table', wal ->> 'table',
- 'type', action
- ),
- is_rls_enabled,
- (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),
- array['Error 401: Unauthorized']
- )::realtime.wal_rls;
-
- else
- output = jsonb_build_object(
- 'schema', wal ->> 'schema',
- 'table', wal ->> 'table',
- 'type', action,
- 'commit_timestamp', to_char(
- ((wal ->> 'timestamp')::timestamptz at time zone 'utc'),
- 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'
- ),
- 'columns', (
- select
- jsonb_agg(
- jsonb_build_object(
- 'name', pa.attname,
- 'type', pt.typname
- )
- order by pa.attnum asc
- )
- from
- pg_attribute pa
- join pg_type pt
- on pa.atttypid = pt.oid
- where
- attrelid = entity_
- and attnum > 0
- and pg_catalog.has_column_privilege(working_role, entity_, pa.attname, 'SELECT')
- )
- )
- -- Add "record" key for insert and update
- || case
- when action in ('INSERT', 'UPDATE') then
- jsonb_build_object(
- 'record',
- (
- select
- jsonb_object_agg(
- -- if unchanged toast, get column name and value from old record
- coalesce((c).name, (oc).name),
- case
- when (c).name is null then (oc).value
- else (c).value
- end
- )
- from
- unnest(columns) c
- full outer join unnest(old_columns) oc
- on (c).name = (oc).name
- where
- coalesce((c).is_selectable, (oc).is_selectable)
- and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))
- )
- )
- else '{}'::jsonb
- end
- -- Add "old_record" key for update and delete
- || case
- when action = 'UPDATE' then
- jsonb_build_object(
- 'old_record',
- (
- select jsonb_object_agg((c).name, (c).value)
- from unnest(old_columns) c
- where
- (c).is_selectable
- and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))
- )
- )
- when action = 'DELETE' then
- jsonb_build_object(
- 'old_record',
- (
- select jsonb_object_agg((c).name, (c).value)
- from unnest(old_columns) c
- where
- (c).is_selectable
- and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))
- and ( not is_rls_enabled or (c).is_pkey ) -- if RLS enabled, we can't secure deletes so filter to pkey
- )
- )
- else '{}'::jsonb
- end;
-
- -- Create the prepared statement
- if is_rls_enabled and action <> 'DELETE' then
- if (select 1 from pg_prepared_statements where name = 'walrus_rls_stmt' limit 1) > 0 then
- deallocate walrus_rls_stmt;
- end if;
- execute realtime.build_prepared_statement_sql('walrus_rls_stmt', entity_, columns);
- end if;
-
- visible_to_subscription_ids = '{}';
-
- for subscription_id, claims in (
- select
- subs.subscription_id,
- subs.claims
- from
- unnest(subscriptions) subs
- where
- subs.entity = entity_
- and subs.claims_role = working_role
- and (
- realtime.is_visible_through_filters(columns, subs.filters)
- or (
- action = 'DELETE'
- and realtime.is_visible_through_filters(old_columns, subs.filters)
- )
- )
- ) loop
-
- if not is_rls_enabled or action = 'DELETE' then
- visible_to_subscription_ids = visible_to_subscription_ids || subscription_id;
- else
- -- Check if RLS allows the role to see the record
- perform
- -- Trim leading and trailing quotes from working_role because set_config
- -- doesn't recognize the role as valid if they are included
- set_config('role', trim(both '"' from working_role::text), true),
- set_config('request.jwt.claims', claims::text, true);
-
- execute 'execute walrus_rls_stmt' into subscription_has_access;
-
- if subscription_has_access then
- visible_to_subscription_ids = visible_to_subscription_ids || subscription_id;
- end if;
- end if;
- end loop;
-
- perform set_config('role', null, true);
-
- return next (
- output,
- is_rls_enabled,
- visible_to_subscription_ids,
- case
- when error_record_exceeds_max_size then array['Error 413: Payload Too Large']
- else '{}'
- end
- )::realtime.wal_rls;
-
- end if;
-end loop;
-
-perform set_config('role', null, true);
-end;
-$$;
-
-
-ALTER FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) OWNER TO supabase_admin;
-
---
--- Name: broadcast_changes(text, text, text, text, text, record, record, text); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text DEFAULT 'ROW'::text) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- -- Declare a variable to hold the JSONB representation of the row
- row_data jsonb := '{}'::jsonb;
-BEGIN
- IF level = 'STATEMENT' THEN
- RAISE EXCEPTION 'function can only be triggered for each row, not for each statement';
- END IF;
- -- Check the operation type and handle accordingly
- IF operation = 'INSERT' OR operation = 'UPDATE' OR operation = 'DELETE' THEN
- row_data := jsonb_build_object('old_record', OLD, 'record', NEW, 'operation', operation, 'table', table_name, 'schema', table_schema);
- PERFORM realtime.send (row_data, event_name, topic_name);
- ELSE
- RAISE EXCEPTION 'Unexpected operation type: %', operation;
- END IF;
-EXCEPTION
- WHEN OTHERS THEN
- RAISE EXCEPTION 'Failed to process the row: %', SQLERRM;
-END;
-
-$$;
-
-
-ALTER FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text) OWNER TO supabase_admin;
-
---
--- Name: build_prepared_statement_sql(text, regclass, realtime.wal_column[]); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) RETURNS text
- LANGUAGE sql
- AS $$
- /*
- Builds a sql string that, if executed, creates a prepared statement to
- tests retrive a row from *entity* by its primary key columns.
- Example
- select realtime.build_prepared_statement_sql('public.notes', '{"id"}'::text[], '{"bigint"}'::text[])
- */
- select
- 'prepare ' || prepared_statement_name || ' as
- select
- exists(
- select
- 1
- from
- ' || entity || '
- where
- ' || string_agg(quote_ident(pkc.name) || '=' || quote_nullable(pkc.value #>> '{}') , ' and ') || '
- )'
- from
- unnest(columns) pkc
- where
- pkc.is_pkey
- group by
- entity
- $$;
-
-
-ALTER FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) OWNER TO supabase_admin;
-
---
--- Name: cast(text, regtype); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime."cast"(val text, type_ regtype) RETURNS jsonb
- LANGUAGE plpgsql IMMUTABLE
- AS $$
- declare
- res jsonb;
- begin
- execute format('select to_jsonb(%L::'|| type_::text || ')', val) into res;
- return res;
- end
- $$;
-
-
-ALTER FUNCTION realtime."cast"(val text, type_ regtype) OWNER TO supabase_admin;
-
---
--- Name: check_equality_op(realtime.equality_op, regtype, text, text); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) RETURNS boolean
- LANGUAGE plpgsql IMMUTABLE
- AS $$
- /*
- Casts *val_1* and *val_2* as type *type_* and check the *op* condition for truthiness
- */
- declare
- op_symbol text = (
- case
- when op = 'eq' then '='
- when op = 'neq' then '!='
- when op = 'lt' then '<'
- when op = 'lte' then '<='
- when op = 'gt' then '>'
- when op = 'gte' then '>='
- when op = 'in' then '= any'
- else 'UNKNOWN OP'
- end
- );
- res boolean;
- begin
- execute format(
- 'select %L::'|| type_::text || ' ' || op_symbol
- || ' ( %L::'
- || (
- case
- when op = 'in' then type_::text || '[]'
- else type_::text end
- )
- || ')', val_1, val_2) into res;
- return res;
- end;
- $$;
-
-
-ALTER FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) OWNER TO supabase_admin;
-
---
--- Name: is_visible_through_filters(realtime.wal_column[], realtime.user_defined_filter[]); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) RETURNS boolean
- LANGUAGE sql IMMUTABLE
- AS $_$
- /*
- Should the record be visible (true) or filtered out (false) after *filters* are applied
- */
- select
- -- Default to allowed when no filters present
- $2 is null -- no filters. this should not happen because subscriptions has a default
- or array_length($2, 1) is null -- array length of an empty array is null
- or bool_and(
- coalesce(
- realtime.check_equality_op(
- op:=f.op,
- type_:=coalesce(
- col.type_oid::regtype, -- null when wal2json version <= 2.4
- col.type_name::regtype
- ),
- -- cast jsonb to text
- val_1:=col.value #>> '{}',
- val_2:=f.value
- ),
- false -- if null, filter does not match
- )
- )
- from
- unnest(filters) f
- join unnest(columns) col
- on f.column_name = col.name;
- $_$;
-
-
-ALTER FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) OWNER TO supabase_admin;
-
---
--- Name: list_changes(name, name, integer, integer); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) RETURNS SETOF realtime.wal_rls
- LANGUAGE sql
- SET log_min_messages TO 'fatal'
- AS $$
- with pub as (
- select
- concat_ws(
- ',',
- case when bool_or(pubinsert) then 'insert' else null end,
- case when bool_or(pubupdate) then 'update' else null end,
- case when bool_or(pubdelete) then 'delete' else null end
- ) as w2j_actions,
- coalesce(
- string_agg(
- realtime.quote_wal2json(format('%I.%I', schemaname, tablename)::regclass),
- ','
- ) filter (where ppt.tablename is not null and ppt.tablename not like '% %'),
- ''
- ) w2j_add_tables
- from
- pg_publication pp
- left join pg_publication_tables ppt
- on pp.pubname = ppt.pubname
- where
- pp.pubname = publication
- group by
- pp.pubname
- limit 1
- ),
- w2j as (
- select
- x.*, pub.w2j_add_tables
- from
- pub,
- pg_logical_slot_get_changes(
- slot_name, null, max_changes,
- 'include-pk', 'true',
- 'include-transaction', 'false',
- 'include-timestamp', 'true',
- 'include-type-oids', 'true',
- 'format-version', '2',
- 'actions', pub.w2j_actions,
- 'add-tables', pub.w2j_add_tables
- ) x
- )
- select
- xyz.wal,
- xyz.is_rls_enabled,
- xyz.subscription_ids,
- xyz.errors
- from
- w2j,
- realtime.apply_rls(
- wal := w2j.data::jsonb,
- max_record_bytes := max_record_bytes
- ) xyz(wal, is_rls_enabled, subscription_ids, errors)
- where
- w2j.w2j_add_tables <> ''
- and xyz.subscription_ids[1] is not null
- $$;
-
-
-ALTER FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) OWNER TO supabase_admin;
-
---
--- Name: quote_wal2json(regclass); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.quote_wal2json(entity regclass) RETURNS text
- LANGUAGE sql IMMUTABLE STRICT
- AS $$
- select
- (
- select string_agg('' || ch,'')
- from unnest(string_to_array(nsp.nspname::text, null)) with ordinality x(ch, idx)
- where
- not (x.idx = 1 and x.ch = '"')
- and not (
- x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)
- and x.ch = '"'
- )
- )
- || '.'
- || (
- select string_agg('' || ch,'')
- from unnest(string_to_array(pc.relname::text, null)) with ordinality x(ch, idx)
- where
- not (x.idx = 1 and x.ch = '"')
- and not (
- x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)
- and x.ch = '"'
- )
- )
- from
- pg_class pc
- join pg_namespace nsp
- on pc.relnamespace = nsp.oid
- where
- pc.oid = entity
- $$;
-
-
-ALTER FUNCTION realtime.quote_wal2json(entity regclass) OWNER TO supabase_admin;
-
---
--- Name: send(jsonb, text, text, boolean); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean DEFAULT true) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- generated_id uuid;
- final_payload jsonb;
-BEGIN
- BEGIN
- -- Generate a new UUID for the id
- generated_id := gen_random_uuid();
-
- -- Check if payload has an 'id' key, if not, add the generated UUID
- IF payload ? 'id' THEN
- final_payload := payload;
- ELSE
- final_payload := jsonb_set(payload, '{id}', to_jsonb(generated_id));
- END IF;
-
- -- Set the topic configuration
- EXECUTE format('SET LOCAL realtime.topic TO %L', topic);
-
- -- Attempt to insert the message
- INSERT INTO realtime.messages (id, payload, event, topic, private, extension)
- VALUES (generated_id, final_payload, event, topic, private, 'broadcast');
- EXCEPTION
- WHEN OTHERS THEN
- -- Capture and notify the error
- RAISE WARNING 'ErrorSendingBroadcastMessage: %', SQLERRM;
- END;
-END;
-$$;
-
-
-ALTER FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean) OWNER TO supabase_admin;
-
---
--- Name: subscription_check_filters(); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.subscription_check_filters() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
- /*
- Validates that the user defined filters for a subscription:
- - refer to valid columns that the claimed role may access
- - values are coercable to the correct column type
- */
- declare
- col_names text[] = coalesce(
- array_agg(c.column_name order by c.ordinal_position),
- '{}'::text[]
- )
- from
- information_schema.columns c
- where
- format('%I.%I', c.table_schema, c.table_name)::regclass = new.entity
- and pg_catalog.has_column_privilege(
- (new.claims ->> 'role'),
- format('%I.%I', c.table_schema, c.table_name)::regclass,
- c.column_name,
- 'SELECT'
- );
- filter realtime.user_defined_filter;
- col_type regtype;
-
- in_val jsonb;
- begin
- for filter in select * from unnest(new.filters) loop
- -- Filtered column is valid
- if not filter.column_name = any(col_names) then
- raise exception 'invalid column for filter %', filter.column_name;
- end if;
-
- -- Type is sanitized and safe for string interpolation
- col_type = (
- select atttypid::regtype
- from pg_catalog.pg_attribute
- where attrelid = new.entity
- and attname = filter.column_name
- );
- if col_type is null then
- raise exception 'failed to lookup type for column %', filter.column_name;
- end if;
-
- -- Set maximum number of entries for in filter
- if filter.op = 'in'::realtime.equality_op then
- in_val = realtime.cast(filter.value, (col_type::text || '[]')::regtype);
- if coalesce(jsonb_array_length(in_val), 0) > 100 then
- raise exception 'too many values for `in` filter. Maximum 100';
- end if;
- else
- -- raises an exception if value is not coercable to type
- perform realtime.cast(filter.value, col_type);
- end if;
-
- end loop;
-
- -- Apply consistent order to filters so the unique constraint on
- -- (subscription_id, entity, filters) can't be tricked by a different filter order
- new.filters = coalesce(
- array_agg(f order by f.column_name, f.op, f.value),
- '{}'
- ) from unnest(new.filters) f;
-
- return new;
- end;
- $$;
-
-
-ALTER FUNCTION realtime.subscription_check_filters() OWNER TO supabase_admin;
-
---
--- Name: to_regrole(text); Type: FUNCTION; Schema: realtime; Owner: supabase_admin
---
-
-CREATE FUNCTION realtime.to_regrole(role_name text) RETURNS regrole
- LANGUAGE sql IMMUTABLE
- AS $$ select role_name::regrole $$;
-
-
-ALTER FUNCTION realtime.to_regrole(role_name text) OWNER TO supabase_admin;
-
---
--- Name: topic(); Type: FUNCTION; Schema: realtime; Owner: supabase_realtime_admin
---
-
-CREATE FUNCTION realtime.topic() RETURNS text
- LANGUAGE sql STABLE
- AS $$
-select nullif(current_setting('realtime.topic', true), '')::text;
-$$;
-
-
-ALTER FUNCTION realtime.topic() OWNER TO supabase_realtime_admin;
-
---
--- Name: can_insert_object(text, text, uuid, jsonb); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.can_insert_object(bucketid text, name text, owner uuid, metadata jsonb) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- INSERT INTO "storage"."objects" ("bucket_id", "name", "owner", "metadata") VALUES (bucketid, name, owner, metadata);
- -- hack to rollback the successful insert
- RAISE sqlstate 'PT200' using
- message = 'ROLLBACK',
- detail = 'rollback successful insert';
-END
-$$;
-
-
-ALTER FUNCTION storage.can_insert_object(bucketid text, name text, owner uuid, metadata jsonb) OWNER TO supabase_storage_admin;
-
---
--- Name: enforce_bucket_name_length(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.enforce_bucket_name_length() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-begin
- if length(new.name) > 100 then
- raise exception 'bucket name "%" is too long (% characters). Max is 100.', new.name, length(new.name);
- end if;
- return new;
-end;
-$$;
-
-
-ALTER FUNCTION storage.enforce_bucket_name_length() OWNER TO supabase_storage_admin;
-
---
--- Name: extension(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.extension(name text) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
-_parts text[];
-_filename text;
-BEGIN
- select string_to_array(name, '/') into _parts;
- select _parts[array_length(_parts,1)] into _filename;
- -- @todo return the last part instead of 2
- return reverse(split_part(reverse(_filename), '.', 1));
-END
-$$;
-
-
-ALTER FUNCTION storage.extension(name text) OWNER TO supabase_storage_admin;
-
---
--- Name: filename(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.filename(name text) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
-_parts text[];
-BEGIN
- select string_to_array(name, '/') into _parts;
- return _parts[array_length(_parts,1)];
-END
-$$;
-
-
-ALTER FUNCTION storage.filename(name text) OWNER TO supabase_storage_admin;
-
---
--- Name: foldername(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.foldername(name text) RETURNS text[]
- LANGUAGE plpgsql
- AS $$
-DECLARE
-_parts text[];
-BEGIN
- select string_to_array(name, '/') into _parts;
- return _parts[1:array_length(_parts,1)-1];
-END
-$$;
-
-
-ALTER FUNCTION storage.foldername(name text) OWNER TO supabase_storage_admin;
-
---
--- Name: get_common_prefix(text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.get_common_prefix(p_key text, p_prefix text, p_delimiter text) RETURNS text
- LANGUAGE sql IMMUTABLE
- AS $$
-SELECT CASE
- WHEN position(p_delimiter IN substring(p_key FROM length(p_prefix) + 1)) > 0
- THEN left(p_key, length(p_prefix) + position(p_delimiter IN substring(p_key FROM length(p_prefix) + 1)))
- ELSE NULL
-END;
-$$;
-
-
-ALTER FUNCTION storage.get_common_prefix(p_key text, p_prefix text, p_delimiter text) OWNER TO supabase_storage_admin;
-
---
--- Name: get_size_by_bucket(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.get_size_by_bucket() RETURNS TABLE(size bigint, bucket_id text)
- LANGUAGE plpgsql
- AS $$
-BEGIN
- return query
- select sum((metadata->>'size')::int) as size, obj.bucket_id
- from "storage".objects as obj
- group by obj.bucket_id;
-END
-$$;
-
-
-ALTER FUNCTION storage.get_size_by_bucket() OWNER TO supabase_storage_admin;
-
---
--- Name: list_multipart_uploads_with_delimiter(text, text, text, integer, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.list_multipart_uploads_with_delimiter(bucket_id text, prefix_param text, delimiter_param text, max_keys integer DEFAULT 100, next_key_token text DEFAULT ''::text, next_upload_token text DEFAULT ''::text) RETURNS TABLE(key text, id text, created_at timestamp with time zone)
- LANGUAGE plpgsql
- AS $_$
-BEGIN
- RETURN QUERY EXECUTE
- 'SELECT DISTINCT ON(key COLLATE "C") * from (
- SELECT
- CASE
- WHEN position($2 IN substring(key from length($1) + 1)) > 0 THEN
- substring(key from 1 for length($1) + position($2 IN substring(key from length($1) + 1)))
- ELSE
- key
- END AS key, id, created_at
- FROM
- storage.s3_multipart_uploads
- WHERE
- bucket_id = $5 AND
- key ILIKE $1 || ''%'' AND
- CASE
- WHEN $4 != '''' AND $6 = '''' THEN
- CASE
- WHEN position($2 IN substring(key from length($1) + 1)) > 0 THEN
- substring(key from 1 for length($1) + position($2 IN substring(key from length($1) + 1))) COLLATE "C" > $4
- ELSE
- key COLLATE "C" > $4
- END
- ELSE
- true
- END AND
- CASE
- WHEN $6 != '''' THEN
- id COLLATE "C" > $6
- ELSE
- true
- END
- ORDER BY
- key COLLATE "C" ASC, created_at ASC) as e order by key COLLATE "C" LIMIT $3'
- USING prefix_param, delimiter_param, max_keys, next_key_token, bucket_id, next_upload_token;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.list_multipart_uploads_with_delimiter(bucket_id text, prefix_param text, delimiter_param text, max_keys integer, next_key_token text, next_upload_token text) OWNER TO supabase_storage_admin;
-
---
--- Name: list_objects_with_delimiter(text, text, text, integer, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.list_objects_with_delimiter(_bucket_id text, prefix_param text, delimiter_param text, max_keys integer DEFAULT 100, start_after text DEFAULT ''::text, next_token text DEFAULT ''::text, sort_order text DEFAULT 'asc'::text) RETURNS TABLE(name text, id uuid, metadata jsonb, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone)
- LANGUAGE plpgsql STABLE
- AS $_$
-DECLARE
- v_peek_name TEXT;
- v_current RECORD;
- v_common_prefix TEXT;
-
- -- Configuration
- v_is_asc BOOLEAN;
- v_prefix TEXT;
- v_start TEXT;
- v_upper_bound TEXT;
- v_file_batch_size INT;
-
- -- Seek state
- v_next_seek TEXT;
- v_count INT := 0;
-
- -- Dynamic SQL for batch query only
- v_batch_query TEXT;
-
-BEGIN
- -- ========================================================================
- -- INITIALIZATION
- -- ========================================================================
- v_is_asc := lower(coalesce(sort_order, 'asc')) = 'asc';
- v_prefix := coalesce(prefix_param, '');
- v_start := CASE WHEN coalesce(next_token, '') <> '' THEN next_token ELSE coalesce(start_after, '') END;
- v_file_batch_size := LEAST(GREATEST(max_keys * 2, 100), 1000);
-
- -- Calculate upper bound for prefix filtering (bytewise, using COLLATE "C")
- IF v_prefix = '' THEN
- v_upper_bound := NULL;
- ELSIF right(v_prefix, 1) = delimiter_param THEN
- v_upper_bound := left(v_prefix, -1) || chr(ascii(delimiter_param) + 1);
- ELSE
- v_upper_bound := left(v_prefix, -1) || chr(ascii(right(v_prefix, 1)) + 1);
- END IF;
-
- -- Build batch query (dynamic SQL - called infrequently, amortized over many rows)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" >= $2 ' ||
- 'AND o.name COLLATE "C" < $3 ORDER BY o.name COLLATE "C" ASC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" >= $2 ' ||
- 'ORDER BY o.name COLLATE "C" ASC LIMIT $4';
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" < $2 ' ||
- 'AND o.name COLLATE "C" >= $3 ORDER BY o.name COLLATE "C" DESC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND o.name COLLATE "C" < $2 ' ||
- 'ORDER BY o.name COLLATE "C" DESC LIMIT $4';
- END IF;
- END IF;
-
- -- ========================================================================
- -- SEEK INITIALIZATION: Determine starting position
- -- ========================================================================
- IF v_start = '' THEN
- IF v_is_asc THEN
- v_next_seek := v_prefix;
- ELSE
- -- DESC without cursor: find the last item in range
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_next_seek FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_prefix AND o.name COLLATE "C" < v_upper_bound
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix <> '' THEN
- SELECT o.name INTO v_next_seek FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_prefix
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_next_seek FROM storage.objects o
- WHERE o.bucket_id = _bucket_id
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- END IF;
-
- IF v_next_seek IS NOT NULL THEN
- v_next_seek := v_next_seek || delimiter_param;
- ELSE
- RETURN;
- END IF;
- END IF;
- ELSE
- -- Cursor provided: determine if it refers to a folder or leaf
- IF EXISTS (
- SELECT 1 FROM storage.objects o
- WHERE o.bucket_id = _bucket_id
- AND o.name COLLATE "C" LIKE v_start || delimiter_param || '%'
- LIMIT 1
- ) THEN
- -- Cursor refers to a folder
- IF v_is_asc THEN
- v_next_seek := v_start || chr(ascii(delimiter_param) + 1);
- ELSE
- v_next_seek := v_start || delimiter_param;
- END IF;
- ELSE
- -- Cursor refers to a leaf object
- IF v_is_asc THEN
- v_next_seek := v_start || delimiter_param;
- ELSE
- v_next_seek := v_start;
- END IF;
- END IF;
- END IF;
-
- -- ========================================================================
- -- MAIN LOOP: Hybrid peek-then-batch algorithm
- -- Uses STATIC SQL for peek (hot path) and DYNAMIC SQL for batch
- -- ========================================================================
- LOOP
- EXIT WHEN v_count >= max_keys;
-
- -- STEP 1: PEEK using STATIC SQL (plan cached, very fast)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_next_seek AND o.name COLLATE "C" < v_upper_bound
- ORDER BY o.name COLLATE "C" ASC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" >= v_next_seek
- ORDER BY o.name COLLATE "C" ASC LIMIT 1;
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" < v_next_seek AND o.name COLLATE "C" >= v_prefix
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix <> '' THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" < v_next_seek AND o.name COLLATE "C" >= v_prefix
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = _bucket_id AND o.name COLLATE "C" < v_next_seek
- ORDER BY o.name COLLATE "C" DESC LIMIT 1;
- END IF;
- END IF;
-
- EXIT WHEN v_peek_name IS NULL;
-
- -- STEP 2: Check if this is a FOLDER or FILE
- v_common_prefix := storage.get_common_prefix(v_peek_name, v_prefix, delimiter_param);
-
- IF v_common_prefix IS NOT NULL THEN
- -- FOLDER: Emit and skip to next folder (no heap access needed)
- name := rtrim(v_common_prefix, delimiter_param);
- id := NULL;
- updated_at := NULL;
- created_at := NULL;
- last_accessed_at := NULL;
- metadata := NULL;
- RETURN NEXT;
- v_count := v_count + 1;
-
- -- Advance seek past the folder range
- IF v_is_asc THEN
- v_next_seek := left(v_common_prefix, -1) || chr(ascii(delimiter_param) + 1);
- ELSE
- v_next_seek := v_common_prefix;
- END IF;
- ELSE
- -- FILE: Batch fetch using DYNAMIC SQL (overhead amortized over many rows)
- -- For ASC: upper_bound is the exclusive upper limit (< condition)
- -- For DESC: prefix is the inclusive lower limit (>= condition)
- FOR v_current IN EXECUTE v_batch_query USING _bucket_id, v_next_seek,
- CASE WHEN v_is_asc THEN COALESCE(v_upper_bound, v_prefix) ELSE v_prefix END, v_file_batch_size
- LOOP
- v_common_prefix := storage.get_common_prefix(v_current.name, v_prefix, delimiter_param);
-
- IF v_common_prefix IS NOT NULL THEN
- -- Hit a folder: exit batch, let peek handle it
- v_next_seek := v_current.name;
- EXIT;
- END IF;
-
- -- Emit file
- name := v_current.name;
- id := v_current.id;
- updated_at := v_current.updated_at;
- created_at := v_current.created_at;
- last_accessed_at := v_current.last_accessed_at;
- metadata := v_current.metadata;
- RETURN NEXT;
- v_count := v_count + 1;
-
- -- Advance seek past this file
- IF v_is_asc THEN
- v_next_seek := v_current.name || delimiter_param;
- ELSE
- v_next_seek := v_current.name;
- END IF;
-
- EXIT WHEN v_count >= max_keys;
- END LOOP;
- END IF;
- END LOOP;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.list_objects_with_delimiter(_bucket_id text, prefix_param text, delimiter_param text, max_keys integer, start_after text, next_token text, sort_order text) OWNER TO supabase_storage_admin;
-
---
--- Name: operation(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.operation() RETURNS text
- LANGUAGE plpgsql STABLE
- AS $$
-BEGIN
- RETURN current_setting('storage.operation', true);
-END;
-$$;
-
-
-ALTER FUNCTION storage.operation() OWNER TO supabase_storage_admin;
-
---
--- Name: protect_delete(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.protect_delete() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- -- Check if storage.allow_delete_query is set to 'true'
- IF COALESCE(current_setting('storage.allow_delete_query', true), 'false') != 'true' THEN
- RAISE EXCEPTION 'Direct deletion from storage tables is not allowed. Use the Storage API instead.'
- USING HINT = 'This prevents accidental data loss from orphaned objects.',
- ERRCODE = '42501';
- END IF;
- RETURN NULL;
-END;
-$$;
-
-
-ALTER FUNCTION storage.protect_delete() OWNER TO supabase_storage_admin;
-
---
--- Name: search(text, text, integer, integer, integer, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.search(prefix text, bucketname text, limits integer DEFAULT 100, levels integer DEFAULT 1, offsets integer DEFAULT 0, search text DEFAULT ''::text, sortcolumn text DEFAULT 'name'::text, sortorder text DEFAULT 'asc'::text) RETURNS TABLE(name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb)
- LANGUAGE plpgsql STABLE
- AS $_$
-DECLARE
- v_peek_name TEXT;
- v_current RECORD;
- v_common_prefix TEXT;
- v_delimiter CONSTANT TEXT := '/';
-
- -- Configuration
- v_limit INT;
- v_prefix TEXT;
- v_prefix_lower TEXT;
- v_is_asc BOOLEAN;
- v_order_by TEXT;
- v_sort_order TEXT;
- v_upper_bound TEXT;
- v_file_batch_size INT;
-
- -- Dynamic SQL for batch query only
- v_batch_query TEXT;
-
- -- Seek state
- v_next_seek TEXT;
- v_count INT := 0;
- v_skipped INT := 0;
-BEGIN
- -- ========================================================================
- -- INITIALIZATION
- -- ========================================================================
- v_limit := LEAST(coalesce(limits, 100), 1500);
- v_prefix := coalesce(prefix, '') || coalesce(search, '');
- v_prefix_lower := lower(v_prefix);
- v_is_asc := lower(coalesce(sortorder, 'asc')) = 'asc';
- v_file_batch_size := LEAST(GREATEST(v_limit * 2, 100), 1000);
-
- -- Validate sort column
- CASE lower(coalesce(sortcolumn, 'name'))
- WHEN 'name' THEN v_order_by := 'name';
- WHEN 'updated_at' THEN v_order_by := 'updated_at';
- WHEN 'created_at' THEN v_order_by := 'created_at';
- WHEN 'last_accessed_at' THEN v_order_by := 'last_accessed_at';
- ELSE v_order_by := 'name';
- END CASE;
-
- v_sort_order := CASE WHEN v_is_asc THEN 'asc' ELSE 'desc' END;
-
- -- ========================================================================
- -- NON-NAME SORTING: Use path_tokens approach (unchanged)
- -- ========================================================================
- IF v_order_by != 'name' THEN
- RETURN QUERY EXECUTE format(
- $sql$
- WITH folders AS (
- SELECT path_tokens[$1] AS folder
- FROM storage.objects
- WHERE objects.name ILIKE $2 || '%%'
- AND bucket_id = $3
- AND array_length(objects.path_tokens, 1) <> $1
- GROUP BY folder
- ORDER BY folder %s
- )
- (SELECT folder AS "name",
- NULL::uuid AS id,
- NULL::timestamptz AS updated_at,
- NULL::timestamptz AS created_at,
- NULL::timestamptz AS last_accessed_at,
- NULL::jsonb AS metadata FROM folders)
- UNION ALL
- (SELECT path_tokens[$1] AS "name",
- id, updated_at, created_at, last_accessed_at, metadata
- FROM storage.objects
- WHERE objects.name ILIKE $2 || '%%'
- AND bucket_id = $3
- AND array_length(objects.path_tokens, 1) = $1
- ORDER BY %I %s)
- LIMIT $4 OFFSET $5
- $sql$, v_sort_order, v_order_by, v_sort_order
- ) USING levels, v_prefix, bucketname, v_limit, offsets;
- RETURN;
- END IF;
-
- -- ========================================================================
- -- NAME SORTING: Hybrid skip-scan with batch optimization
- -- ========================================================================
-
- -- Calculate upper bound for prefix filtering
- IF v_prefix_lower = '' THEN
- v_upper_bound := NULL;
- ELSIF right(v_prefix_lower, 1) = v_delimiter THEN
- v_upper_bound := left(v_prefix_lower, -1) || chr(ascii(v_delimiter) + 1);
- ELSE
- v_upper_bound := left(v_prefix_lower, -1) || chr(ascii(right(v_prefix_lower, 1)) + 1);
- END IF;
-
- -- Build batch query (dynamic SQL - called infrequently, amortized over many rows)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" >= $2 ' ||
- 'AND lower(o.name) COLLATE "C" < $3 ORDER BY lower(o.name) COLLATE "C" ASC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" >= $2 ' ||
- 'ORDER BY lower(o.name) COLLATE "C" ASC LIMIT $4';
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" < $2 ' ||
- 'AND lower(o.name) COLLATE "C" >= $3 ORDER BY lower(o.name) COLLATE "C" DESC LIMIT $4';
- ELSE
- v_batch_query := 'SELECT o.name, o.id, o.updated_at, o.created_at, o.last_accessed_at, o.metadata ' ||
- 'FROM storage.objects o WHERE o.bucket_id = $1 AND lower(o.name) COLLATE "C" < $2 ' ||
- 'ORDER BY lower(o.name) COLLATE "C" DESC LIMIT $4';
- END IF;
- END IF;
-
- -- Initialize seek position
- IF v_is_asc THEN
- v_next_seek := v_prefix_lower;
- ELSE
- -- DESC: find the last item in range first (static SQL)
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_prefix_lower AND lower(o.name) COLLATE "C" < v_upper_bound
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix_lower <> '' THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_prefix_lower
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- END IF;
-
- IF v_peek_name IS NOT NULL THEN
- v_next_seek := lower(v_peek_name) || v_delimiter;
- ELSE
- RETURN;
- END IF;
- END IF;
-
- -- ========================================================================
- -- MAIN LOOP: Hybrid peek-then-batch algorithm
- -- Uses STATIC SQL for peek (hot path) and DYNAMIC SQL for batch
- -- ========================================================================
- LOOP
- EXIT WHEN v_count >= v_limit;
-
- -- STEP 1: PEEK using STATIC SQL (plan cached, very fast)
- IF v_is_asc THEN
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_next_seek AND lower(o.name) COLLATE "C" < v_upper_bound
- ORDER BY lower(o.name) COLLATE "C" ASC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" >= v_next_seek
- ORDER BY lower(o.name) COLLATE "C" ASC LIMIT 1;
- END IF;
- ELSE
- IF v_upper_bound IS NOT NULL THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" < v_next_seek AND lower(o.name) COLLATE "C" >= v_prefix_lower
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSIF v_prefix_lower <> '' THEN
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" < v_next_seek AND lower(o.name) COLLATE "C" >= v_prefix_lower
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- ELSE
- SELECT o.name INTO v_peek_name FROM storage.objects o
- WHERE o.bucket_id = bucketname AND lower(o.name) COLLATE "C" < v_next_seek
- ORDER BY lower(o.name) COLLATE "C" DESC LIMIT 1;
- END IF;
- END IF;
-
- EXIT WHEN v_peek_name IS NULL;
-
- -- STEP 2: Check if this is a FOLDER or FILE
- v_common_prefix := storage.get_common_prefix(lower(v_peek_name), v_prefix_lower, v_delimiter);
-
- IF v_common_prefix IS NOT NULL THEN
- -- FOLDER: Handle offset, emit if needed, skip to next folder
- IF v_skipped < offsets THEN
- v_skipped := v_skipped + 1;
- ELSE
- name := split_part(rtrim(v_common_prefix, v_delimiter), v_delimiter, levels);
- id := NULL;
- updated_at := NULL;
- created_at := NULL;
- last_accessed_at := NULL;
- metadata := NULL;
- RETURN NEXT;
- v_count := v_count + 1;
- END IF;
-
- -- Advance seek past the folder range
- IF v_is_asc THEN
- v_next_seek := lower(left(v_common_prefix, -1)) || chr(ascii(v_delimiter) + 1);
- ELSE
- v_next_seek := lower(v_common_prefix);
- END IF;
- ELSE
- -- FILE: Batch fetch using DYNAMIC SQL (overhead amortized over many rows)
- -- For ASC: upper_bound is the exclusive upper limit (< condition)
- -- For DESC: prefix_lower is the inclusive lower limit (>= condition)
- FOR v_current IN EXECUTE v_batch_query
- USING bucketname, v_next_seek,
- CASE WHEN v_is_asc THEN COALESCE(v_upper_bound, v_prefix_lower) ELSE v_prefix_lower END, v_file_batch_size
- LOOP
- v_common_prefix := storage.get_common_prefix(lower(v_current.name), v_prefix_lower, v_delimiter);
-
- IF v_common_prefix IS NOT NULL THEN
- -- Hit a folder: exit batch, let peek handle it
- v_next_seek := lower(v_current.name);
- EXIT;
- END IF;
-
- -- Handle offset skipping
- IF v_skipped < offsets THEN
- v_skipped := v_skipped + 1;
- ELSE
- -- Emit file
- name := split_part(v_current.name, v_delimiter, levels);
- id := v_current.id;
- updated_at := v_current.updated_at;
- created_at := v_current.created_at;
- last_accessed_at := v_current.last_accessed_at;
- metadata := v_current.metadata;
- RETURN NEXT;
- v_count := v_count + 1;
- END IF;
-
- -- Advance seek past this file
- IF v_is_asc THEN
- v_next_seek := lower(v_current.name) || v_delimiter;
- ELSE
- v_next_seek := lower(v_current.name);
- END IF;
-
- EXIT WHEN v_count >= v_limit;
- END LOOP;
- END IF;
- END LOOP;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.search(prefix text, bucketname text, limits integer, levels integer, offsets integer, search text, sortcolumn text, sortorder text) OWNER TO supabase_storage_admin;
-
---
--- Name: search_by_timestamp(text, text, integer, integer, text, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.search_by_timestamp(p_prefix text, p_bucket_id text, p_limit integer, p_level integer, p_start_after text, p_sort_order text, p_sort_column text, p_sort_column_after text) RETURNS TABLE(key text, name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb)
- LANGUAGE plpgsql STABLE
- AS $_$
-DECLARE
- v_cursor_op text;
- v_query text;
- v_prefix text;
-BEGIN
- v_prefix := coalesce(p_prefix, '');
-
- IF p_sort_order = 'asc' THEN
- v_cursor_op := '>';
- ELSE
- v_cursor_op := '<';
- END IF;
-
- v_query := format($sql$
- WITH raw_objects AS (
- SELECT
- o.name AS obj_name,
- o.id AS obj_id,
- o.updated_at AS obj_updated_at,
- o.created_at AS obj_created_at,
- o.last_accessed_at AS obj_last_accessed_at,
- o.metadata AS obj_metadata,
- storage.get_common_prefix(o.name, $1, '/') AS common_prefix
- FROM storage.objects o
- WHERE o.bucket_id = $2
- AND o.name COLLATE "C" LIKE $1 || '%%'
- ),
- -- Aggregate common prefixes (folders)
- -- Both created_at and updated_at use MIN(obj_created_at) to match the old prefixes table behavior
- aggregated_prefixes AS (
- SELECT
- rtrim(common_prefix, '/') AS name,
- NULL::uuid AS id,
- MIN(obj_created_at) AS updated_at,
- MIN(obj_created_at) AS created_at,
- NULL::timestamptz AS last_accessed_at,
- NULL::jsonb AS metadata,
- TRUE AS is_prefix
- FROM raw_objects
- WHERE common_prefix IS NOT NULL
- GROUP BY common_prefix
- ),
- leaf_objects AS (
- SELECT
- obj_name AS name,
- obj_id AS id,
- obj_updated_at AS updated_at,
- obj_created_at AS created_at,
- obj_last_accessed_at AS last_accessed_at,
- obj_metadata AS metadata,
- FALSE AS is_prefix
- FROM raw_objects
- WHERE common_prefix IS NULL
- ),
- combined AS (
- SELECT * FROM aggregated_prefixes
- UNION ALL
- SELECT * FROM leaf_objects
- ),
- filtered AS (
- SELECT *
- FROM combined
- WHERE (
- $5 = ''
- OR ROW(
- date_trunc('milliseconds', %I),
- name COLLATE "C"
- ) %s ROW(
- COALESCE(NULLIF($6, '')::timestamptz, 'epoch'::timestamptz),
- $5
- )
- )
- )
- SELECT
- split_part(name, '/', $3) AS key,
- name,
- id,
- updated_at,
- created_at,
- last_accessed_at,
- metadata
- FROM filtered
- ORDER BY
- COALESCE(date_trunc('milliseconds', %I), 'epoch'::timestamptz) %s,
- name COLLATE "C" %s
- LIMIT $4
- $sql$,
- p_sort_column,
- v_cursor_op,
- p_sort_column,
- p_sort_order,
- p_sort_order
- );
-
- RETURN QUERY EXECUTE v_query
- USING v_prefix, p_bucket_id, p_level, p_limit, p_start_after, p_sort_column_after;
-END;
-$_$;
-
-
-ALTER FUNCTION storage.search_by_timestamp(p_prefix text, p_bucket_id text, p_limit integer, p_level integer, p_start_after text, p_sort_order text, p_sort_column text, p_sort_column_after text) OWNER TO supabase_storage_admin;
-
---
--- Name: search_v2(text, text, integer, integer, text, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.search_v2(prefix text, bucket_name text, limits integer DEFAULT 100, levels integer DEFAULT 1, start_after text DEFAULT ''::text, sort_order text DEFAULT 'asc'::text, sort_column text DEFAULT 'name'::text, sort_column_after text DEFAULT ''::text) RETURNS TABLE(key text, name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb)
- LANGUAGE plpgsql STABLE
- AS $$
-DECLARE
- v_sort_col text;
- v_sort_ord text;
- v_limit int;
-BEGIN
- -- Cap limit to maximum of 1500 records
- v_limit := LEAST(coalesce(limits, 100), 1500);
-
- -- Validate and normalize sort_order
- v_sort_ord := lower(coalesce(sort_order, 'asc'));
- IF v_sort_ord NOT IN ('asc', 'desc') THEN
- v_sort_ord := 'asc';
- END IF;
-
- -- Validate and normalize sort_column
- v_sort_col := lower(coalesce(sort_column, 'name'));
- IF v_sort_col NOT IN ('name', 'updated_at', 'created_at') THEN
- v_sort_col := 'name';
- END IF;
-
- -- Route to appropriate implementation
- IF v_sort_col = 'name' THEN
- -- Use list_objects_with_delimiter for name sorting (most efficient: O(k * log n))
- RETURN QUERY
- SELECT
- split_part(l.name, '/', levels) AS key,
- l.name AS name,
- l.id,
- l.updated_at,
- l.created_at,
- l.last_accessed_at,
- l.metadata
- FROM storage.list_objects_with_delimiter(
- bucket_name,
- coalesce(prefix, ''),
- '/',
- v_limit,
- start_after,
- '',
- v_sort_ord
- ) l;
- ELSE
- -- Use aggregation approach for timestamp sorting
- -- Not efficient for large datasets but supports correct pagination
- RETURN QUERY SELECT * FROM storage.search_by_timestamp(
- prefix, bucket_name, v_limit, levels, start_after,
- v_sort_ord, v_sort_col, sort_column_after
- );
- END IF;
-END;
-$$;
-
-
-ALTER FUNCTION storage.search_v2(prefix text, bucket_name text, limits integer, levels integer, start_after text, sort_order text, sort_column text, sort_column_after text) OWNER TO supabase_storage_admin;
-
---
--- Name: update_updated_at_column(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE FUNCTION storage.update_updated_at_column() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$;
-
-
-ALTER FUNCTION storage.update_updated_at_column() OWNER TO supabase_storage_admin;
-
---
--- Name: http_request(); Type: FUNCTION; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE FUNCTION supabase_functions.http_request() RETURNS trigger
- LANGUAGE plpgsql SECURITY DEFINER
- SET search_path TO 'supabase_functions'
- AS $$
- DECLARE
- request_id bigint;
- payload jsonb;
- url text := TG_ARGV[0]::text;
- method text := TG_ARGV[1]::text;
- headers jsonb DEFAULT '{}'::jsonb;
- params jsonb DEFAULT '{}'::jsonb;
- timeout_ms integer DEFAULT 1000;
- BEGIN
- IF url IS NULL OR url = 'null' THEN
- RAISE EXCEPTION 'url argument is missing';
- END IF;
-
- IF method IS NULL OR method = 'null' THEN
- RAISE EXCEPTION 'method argument is missing';
- END IF;
-
- IF TG_ARGV[2] IS NULL OR TG_ARGV[2] = 'null' THEN
- headers = '{"Content-Type": "application/json"}'::jsonb;
- ELSE
- headers = TG_ARGV[2]::jsonb;
- END IF;
-
- IF TG_ARGV[3] IS NULL OR TG_ARGV[3] = 'null' THEN
- params = '{}'::jsonb;
- ELSE
- params = TG_ARGV[3]::jsonb;
- END IF;
-
- IF TG_ARGV[4] IS NULL OR TG_ARGV[4] = 'null' THEN
- timeout_ms = 1000;
- ELSE
- timeout_ms = TG_ARGV[4]::integer;
- END IF;
-
- CASE
- WHEN method = 'GET' THEN
- SELECT http_get INTO request_id FROM net.http_get(
- url,
- params,
- headers,
- timeout_ms
- );
- WHEN method = 'POST' THEN
- payload = jsonb_build_object(
- 'old_record', OLD,
- 'record', NEW,
- 'type', TG_OP,
- 'table', TG_TABLE_NAME,
- 'schema', TG_TABLE_SCHEMA
- );
-
- SELECT http_post INTO request_id FROM net.http_post(
- url,
- payload,
- params,
- headers,
- timeout_ms
- );
- ELSE
- RAISE EXCEPTION 'method argument % is invalid', method;
- END CASE;
-
- INSERT INTO supabase_functions.hooks
- (hook_table_id, hook_name, request_id)
- VALUES
- (TG_RELID, TG_NAME, request_id);
-
- RETURN NEW;
- END
-$$;
-
-
-ALTER FUNCTION supabase_functions.http_request() OWNER TO supabase_functions_admin;
-
---
--- Name: extensions; Type: TABLE; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE TABLE _realtime.extensions (
- id uuid NOT NULL,
- type text,
- settings jsonb,
- tenant_external_id text,
- inserted_at timestamp(0) without time zone NOT NULL,
- updated_at timestamp(0) without time zone NOT NULL
-);
-
-
-ALTER TABLE _realtime.extensions OWNER TO supabase_admin;
-
---
--- Name: schema_migrations; Type: TABLE; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE TABLE _realtime.schema_migrations (
- version bigint NOT NULL,
- inserted_at timestamp(0) without time zone
-);
-
-
-ALTER TABLE _realtime.schema_migrations OWNER TO supabase_admin;
-
---
--- Name: tenants; Type: TABLE; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE TABLE _realtime.tenants (
- id uuid NOT NULL,
- name text,
- external_id text,
- jwt_secret text,
- max_concurrent_users integer DEFAULT 200 NOT NULL,
- inserted_at timestamp(0) without time zone NOT NULL,
- updated_at timestamp(0) without time zone NOT NULL,
- max_events_per_second integer DEFAULT 100 NOT NULL,
- postgres_cdc_default text DEFAULT 'postgres_cdc_rls'::text,
- max_bytes_per_second integer DEFAULT 100000 NOT NULL,
- max_channels_per_client integer DEFAULT 100 NOT NULL,
- max_joins_per_second integer DEFAULT 500 NOT NULL,
- suspend boolean DEFAULT false,
- jwt_jwks jsonb,
- notify_private_alpha boolean DEFAULT false,
- private_only boolean DEFAULT false NOT NULL,
- migrations_ran integer DEFAULT 0,
- broadcast_adapter character varying(255) DEFAULT 'gen_rpc'::character varying,
- max_presence_events_per_second integer DEFAULT 1000,
- max_payload_size_in_kb integer DEFAULT 3000,
- CONSTRAINT jwt_secret_or_jwt_jwks_required CHECK (((jwt_secret IS NOT NULL) OR (jwt_jwks IS NOT NULL)))
-);
-
-
-ALTER TABLE _realtime.tenants OWNER TO supabase_admin;
-
---
--- Name: audit_log_entries; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.audit_log_entries (
- instance_id uuid,
- id uuid NOT NULL,
- payload json,
- created_at timestamp with time zone,
- ip_address character varying(64) DEFAULT ''::character varying NOT NULL
-);
-
-
-ALTER TABLE auth.audit_log_entries OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE audit_log_entries; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.audit_log_entries IS 'Auth: Audit trail for user actions.';
-
-
---
--- Name: flow_state; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.flow_state (
- id uuid NOT NULL,
- user_id uuid,
- auth_code text,
- code_challenge_method auth.code_challenge_method,
- code_challenge text,
- provider_type text NOT NULL,
- provider_access_token text,
- provider_refresh_token text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- authentication_method text NOT NULL,
- auth_code_issued_at timestamp with time zone,
- invite_token text,
- referrer text,
- oauth_client_state_id uuid,
- linking_target_id uuid,
- email_optional boolean DEFAULT false NOT NULL
-);
-
-
-ALTER TABLE auth.flow_state OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE flow_state; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.flow_state IS 'Stores metadata for all OAuth/SSO login flows';
-
-
---
--- Name: identities; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.identities (
- provider_id text NOT NULL,
- user_id uuid NOT NULL,
- identity_data jsonb NOT NULL,
- provider text NOT NULL,
- last_sign_in_at timestamp with time zone,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- email text GENERATED ALWAYS AS (lower((identity_data ->> 'email'::text))) STORED,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE auth.identities OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE identities; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.identities IS 'Auth: Stores identities associated to a user.';
-
-
---
--- Name: COLUMN identities.email; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.identities.email IS 'Auth: Email is a generated column that references the optional email property in the identity_data';
-
-
---
--- Name: instances; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.instances (
- id uuid NOT NULL,
- uuid uuid,
- raw_base_config text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone
-);
-
-
-ALTER TABLE auth.instances OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE instances; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.instances IS 'Auth: Manages users across multiple sites.';
-
-
---
--- Name: mfa_amr_claims; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.mfa_amr_claims (
- session_id uuid NOT NULL,
- created_at timestamp with time zone NOT NULL,
- updated_at timestamp with time zone NOT NULL,
- authentication_method text NOT NULL,
- id uuid NOT NULL
-);
-
-
-ALTER TABLE auth.mfa_amr_claims OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE mfa_amr_claims; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.mfa_amr_claims IS 'auth: stores authenticator method reference claims for multi factor authentication';
-
-
---
--- Name: mfa_challenges; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.mfa_challenges (
- id uuid NOT NULL,
- factor_id uuid NOT NULL,
- created_at timestamp with time zone NOT NULL,
- verified_at timestamp with time zone,
- ip_address inet NOT NULL,
- otp_code text,
- web_authn_session_data jsonb
-);
-
-
-ALTER TABLE auth.mfa_challenges OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE mfa_challenges; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.mfa_challenges IS 'auth: stores metadata about challenge requests made';
-
-
---
--- Name: mfa_factors; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.mfa_factors (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- friendly_name text,
- factor_type auth.factor_type NOT NULL,
- status auth.factor_status NOT NULL,
- created_at timestamp with time zone NOT NULL,
- updated_at timestamp with time zone NOT NULL,
- secret text,
- phone text,
- last_challenged_at timestamp with time zone,
- web_authn_credential jsonb,
- web_authn_aaguid uuid,
- last_webauthn_challenge_data jsonb
-);
-
-
-ALTER TABLE auth.mfa_factors OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE mfa_factors; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.mfa_factors IS 'auth: stores metadata about factors';
-
-
---
--- Name: COLUMN mfa_factors.last_webauthn_challenge_data; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.mfa_factors.last_webauthn_challenge_data IS 'Stores the latest WebAuthn challenge data including attestation/assertion for customer verification';
-
-
---
--- Name: oauth_authorizations; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_authorizations (
- id uuid NOT NULL,
- authorization_id text NOT NULL,
- client_id uuid NOT NULL,
- user_id uuid,
- redirect_uri text NOT NULL,
- scope text NOT NULL,
- state text,
- resource text,
- code_challenge text,
- code_challenge_method auth.code_challenge_method,
- response_type auth.oauth_response_type DEFAULT 'code'::auth.oauth_response_type NOT NULL,
- status auth.oauth_authorization_status DEFAULT 'pending'::auth.oauth_authorization_status NOT NULL,
- authorization_code text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- expires_at timestamp with time zone DEFAULT (now() + '00:03:00'::interval) NOT NULL,
- approved_at timestamp with time zone,
- nonce text,
- CONSTRAINT oauth_authorizations_authorization_code_length CHECK ((char_length(authorization_code) <= 255)),
- CONSTRAINT oauth_authorizations_code_challenge_length CHECK ((char_length(code_challenge) <= 128)),
- CONSTRAINT oauth_authorizations_expires_at_future CHECK ((expires_at > created_at)),
- CONSTRAINT oauth_authorizations_nonce_length CHECK ((char_length(nonce) <= 255)),
- CONSTRAINT oauth_authorizations_redirect_uri_length CHECK ((char_length(redirect_uri) <= 2048)),
- CONSTRAINT oauth_authorizations_resource_length CHECK ((char_length(resource) <= 2048)),
- CONSTRAINT oauth_authorizations_scope_length CHECK ((char_length(scope) <= 4096)),
- CONSTRAINT oauth_authorizations_state_length CHECK ((char_length(state) <= 4096))
-);
-
-
-ALTER TABLE auth.oauth_authorizations OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_client_states; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_client_states (
- id uuid NOT NULL,
- provider_type text NOT NULL,
- code_verifier text,
- created_at timestamp with time zone NOT NULL
-);
-
-
-ALTER TABLE auth.oauth_client_states OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE oauth_client_states; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.oauth_client_states IS 'Stores OAuth states for third-party provider authentication flows where Supabase acts as the OAuth client.';
-
-
---
--- Name: oauth_clients; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_clients (
- id uuid NOT NULL,
- client_secret_hash text,
- registration_type auth.oauth_registration_type NOT NULL,
- redirect_uris text NOT NULL,
- grant_types text NOT NULL,
- client_name text,
- client_uri text,
- logo_uri text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- deleted_at timestamp with time zone,
- client_type auth.oauth_client_type DEFAULT 'confidential'::auth.oauth_client_type NOT NULL,
- token_endpoint_auth_method text NOT NULL,
- CONSTRAINT oauth_clients_client_name_length CHECK ((char_length(client_name) <= 1024)),
- CONSTRAINT oauth_clients_client_uri_length CHECK ((char_length(client_uri) <= 2048)),
- CONSTRAINT oauth_clients_logo_uri_length CHECK ((char_length(logo_uri) <= 2048)),
- CONSTRAINT oauth_clients_token_endpoint_auth_method_check CHECK ((token_endpoint_auth_method = ANY (ARRAY['client_secret_basic'::text, 'client_secret_post'::text, 'none'::text])))
-);
-
-
-ALTER TABLE auth.oauth_clients OWNER TO supabase_auth_admin;
-
---
--- Name: oauth_consents; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.oauth_consents (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- client_id uuid NOT NULL,
- scopes text NOT NULL,
- granted_at timestamp with time zone DEFAULT now() NOT NULL,
- revoked_at timestamp with time zone,
- CONSTRAINT oauth_consents_revoked_after_granted CHECK (((revoked_at IS NULL) OR (revoked_at >= granted_at))),
- CONSTRAINT oauth_consents_scopes_length CHECK ((char_length(scopes) <= 2048)),
- CONSTRAINT oauth_consents_scopes_not_empty CHECK ((char_length(TRIM(BOTH FROM scopes)) > 0))
-);
-
-
-ALTER TABLE auth.oauth_consents OWNER TO supabase_auth_admin;
-
---
--- Name: one_time_tokens; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.one_time_tokens (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- token_type auth.one_time_token_type NOT NULL,
- token_hash text NOT NULL,
- relates_to text NOT NULL,
- created_at timestamp without time zone DEFAULT now() NOT NULL,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- CONSTRAINT one_time_tokens_token_hash_check CHECK ((char_length(token_hash) > 0))
-);
-
-
-ALTER TABLE auth.one_time_tokens OWNER TO supabase_auth_admin;
-
---
--- Name: refresh_tokens; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.refresh_tokens (
- instance_id uuid,
- id bigint NOT NULL,
- token character varying(255),
- user_id character varying(255),
- revoked boolean,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- parent character varying(255),
- session_id uuid
-);
-
-
-ALTER TABLE auth.refresh_tokens OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE refresh_tokens; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.refresh_tokens IS 'Auth: Store of tokens used to refresh JWT tokens once they expire.';
-
-
---
--- Name: refresh_tokens_id_seq; Type: SEQUENCE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE SEQUENCE auth.refresh_tokens_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER SEQUENCE auth.refresh_tokens_id_seq OWNER TO supabase_auth_admin;
-
---
--- Name: refresh_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER SEQUENCE auth.refresh_tokens_id_seq OWNED BY auth.refresh_tokens.id;
-
-
---
--- Name: saml_providers; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.saml_providers (
- id uuid NOT NULL,
- sso_provider_id uuid NOT NULL,
- entity_id text NOT NULL,
- metadata_xml text NOT NULL,
- metadata_url text,
- attribute_mapping jsonb,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- name_id_format text,
- CONSTRAINT "entity_id not empty" CHECK ((char_length(entity_id) > 0)),
- CONSTRAINT "metadata_url not empty" CHECK (((metadata_url = NULL::text) OR (char_length(metadata_url) > 0))),
- CONSTRAINT "metadata_xml not empty" CHECK ((char_length(metadata_xml) > 0))
-);
-
-
-ALTER TABLE auth.saml_providers OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE saml_providers; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.saml_providers IS 'Auth: Manages SAML Identity Provider connections.';
-
-
---
--- Name: saml_relay_states; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.saml_relay_states (
- id uuid NOT NULL,
- sso_provider_id uuid NOT NULL,
- request_id text NOT NULL,
- for_email text,
- redirect_to text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- flow_state_id uuid,
- CONSTRAINT "request_id not empty" CHECK ((char_length(request_id) > 0))
-);
-
-
-ALTER TABLE auth.saml_relay_states OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE saml_relay_states; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.saml_relay_states IS 'Auth: Contains SAML Relay State information for each Service Provider initiated login.';
-
-
---
--- Name: schema_migrations; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.schema_migrations (
- version character varying(255) NOT NULL
-);
-
-
-ALTER TABLE auth.schema_migrations OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE schema_migrations; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.schema_migrations IS 'Auth: Manages updates to the auth system.';
-
-
---
--- Name: sessions; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.sessions (
- id uuid NOT NULL,
- user_id uuid NOT NULL,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- factor_id uuid,
- aal auth.aal_level,
- not_after timestamp with time zone,
- refreshed_at timestamp without time zone,
- user_agent text,
- ip inet,
- tag text,
- oauth_client_id uuid,
- refresh_token_hmac_key text,
- refresh_token_counter bigint,
- scopes text,
- CONSTRAINT sessions_scopes_length CHECK ((char_length(scopes) <= 4096))
-);
-
-
-ALTER TABLE auth.sessions OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE sessions; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.sessions IS 'Auth: Stores session data associated to a user.';
-
-
---
--- Name: COLUMN sessions.not_after; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sessions.not_after IS 'Auth: Not after is a nullable column that contains a timestamp after which the session should be regarded as expired.';
-
-
---
--- Name: COLUMN sessions.refresh_token_hmac_key; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sessions.refresh_token_hmac_key IS 'Holds a HMAC-SHA256 key used to sign refresh tokens for this session.';
-
-
---
--- Name: COLUMN sessions.refresh_token_counter; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sessions.refresh_token_counter IS 'Holds the ID (counter) of the last issued refresh token.';
-
-
---
--- Name: sso_domains; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.sso_domains (
- id uuid NOT NULL,
- sso_provider_id uuid NOT NULL,
- domain text NOT NULL,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- CONSTRAINT "domain not empty" CHECK ((char_length(domain) > 0))
-);
-
-
-ALTER TABLE auth.sso_domains OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE sso_domains; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.sso_domains IS 'Auth: Manages SSO email address domain mapping to an SSO Identity Provider.';
-
-
---
--- Name: sso_providers; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.sso_providers (
- id uuid NOT NULL,
- resource_id text,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- disabled boolean,
- CONSTRAINT "resource_id not empty" CHECK (((resource_id = NULL::text) OR (char_length(resource_id) > 0)))
-);
-
-
-ALTER TABLE auth.sso_providers OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE sso_providers; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.sso_providers IS 'Auth: Manages SSO identity provider information; see saml_providers for SAML.';
-
-
---
--- Name: COLUMN sso_providers.resource_id; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.sso_providers.resource_id IS 'Auth: Uniquely identifies a SSO provider according to a user-chosen resource ID (case insensitive), useful in infrastructure as code.';
-
-
---
--- Name: users; Type: TABLE; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TABLE auth.users (
- instance_id uuid,
- id uuid NOT NULL,
- aud character varying(255),
- role character varying(255),
- email character varying(255),
- encrypted_password character varying(255),
- email_confirmed_at timestamp with time zone,
- invited_at timestamp with time zone,
- confirmation_token character varying(255),
- confirmation_sent_at timestamp with time zone,
- recovery_token character varying(255),
- recovery_sent_at timestamp with time zone,
- email_change_token_new character varying(255),
- email_change character varying(255),
- email_change_sent_at timestamp with time zone,
- last_sign_in_at timestamp with time zone,
- raw_app_meta_data jsonb,
- raw_user_meta_data jsonb,
- is_super_admin boolean,
- created_at timestamp with time zone,
- updated_at timestamp with time zone,
- phone text DEFAULT NULL::character varying,
- phone_confirmed_at timestamp with time zone,
- phone_change text DEFAULT ''::character varying,
- phone_change_token character varying(255) DEFAULT ''::character varying,
- phone_change_sent_at timestamp with time zone,
- confirmed_at timestamp with time zone GENERATED ALWAYS AS (LEAST(email_confirmed_at, phone_confirmed_at)) STORED,
- email_change_token_current character varying(255) DEFAULT ''::character varying,
- email_change_confirm_status smallint DEFAULT 0,
- banned_until timestamp with time zone,
- reauthentication_token character varying(255) DEFAULT ''::character varying,
- reauthentication_sent_at timestamp with time zone,
- is_sso_user boolean DEFAULT false NOT NULL,
- deleted_at timestamp with time zone,
- is_anonymous boolean DEFAULT false NOT NULL,
- CONSTRAINT users_email_change_confirm_status_check CHECK (((email_change_confirm_status >= 0) AND (email_change_confirm_status <= 2)))
-);
-
-
-ALTER TABLE auth.users OWNER TO supabase_auth_admin;
-
---
--- Name: TABLE users; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON TABLE auth.users IS 'Auth: Stores user login data within a secure schema.';
-
-
---
--- Name: COLUMN users.is_sso_user; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON COLUMN auth.users.is_sso_user IS 'Auth: Set this column to true when the account comes from SSO. These accounts can have duplicate emails.';
-
-
---
--- Name: agenda_bloqueios; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_bloqueios (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid,
- tipo text NOT NULL,
- titulo text NOT NULL,
- data_inicio date NOT NULL,
- data_fim date,
- hora_inicio time without time zone,
- hora_fim time without time zone,
- recorrente boolean DEFAULT false NOT NULL,
- dia_semana smallint,
- observacao text,
- origem text DEFAULT 'manual'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT agenda_bloqueios_tipo_check CHECK ((tipo = ANY (ARRAY['feriado_nacional'::text, 'feriado_municipal'::text, 'bloqueio'::text])))
-);
-
-
-ALTER TABLE public.agenda_bloqueios OWNER TO supabase_admin;
-
---
--- Name: agenda_configuracoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_configuracoes (
- owner_id uuid NOT NULL,
- duracao_padrao_minutos integer DEFAULT 50 NOT NULL,
- intervalo_padrao_minutos integer DEFAULT 0 NOT NULL,
- timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL,
- usar_horario_admin_custom boolean DEFAULT false NOT NULL,
- admin_inicio_visualizacao time without time zone,
- admin_fim_visualizacao time without time zone,
- admin_slot_visual_minutos integer DEFAULT 30 NOT NULL,
- online_ativo boolean DEFAULT false NOT NULL,
- online_min_antecedencia_horas integer DEFAULT 24 NOT NULL,
- online_max_dias_futuro integer DEFAULT 60 NOT NULL,
- online_cancelar_ate_horas integer DEFAULT 12 NOT NULL,
- online_reagendar_ate_horas integer DEFAULT 12 NOT NULL,
- online_limite_agendamentos_futuros integer DEFAULT 1 NOT NULL,
- online_modo text DEFAULT 'automatico'::text NOT NULL,
- online_buffer_antes_min integer DEFAULT 0 NOT NULL,
- online_buffer_depois_min integer DEFAULT 0 NOT NULL,
- online_modalidade text DEFAULT 'ambos'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- usar_granularidade_custom boolean DEFAULT false NOT NULL,
- granularidade_min integer,
- setup_concluido boolean DEFAULT false NOT NULL,
- setup_concluido_em timestamp with time zone,
- agenda_view_mode text DEFAULT 'full_24h'::text NOT NULL,
- agenda_custom_start time without time zone,
- agenda_custom_end time without time zone,
- session_duration_min integer DEFAULT 50 NOT NULL,
- session_break_min integer DEFAULT 10 NOT NULL,
- pausas_semanais jsonb DEFAULT '[]'::jsonb NOT NULL,
- setup_clinica_concluido boolean DEFAULT false NOT NULL,
- setup_clinica_concluido_em timestamp with time zone,
- tenant_id uuid,
- jornada_igual_todos boolean DEFAULT true,
- slot_mode text DEFAULT 'fixed'::text NOT NULL,
- CONSTRAINT agenda_configuracoes_admin_slot_visual_minutos_check CHECK ((admin_slot_visual_minutos = ANY (ARRAY[5, 10, 15, 20, 30, 60]))),
- CONSTRAINT agenda_configuracoes_check CHECK (((usar_horario_admin_custom = false) OR ((admin_inicio_visualizacao IS NOT NULL) AND (admin_fim_visualizacao IS NOT NULL) AND (admin_fim_visualizacao > admin_inicio_visualizacao)))),
- CONSTRAINT agenda_configuracoes_duracao_padrao_minutos_check CHECK (((duracao_padrao_minutos >= 10) AND (duracao_padrao_minutos <= 240))),
- CONSTRAINT agenda_configuracoes_granularidade_min_check CHECK (((granularidade_min IS NULL) OR (granularidade_min = ANY (ARRAY[5, 10, 15, 20, 30, 45, 50, 60])))),
- CONSTRAINT agenda_configuracoes_intervalo_padrao_minutos_check CHECK (((intervalo_padrao_minutos >= 0) AND (intervalo_padrao_minutos <= 120))),
- CONSTRAINT agenda_configuracoes_online_buffer_antes_min_check CHECK (((online_buffer_antes_min >= 0) AND (online_buffer_antes_min <= 120))),
- CONSTRAINT agenda_configuracoes_online_buffer_depois_min_check CHECK (((online_buffer_depois_min >= 0) AND (online_buffer_depois_min <= 120))),
- CONSTRAINT agenda_configuracoes_online_cancelar_ate_horas_check CHECK (((online_cancelar_ate_horas >= 0) AND (online_cancelar_ate_horas <= 720))),
- CONSTRAINT agenda_configuracoes_online_limite_agendamentos_futuros_check CHECK (((online_limite_agendamentos_futuros >= 1) AND (online_limite_agendamentos_futuros <= 10))),
- CONSTRAINT agenda_configuracoes_online_max_dias_futuro_check CHECK (((online_max_dias_futuro >= 1) AND (online_max_dias_futuro <= 365))),
- CONSTRAINT agenda_configuracoes_online_min_antecedencia_horas_check CHECK (((online_min_antecedencia_horas >= 0) AND (online_min_antecedencia_horas <= 720))),
- CONSTRAINT agenda_configuracoes_online_modalidade_check CHECK ((online_modalidade = ANY (ARRAY['online'::text, 'presencial'::text, 'ambos'::text]))),
- CONSTRAINT agenda_configuracoes_online_modo_check CHECK ((online_modo = ANY (ARRAY['automatico'::text, 'aprovacao'::text]))),
- CONSTRAINT agenda_configuracoes_online_reagendar_ate_horas_check CHECK (((online_reagendar_ate_horas >= 0) AND (online_reagendar_ate_horas <= 720))),
- CONSTRAINT agenda_configuracoes_slot_mode_chk CHECK ((slot_mode = ANY (ARRAY['fixed'::text, 'dynamic'::text]))),
- CONSTRAINT session_break_min_chk CHECK (((session_break_min >= 0) AND (session_break_min <= 60))),
- CONSTRAINT session_duration_min_chk CHECK (((session_duration_min >= 10) AND (session_duration_min <= 240)))
-);
-
-
-ALTER TABLE public.agenda_configuracoes OWNER TO supabase_admin;
-
---
--- Name: agenda_eventos; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_eventos (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tipo public.tipo_evento_agenda DEFAULT 'sessao'::public.tipo_evento_agenda NOT NULL,
- status public.status_evento_agenda DEFAULT 'agendado'::public.status_evento_agenda NOT NULL,
- titulo text,
- observacoes text,
- inicio_em timestamp with time zone NOT NULL,
- fim_em timestamp with time zone NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- terapeuta_id uuid,
- tenant_id uuid NOT NULL,
- visibility_scope text DEFAULT 'public'::text NOT NULL,
- mirror_of_event_id uuid,
- mirror_source text,
- patient_id uuid,
- determined_commitment_id uuid,
- link_online text,
- titulo_custom text,
- extra_fields jsonb,
- recurrence_id uuid,
- recurrence_date date,
- modalidade text DEFAULT 'presencial'::text,
- price numeric(10,2),
- billing_contract_id uuid,
- billed boolean DEFAULT false NOT NULL,
- services_customized boolean DEFAULT false NOT NULL,
- insurance_plan_id uuid,
- insurance_guide_number text,
- insurance_value numeric(10,2),
- insurance_plan_service_id uuid,
- CONSTRAINT agenda_eventos_check CHECK ((fim_em > inicio_em))
-);
-
-
-ALTER TABLE public.agenda_eventos OWNER TO supabase_admin;
-
---
--- Name: COLUMN agenda_eventos.price; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.agenda_eventos.price IS 'Valor da sessão em BRL. Preenchido automaticamente pela tabela professional_pricing do profissional.';
-
-
---
--- Name: agenda_excecoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_excecoes (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- data date NOT NULL,
- hora_inicio time without time zone,
- hora_fim time without time zone,
- tipo public.tipo_excecao_agenda NOT NULL,
- motivo text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- status public.status_excecao_agenda DEFAULT 'ativo'::public.status_excecao_agenda NOT NULL,
- fonte text DEFAULT 'manual'::text NOT NULL,
- aplicavel_online boolean DEFAULT true NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_excecoes_check CHECK ((((hora_inicio IS NULL) AND (hora_fim IS NULL)) OR ((hora_inicio IS NOT NULL) AND (hora_fim IS NOT NULL) AND (hora_fim > hora_inicio)))),
- CONSTRAINT agenda_excecoes_fonte_check CHECK ((fonte = ANY (ARRAY['manual'::text, 'feriado_google'::text, 'sistema'::text])))
-);
-
-
-ALTER TABLE public.agenda_excecoes OWNER TO supabase_admin;
-
---
--- Name: agenda_online_slots; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_online_slots (
- id bigint NOT NULL,
- owner_id uuid NOT NULL,
- weekday integer NOT NULL,
- "time" time without time zone NOT NULL,
- enabled boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_online_slots_weekday_check CHECK ((weekday = ANY (ARRAY[0, 1, 2, 3, 4, 5, 6])))
-);
-
-
-ALTER TABLE public.agenda_online_slots OWNER TO supabase_admin;
-
---
--- Name: agenda_online_slots_id_seq; Type: SEQUENCE; Schema: public; Owner: supabase_admin
---
-
-CREATE SEQUENCE public.agenda_online_slots_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER SEQUENCE public.agenda_online_slots_id_seq OWNER TO supabase_admin;
-
---
--- Name: agenda_online_slots_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: supabase_admin
---
-
-ALTER SEQUENCE public.agenda_online_slots_id_seq OWNED BY public.agenda_online_slots.id;
-
-
---
--- Name: agenda_regras_semanais; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_regras_semanais (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- dia_semana smallint NOT NULL,
- hora_inicio time without time zone NOT NULL,
- hora_fim time without time zone NOT NULL,
- modalidade text DEFAULT 'ambos'::text NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_regras_semanais_check CHECK ((hora_fim > hora_inicio)),
- CONSTRAINT agenda_regras_semanais_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6))),
- CONSTRAINT agenda_regras_semanais_modalidade_check CHECK (((modalidade = ANY (ARRAY['online'::text, 'presencial'::text, 'ambos'::text])) OR (modalidade IS NULL)))
-);
-
-
-ALTER TABLE public.agenda_regras_semanais OWNER TO supabase_admin;
-
---
--- Name: agenda_slots_bloqueados_semanais; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_slots_bloqueados_semanais (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- dia_semana smallint NOT NULL,
- hora_inicio time without time zone NOT NULL,
- motivo text,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_slots_bloqueados_semanais_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6)))
-);
-
-
-ALTER TABLE public.agenda_slots_bloqueados_semanais OWNER TO supabase_admin;
-
---
--- Name: agenda_slots_regras; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agenda_slots_regras (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- dia_semana smallint NOT NULL,
- passo_minutos integer NOT NULL,
- offset_minutos integer DEFAULT 0 NOT NULL,
- buffer_antes_min integer DEFAULT 0 NOT NULL,
- buffer_depois_min integer DEFAULT 0 NOT NULL,
- min_antecedencia_horas integer DEFAULT 0 NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL,
- CONSTRAINT agenda_slots_regras_buffer_antes_min_check CHECK (((buffer_antes_min >= 0) AND (buffer_antes_min <= 240))),
- CONSTRAINT agenda_slots_regras_buffer_depois_min_check CHECK (((buffer_depois_min >= 0) AND (buffer_depois_min <= 240))),
- CONSTRAINT agenda_slots_regras_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6))),
- CONSTRAINT agenda_slots_regras_min_antecedencia_horas_check CHECK (((min_antecedencia_horas >= 0) AND (min_antecedencia_horas <= 720))),
- CONSTRAINT agenda_slots_regras_offset_minutos_check CHECK (((offset_minutos >= 0) AND (offset_minutos <= 55))),
- CONSTRAINT agenda_slots_regras_passo_minutos_check CHECK (((passo_minutos >= 5) AND (passo_minutos <= 240)))
-);
-
-
-ALTER TABLE public.agenda_slots_regras OWNER TO supabase_admin;
-
---
--- Name: agendador_configuracoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agendador_configuracoes (
- owner_id uuid NOT NULL,
- tenant_id uuid,
- ativo boolean DEFAULT false NOT NULL,
- link_slug text,
- imagem_fundo_url text,
- imagem_header_url text,
- logomarca_url text,
- cor_primaria text DEFAULT '#4b6bff'::text,
- nome_exibicao text,
- endereco text,
- botao_como_chegar_ativo boolean DEFAULT true NOT NULL,
- maps_url text,
- modo_aprovacao text DEFAULT 'aprovacao'::text NOT NULL,
- modalidade text DEFAULT 'presencial'::text NOT NULL,
- tipos_habilitados jsonb DEFAULT '["primeira", "retorno"]'::jsonb NOT NULL,
- duracao_sessao_min integer DEFAULT 50 NOT NULL,
- antecedencia_minima_horas integer DEFAULT 24 NOT NULL,
- prazo_resposta_horas integer DEFAULT 2 NOT NULL,
- reserva_horas integer DEFAULT 2 NOT NULL,
- pagamento_obrigatorio boolean DEFAULT false NOT NULL,
- pix_chave text,
- pix_countdown_minutos integer DEFAULT 20 NOT NULL,
- triagem_motivo boolean DEFAULT true NOT NULL,
- triagem_como_conheceu boolean DEFAULT false NOT NULL,
- verificacao_email boolean DEFAULT false NOT NULL,
- exigir_aceite_lgpd boolean DEFAULT true NOT NULL,
- mensagem_boas_vindas text,
- texto_como_se_preparar text,
- texto_termos_lgpd text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- pagamento_modo text DEFAULT 'sem_pagamento'::text NOT NULL,
- pagamento_metodos_visiveis text[] DEFAULT '{}'::text[] NOT NULL,
- CONSTRAINT agendador_configuracoes_antecedencia_check CHECK (((antecedencia_minima_horas >= 0) AND (antecedencia_minima_horas <= 720))),
- CONSTRAINT agendador_configuracoes_duracao_check CHECK (((duracao_sessao_min >= 10) AND (duracao_sessao_min <= 240))),
- CONSTRAINT agendador_configuracoes_modalidade_check CHECK ((modalidade = ANY (ARRAY['presencial'::text, 'online'::text, 'ambos'::text]))),
- CONSTRAINT agendador_configuracoes_modo_check CHECK ((modo_aprovacao = ANY (ARRAY['automatico'::text, 'aprovacao'::text]))),
- CONSTRAINT agendador_configuracoes_pix_countdown_check CHECK (((pix_countdown_minutos >= 5) AND (pix_countdown_minutos <= 120))),
- CONSTRAINT agendador_configuracoes_prazo_check CHECK (((prazo_resposta_horas >= 1) AND (prazo_resposta_horas <= 72))),
- CONSTRAINT agendador_configuracoes_reserva_check CHECK (((reserva_horas >= 1) AND (reserva_horas <= 48)))
-);
-
-
-ALTER TABLE public.agendador_configuracoes OWNER TO supabase_admin;
-
---
--- Name: COLUMN agendador_configuracoes.pagamento_modo; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.agendador_configuracoes.pagamento_modo IS 'sem_pagamento | pagar_na_hora | pix_antecipado';
-
-
---
--- Name: COLUMN agendador_configuracoes.pagamento_metodos_visiveis; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.agendador_configuracoes.pagamento_metodos_visiveis IS 'Métodos exibidos ao paciente quando pagamento_modo = pagar_na_hora. Ex: {pix, deposito, dinheiro, cartao, convenio}';
-
-
---
--- Name: agendador_solicitacoes; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.agendador_solicitacoes (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid,
- paciente_nome text NOT NULL,
- paciente_sobrenome text,
- paciente_email text NOT NULL,
- paciente_celular text,
- paciente_cpf text,
- tipo text NOT NULL,
- modalidade text NOT NULL,
- data_solicitada date NOT NULL,
- hora_solicitada time without time zone NOT NULL,
- reservado_ate timestamp with time zone,
- motivo text,
- como_conheceu text,
- pix_status text DEFAULT 'pendente'::text,
- pix_pago_em timestamp with time zone,
- status text DEFAULT 'pendente'::text NOT NULL,
- recusado_motivo text,
- autorizado_em timestamp with time zone,
- autorizado_por uuid,
- user_id uuid,
- patient_id uuid,
- evento_id uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT agendador_sol_modalidade_check CHECK ((modalidade = ANY (ARRAY['presencial'::text, 'online'::text]))),
- CONSTRAINT agendador_sol_pix_check CHECK (((pix_status IS NULL) OR (pix_status = ANY (ARRAY['pendente'::text, 'pago'::text, 'expirado'::text])))),
- CONSTRAINT agendador_sol_status_check CHECK ((status = ANY (ARRAY['pendente'::text, 'autorizado'::text, 'recusado'::text, 'expirado'::text, 'convertido'::text]))),
- CONSTRAINT agendador_sol_tipo_check CHECK ((tipo = ANY (ARRAY['primeira'::text, 'retorno'::text, 'reagendar'::text])))
-);
-
-
-ALTER TABLE public.agendador_solicitacoes OWNER TO supabase_admin;
-
---
--- Name: billing_contracts; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.billing_contracts (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- patient_id uuid NOT NULL,
- type text NOT NULL,
- total_sessions integer,
- sessions_used integer DEFAULT 0,
- package_price numeric(10,2),
- amount numeric(10,2),
- billing_interval text,
- active_from timestamp with time zone DEFAULT now(),
- active_to timestamp with time zone,
- status text DEFAULT 'active'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- CONSTRAINT billing_contracts_interval_chk CHECK (((billing_interval IS NULL) OR (billing_interval = ANY (ARRAY['monthly'::text, 'weekly'::text])))),
- CONSTRAINT billing_contracts_sess_used_chk CHECK (((sessions_used IS NULL) OR (sessions_used >= 0))),
- CONSTRAINT billing_contracts_status_chk CHECK ((status = ANY (ARRAY['active'::text, 'completed'::text, 'cancelled'::text]))),
- CONSTRAINT billing_contracts_total_sess_chk CHECK (((total_sessions IS NULL) OR (total_sessions > 0))),
- CONSTRAINT billing_contracts_type_chk CHECK ((type = ANY (ARRAY['per_session'::text, 'package'::text, 'subscription'::text])))
-);
-
-
-ALTER TABLE public.billing_contracts OWNER TO supabase_admin;
-
---
--- Name: commitment_services; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.commitment_services (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- commitment_id uuid NOT NULL,
- service_id uuid NOT NULL,
- quantity integer DEFAULT 1 NOT NULL,
- unit_price numeric(10,2) NOT NULL,
- discount_pct numeric(5,2) DEFAULT 0,
- discount_flat numeric(10,2) DEFAULT 0,
- final_price numeric(10,2) NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- CONSTRAINT commitment_services_disc_flat_chk CHECK ((discount_flat >= (0)::numeric)),
- CONSTRAINT commitment_services_disc_pct_chk CHECK (((discount_pct >= (0)::numeric) AND (discount_pct <= (100)::numeric))),
- CONSTRAINT commitment_services_final_price_chk CHECK ((final_price >= (0)::numeric)),
- CONSTRAINT commitment_services_quantity_chk CHECK ((quantity > 0))
-);
-
-
-ALTER TABLE public.commitment_services OWNER TO supabase_admin;
-
---
--- Name: commitment_time_logs; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.commitment_time_logs (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- commitment_id uuid NOT NULL,
- calendar_event_id uuid,
- source public.commitment_log_source DEFAULT 'manual'::public.commitment_log_source NOT NULL,
- started_at timestamp with time zone NOT NULL,
- ended_at timestamp with time zone NOT NULL,
- minutes integer NOT NULL,
- created_by uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.commitment_time_logs OWNER TO supabase_admin;
-
---
--- Name: current_tenant_id; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.current_tenant_id AS
- SELECT current_setting('request.jwt.claim.tenant_id'::text, true) AS current_setting;
-
-
-ALTER VIEW public.current_tenant_id OWNER TO supabase_admin;
-
---
--- Name: determined_commitment_fields; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.determined_commitment_fields (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- commitment_id uuid NOT NULL,
- key text NOT NULL,
- label text NOT NULL,
- field_type public.determined_field_type DEFAULT 'text'::public.determined_field_type NOT NULL,
- required boolean DEFAULT false NOT NULL,
- sort_order integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.determined_commitment_fields OWNER TO supabase_admin;
-
---
--- Name: determined_commitments; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.determined_commitments (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- created_by uuid,
- is_native boolean DEFAULT false NOT NULL,
- native_key text,
- is_locked boolean DEFAULT false NOT NULL,
- active boolean DEFAULT true NOT NULL,
- name text NOT NULL,
- description text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- bg_color text,
- text_color text
-);
-
-
-ALTER TABLE public.determined_commitments OWNER TO supabase_admin;
-
---
--- Name: dev_user_credentials; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.dev_user_credentials (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid,
- email text NOT NULL,
- password_dev text NOT NULL,
- kind text DEFAULT 'custom'::text NOT NULL,
- note text,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.dev_user_credentials OWNER TO supabase_admin;
-
---
--- Name: entitlements_invalidation; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.entitlements_invalidation (
- owner_id uuid NOT NULL,
- changed_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.entitlements_invalidation OWNER TO supabase_admin;
-
---
--- Name: features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.features (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- key text NOT NULL,
- description text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- descricao text DEFAULT ''::text NOT NULL,
- name text DEFAULT ''::text NOT NULL
-);
-
-
-ALTER TABLE public.features OWNER TO supabase_admin;
-
---
--- Name: COLUMN features.descricao; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.features.descricao IS 'Descrição humana da feature (exibição no admin e documentação).';
-
-
---
--- Name: feriados; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.feriados (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid,
- owner_id uuid,
- tipo text DEFAULT 'municipal'::text NOT NULL,
- nome text NOT NULL,
- data date NOT NULL,
- cidade text,
- estado text,
- observacao text,
- bloqueia_sessoes boolean DEFAULT false NOT NULL,
- criado_em timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT feriados_tipo_check CHECK ((tipo = ANY (ARRAY['municipal'::text, 'personalizado'::text])))
-);
-
-
-ALTER TABLE public.feriados OWNER TO supabase_admin;
-
---
--- Name: financial_exceptions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.financial_exceptions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid,
- tenant_id uuid NOT NULL,
- exception_type text NOT NULL,
- charge_mode text NOT NULL,
- charge_value numeric(10,2),
- charge_pct numeric(5,2),
- min_hours_notice integer,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now(),
- CONSTRAINT financial_exceptions_charge_chk CHECK ((charge_mode = ANY (ARRAY['none'::text, 'full'::text, 'fixed_fee'::text, 'percentage'::text]))),
- CONSTRAINT financial_exceptions_type_chk CHECK ((exception_type = ANY (ARRAY['patient_no_show'::text, 'patient_cancellation'::text, 'professional_cancellation'::text])))
-);
-
-
-ALTER TABLE public.financial_exceptions OWNER TO supabase_admin;
-
---
--- Name: insurance_plan_services; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.insurance_plan_services (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- insurance_plan_id uuid NOT NULL,
- name text NOT NULL,
- value numeric(10,2) NOT NULL,
- active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.insurance_plan_services OWNER TO supabase_admin;
-
---
--- Name: insurance_plans; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.insurance_plans (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- name text NOT NULL,
- notes text,
- default_value numeric(10,2),
- active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.insurance_plans OWNER TO supabase_admin;
-
---
--- Name: module_features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.module_features (
- module_id uuid NOT NULL,
- feature_id uuid NOT NULL,
- enabled boolean DEFAULT true NOT NULL,
- limits jsonb,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.module_features OWNER TO supabase_admin;
-
---
--- Name: modules; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.modules (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- key text NOT NULL,
- name text NOT NULL,
- description text,
- is_active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.modules OWNER TO supabase_admin;
-
---
--- Name: plan_features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_features (
- plan_id uuid NOT NULL,
- feature_id uuid NOT NULL,
- enabled boolean DEFAULT true NOT NULL,
- limits jsonb,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.plan_features OWNER TO supabase_admin;
-
---
--- Name: tenant_modules; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_modules (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- module_id uuid NOT NULL,
- status text DEFAULT 'active'::text NOT NULL,
- settings jsonb,
- provider text DEFAULT 'manual'::text NOT NULL,
- provider_item_id text,
- installed_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_modules OWNER TO supabase_admin;
-
---
--- Name: owner_feature_entitlements; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.owner_feature_entitlements AS
- WITH base AS (
- SELECT s.user_id AS owner_id,
- f.key AS feature_key,
- pf.limits,
- 'plan'::text AS source
- FROM ((public.subscriptions s
- JOIN public.plan_features pf ON (((pf.plan_id = s.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)))
- WHERE ((s.status = 'active'::text) AND (s.user_id IS NOT NULL))
- UNION ALL
- SELECT tm.owner_id,
- f.key AS feature_key,
- mf.limits,
- 'module'::text AS source
- FROM (((public.tenant_modules tm
- JOIN public.modules m ON (((m.id = tm.module_id) AND (m.is_active = true))))
- JOIN public.module_features mf ON (((mf.module_id = m.id) AND (mf.enabled = true))))
- JOIN public.features f ON ((f.id = mf.feature_id)))
- WHERE ((tm.status = 'active'::text) AND (tm.owner_id IS NOT NULL))
- )
- SELECT owner_id,
- feature_key,
- array_agg(DISTINCT source) AS sources,
- jsonb_agg(limits) FILTER (WHERE (limits IS NOT NULL)) AS limits_list
- FROM base
- GROUP BY owner_id, feature_key;
-
-
-ALTER VIEW public.owner_feature_entitlements OWNER TO supabase_admin;
-
---
--- Name: owner_users; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.owner_users (
- owner_id uuid NOT NULL,
- user_id uuid NOT NULL,
- role text DEFAULT 'admin'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.owner_users OWNER TO supabase_admin;
-
---
--- Name: patient_discounts; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_discounts (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- patient_id uuid NOT NULL,
- discount_pct numeric(5,2) DEFAULT 0,
- discount_flat numeric(10,2) DEFAULT 0,
- reason text,
- active boolean DEFAULT true NOT NULL,
- active_from timestamp with time zone DEFAULT now(),
- active_to timestamp with time zone,
- created_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.patient_discounts OWNER TO supabase_admin;
-
---
--- Name: patient_group_patient; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_group_patient (
- patient_group_id uuid NOT NULL,
- patient_id uuid NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_group_patient OWNER TO supabase_admin;
-
---
--- Name: patient_groups; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_groups (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- nome text NOT NULL,
- descricao text,
- cor text,
- is_active boolean DEFAULT true NOT NULL,
- is_system boolean DEFAULT false NOT NULL,
- owner_id uuid DEFAULT auth.uid() NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- therapist_id uuid,
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_groups OWNER TO supabase_admin;
-
---
--- Name: patient_intake_requests; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_intake_requests (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- token text NOT NULL,
- consent boolean DEFAULT false NOT NULL,
- status text DEFAULT 'new'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- converted_patient_id uuid,
- rejected_reason text,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- cpf text,
- rg text,
- cep text,
- nome_completo text,
- email_principal text,
- telefone text,
- pais text,
- cidade text,
- estado text,
- endereco text,
- numero text,
- bairro text,
- complemento text,
- data_nascimento date,
- naturalidade text,
- genero text,
- estado_civil text,
- onde_nos_conheceu text,
- encaminhado_por text,
- observacoes text,
- notas_internas text,
- email_alternativo text,
- telefone_alternativo text,
- profissao text,
- escolaridade text,
- nacionalidade text,
- avatar_url text,
- tenant_id uuid,
- CONSTRAINT chk_intakes_status CHECK ((status = ANY (ARRAY['new'::text, 'converted'::text, 'rejected'::text])))
-);
-
-
-ALTER TABLE public.patient_intake_requests OWNER TO supabase_admin;
-
---
--- Name: patient_invites; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_invites (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- token text NOT NULL,
- active boolean DEFAULT true NOT NULL,
- expires_at timestamp with time zone,
- max_uses integer,
- uses integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid
-);
-
-
-ALTER TABLE public.patient_invites OWNER TO supabase_admin;
-
---
--- Name: patient_patient_tag; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_patient_tag (
- owner_id uuid NOT NULL,
- patient_id uuid NOT NULL,
- tag_id uuid NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_patient_tag OWNER TO supabase_admin;
-
---
--- Name: patient_tags; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patient_tags (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- nome text NOT NULL,
- cor text,
- is_padrao boolean DEFAULT false NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone,
- tenant_id uuid NOT NULL
-);
-
-
-ALTER TABLE public.patient_tags OWNER TO supabase_admin;
-
---
--- Name: patients; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.patients (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- nome_completo text NOT NULL,
- email_principal text,
- telefone text,
- created_at timestamp with time zone DEFAULT now(),
- owner_id uuid,
- avatar_url text,
- status text DEFAULT 'Ativo'::text,
- last_attended_at timestamp with time zone,
- is_native boolean DEFAULT false,
- naturalidade text,
- data_nascimento date,
- rg text,
- cpf text,
- identification_color text,
- genero text,
- estado_civil text,
- email_alternativo text,
- pais text DEFAULT 'Brasil'::text,
- cep text,
- cidade text,
- estado text,
- endereco text,
- numero text,
- bairro text,
- complemento text,
- escolaridade text,
- profissao text,
- nome_parente text,
- grau_parentesco text,
- telefone_alternativo text,
- onde_nos_conheceu text,
- encaminhado_por text,
- nome_responsavel text,
- telefone_responsavel text,
- cpf_responsavel text,
- observacao_responsavel text,
- cobranca_no_responsavel boolean DEFAULT false,
- observacoes text,
- notas_internas text,
- updated_at timestamp with time zone DEFAULT now(),
- telefone_parente text,
- tenant_id uuid NOT NULL,
- responsible_member_id uuid NOT NULL,
- user_id uuid,
- patient_scope text DEFAULT 'clinic'::text NOT NULL,
- therapist_member_id uuid,
- CONSTRAINT cpf_responsavel_format_check CHECK (((cpf_responsavel IS NULL) OR (cpf_responsavel ~ '^\d{11}$'::text))),
- CONSTRAINT patients_cpf_format_check CHECK (((cpf IS NULL) OR (cpf ~ '^\d{11}$'::text))),
- CONSTRAINT patients_patient_scope_check CHECK ((patient_scope = ANY (ARRAY['clinic'::text, 'therapist'::text]))),
- CONSTRAINT patients_status_check CHECK ((status = ANY (ARRAY['Ativo'::text, 'Inativo'::text, 'Alta'::text, 'Encaminhado'::text]))),
- CONSTRAINT patients_therapist_scope_consistency CHECK ((((patient_scope = 'clinic'::text) AND (therapist_member_id IS NULL)) OR ((patient_scope = 'therapist'::text) AND (therapist_member_id IS NOT NULL))))
-);
-
-
-ALTER TABLE public.patients OWNER TO supabase_admin;
-
---
--- Name: COLUMN patients.avatar_url; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.patients.avatar_url IS 'URL pública da imagem de avatar armazenada no Supabase Storage';
-
-
---
--- Name: payment_settings; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.payment_settings (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid,
- pix_ativo boolean DEFAULT false NOT NULL,
- pix_tipo text DEFAULT 'cpf'::text NOT NULL,
- pix_chave text DEFAULT ''::text NOT NULL,
- pix_nome_titular text DEFAULT ''::text NOT NULL,
- deposito_ativo boolean DEFAULT false NOT NULL,
- deposito_banco text DEFAULT ''::text NOT NULL,
- deposito_agencia text DEFAULT ''::text NOT NULL,
- deposito_conta text DEFAULT ''::text NOT NULL,
- deposito_tipo_conta text DEFAULT 'corrente'::text NOT NULL,
- deposito_titular text DEFAULT ''::text NOT NULL,
- deposito_cpf_cnpj text DEFAULT ''::text NOT NULL,
- dinheiro_ativo boolean DEFAULT false NOT NULL,
- cartao_ativo boolean DEFAULT false NOT NULL,
- cartao_instrucao text DEFAULT ''::text NOT NULL,
- convenio_ativo boolean DEFAULT false NOT NULL,
- convenio_lista text DEFAULT ''::text NOT NULL,
- observacoes_pagamento text DEFAULT ''::text NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.payment_settings OWNER TO supabase_admin;
-
---
--- Name: plan_prices; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_prices (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- plan_id uuid NOT NULL,
- currency text DEFAULT 'BRL'::text NOT NULL,
- "interval" text NOT NULL,
- amount_cents integer NOT NULL,
- is_active boolean DEFAULT true NOT NULL,
- active_from timestamp with time zone DEFAULT now() NOT NULL,
- active_to timestamp with time zone,
- source text DEFAULT 'manual'::text NOT NULL,
- provider text,
- provider_price_id text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- CONSTRAINT plan_prices_amount_cents_check CHECK ((amount_cents >= 0)),
- CONSTRAINT plan_prices_interval_check CHECK (("interval" = ANY (ARRAY['month'::text, 'year'::text])))
-);
-
-
-ALTER TABLE public.plan_prices OWNER TO supabase_admin;
-
---
--- Name: TABLE plan_prices; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.plan_prices IS 'Histórico de preços por plano (fonte: manual/gateway).';
-
-
---
--- Name: plan_public; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_public (
- plan_id uuid NOT NULL,
- public_name text DEFAULT ''::text NOT NULL,
- public_description text DEFAULT ''::text NOT NULL,
- badge text,
- is_featured boolean DEFAULT false NOT NULL,
- is_visible boolean DEFAULT true NOT NULL,
- sort_order integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.plan_public OWNER TO supabase_admin;
-
---
--- Name: TABLE plan_public; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.plan_public IS 'Configuração de vitrine (página pública) dos planos.';
-
-
---
--- Name: plan_public_bullets; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plan_public_bullets (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- plan_id uuid NOT NULL,
- text text NOT NULL,
- sort_order integer DEFAULT 0 NOT NULL,
- highlight boolean DEFAULT false NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.plan_public_bullets OWNER TO supabase_admin;
-
---
--- Name: plans; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.plans (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- key text NOT NULL,
- name text NOT NULL,
- description text,
- is_active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- price_cents integer DEFAULT 0 NOT NULL,
- currency text DEFAULT 'BRL'::text NOT NULL,
- billing_interval text DEFAULT 'month'::text NOT NULL,
- target text,
- max_supervisees integer,
- CONSTRAINT plans_target_check CHECK ((target = ANY (ARRAY['patient'::text, 'therapist'::text, 'clinic'::text, 'supervisor'::text])))
-);
-
-
-ALTER TABLE public.plans OWNER TO supabase_admin;
-
---
--- Name: COLUMN plans.name; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.plans.name IS 'Nome interno do plano (admin). A key é técnica/imutável.';
-
-
---
--- Name: COLUMN plans.target; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.plans.target IS 'Público-alvo do plano: patient, therapist ou clinic.';
-
-
---
--- Name: COLUMN plans.max_supervisees; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.plans.max_supervisees IS 'Limite de terapeutas que podem ser supervisionados. Apenas para planos target=supervisor. NULL = sem limite.';
-
-
---
--- Name: professional_pricing; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.professional_pricing (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- determined_commitment_id uuid,
- price numeric(10,2) NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.professional_pricing OWNER TO supabase_admin;
-
---
--- Name: TABLE professional_pricing; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.professional_pricing IS 'DEPRECATED: substituída por public.services. Manter até próxima release de limpeza.';
-
-
---
--- Name: profiles; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.profiles (
- id uuid NOT NULL,
- role text DEFAULT 'tenant_member'::text NOT NULL,
- full_name text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- avatar_url text,
- phone text,
- bio text,
- language text DEFAULT 'pt-BR'::text NOT NULL,
- timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL,
- notify_system_email boolean DEFAULT true NOT NULL,
- notify_reminders boolean DEFAULT true NOT NULL,
- notify_news boolean DEFAULT false NOT NULL,
- account_type text DEFAULT 'free'::text NOT NULL,
- platform_roles text[] DEFAULT '{}'::text[] NOT NULL,
- nickname text,
- work_description text,
- work_description_other text,
- site_url text,
- social_instagram text,
- social_youtube text,
- social_facebook text,
- social_x text,
- social_custom jsonb DEFAULT '[]'::jsonb NOT NULL,
- CONSTRAINT profiles_account_type_check CHECK ((account_type = ANY (ARRAY['free'::text, 'patient'::text, 'therapist'::text, 'clinic'::text]))),
- CONSTRAINT profiles_role_check CHECK ((role = ANY (ARRAY['saas_admin'::text, 'tenant_member'::text, 'portal_user'::text, 'patient'::text])))
-);
-
-
-ALTER TABLE public.profiles OWNER TO supabase_admin;
-
---
--- Name: COLUMN profiles.phone; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.phone IS 'WhatsApp / telefone no formato (99) 99999-9999';
-
-
---
--- Name: COLUMN profiles.bio; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.bio IS 'Breve apresentação pública (máx 300 chars no front)';
-
-
---
--- Name: COLUMN profiles.account_type; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.account_type IS 'Tipo de conta: free=sem perfil ainda, patient=paciente (imutável), therapist=terapeuta (imutável), clinic=clínica (imutável).';
-
-
---
--- Name: COLUMN profiles.platform_roles; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.platform_roles IS 'Papéis globais de plataforma, independentes de tenant. Ex: editor de microlearning. Atribuído pelo saas_admin.';
-
-
---
--- Name: COLUMN profiles.nickname; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.nickname IS 'Apelido preferido para comunicação interna (Agência PSI)';
-
-
---
--- Name: COLUMN profiles.work_description; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.work_description IS 'Categoria de trabalho selecionada no perfil público';
-
-
---
--- Name: COLUMN profiles.work_description_other; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.work_description_other IS 'Descrição livre quando work_description = ''outro''';
-
-
---
--- Name: COLUMN profiles.site_url; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.site_url IS 'Endereço do site pessoal ou profissional';
-
-
---
--- Name: COLUMN profiles.social_instagram; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.social_instagram IS 'Handle ou URL do Instagram';
-
-
---
--- Name: COLUMN profiles.social_youtube; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.social_youtube IS 'Handle ou URL do canal no YouTube';
-
-
---
--- Name: COLUMN profiles.social_facebook; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.social_facebook IS 'Handle ou URL da página no Facebook';
-
-
---
--- Name: COLUMN profiles.social_x; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.social_x IS 'Handle ou URL do perfil no X (Twitter)';
-
-
---
--- Name: COLUMN profiles.social_custom; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.profiles.social_custom IS 'Array JSON com redes adicionais livres: [{name, url}]';
-
-
---
--- Name: recurrence_exceptions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.recurrence_exceptions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- recurrence_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- original_date date NOT NULL,
- type public.recurrence_exception_type NOT NULL,
- new_date date,
- new_start_time time without time zone,
- new_end_time time without time zone,
- modalidade text,
- observacoes text,
- titulo_custom text,
- extra_fields jsonb,
- reason text,
- agenda_evento_id uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.recurrence_exceptions OWNER TO supabase_admin;
-
---
--- Name: recurrence_rule_services; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.recurrence_rule_services (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- rule_id uuid NOT NULL,
- service_id uuid NOT NULL,
- quantity integer DEFAULT 1 NOT NULL,
- unit_price numeric(10,2) NOT NULL,
- discount_pct numeric(5,2) DEFAULT 0,
- discount_flat numeric(10,2) DEFAULT 0,
- final_price numeric(10,2) NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- CONSTRAINT recurrence_rule_services_disc_flat_chk CHECK ((discount_flat >= (0)::numeric)),
- CONSTRAINT recurrence_rule_services_disc_pct_chk CHECK (((discount_pct >= (0)::numeric) AND (discount_pct <= (100)::numeric))),
- CONSTRAINT recurrence_rule_services_final_price_chk CHECK ((final_price >= (0)::numeric)),
- CONSTRAINT recurrence_rule_services_quantity_chk CHECK ((quantity > 0))
-);
-
-
-ALTER TABLE public.recurrence_rule_services OWNER TO supabase_admin;
-
---
--- Name: recurrence_rules; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.recurrence_rules (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- owner_id uuid NOT NULL,
- therapist_id uuid,
- patient_id uuid,
- determined_commitment_id uuid,
- type public.recurrence_type DEFAULT 'weekly'::public.recurrence_type NOT NULL,
- "interval" smallint DEFAULT 1 NOT NULL,
- weekdays smallint[] DEFAULT '{}'::smallint[] NOT NULL,
- start_time time without time zone NOT NULL,
- end_time time without time zone NOT NULL,
- timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL,
- duration_min smallint DEFAULT 50 NOT NULL,
- start_date date NOT NULL,
- end_date date,
- max_occurrences integer,
- open_ended boolean DEFAULT true NOT NULL,
- modalidade text DEFAULT 'presencial'::text,
- titulo_custom text,
- observacoes text,
- extra_fields jsonb,
- status text DEFAULT 'ativo'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- price numeric(10,2),
- insurance_plan_id uuid,
- insurance_guide_number text,
- insurance_value numeric(10,2),
- insurance_plan_service_id uuid,
- CONSTRAINT recurrence_rules_dates_chk CHECK (((end_date IS NULL) OR (end_date >= start_date))),
- CONSTRAINT recurrence_rules_interval_chk CHECK (("interval" >= 1)),
- CONSTRAINT recurrence_rules_status_check CHECK ((status = ANY (ARRAY['ativo'::text, 'pausado'::text, 'cancelado'::text]))),
- CONSTRAINT recurrence_rules_times_chk CHECK ((end_time > start_time))
-);
-
-
-ALTER TABLE public.recurrence_rules OWNER TO supabase_admin;
-
---
--- Name: saas_admins; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_admins (
- user_id uuid NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_admins OWNER TO supabase_admin;
-
---
--- Name: saas_doc_votos; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_doc_votos (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- doc_id uuid NOT NULL,
- user_id uuid NOT NULL,
- util boolean NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_doc_votos OWNER TO supabase_admin;
-
---
--- Name: saas_docs; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_docs (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- titulo text NOT NULL,
- conteudo text DEFAULT ''::text NOT NULL,
- medias jsonb DEFAULT '[]'::jsonb NOT NULL,
- tipo_acesso text DEFAULT 'usuario'::text NOT NULL,
- pagina_path text NOT NULL,
- docs_relacionados uuid[] DEFAULT '{}'::uuid[] NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- ordem integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- categoria text,
- exibir_no_faq boolean DEFAULT false NOT NULL,
- votos_util integer DEFAULT 0 NOT NULL,
- votos_nao_util integer DEFAULT 0 NOT NULL,
- CONSTRAINT saas_docs_tipo_acesso_check CHECK ((tipo_acesso = ANY (ARRAY['admin'::text, 'usuario'::text])))
-);
-
-
-ALTER TABLE public.saas_docs OWNER TO supabase_admin;
-
---
--- Name: COLUMN saas_docs.categoria; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.saas_docs.categoria IS 'Agrupa docs no portal FAQ (ex: Conta, Agenda, Pagamentos)';
-
-
---
--- Name: COLUMN saas_docs.exibir_no_faq; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.saas_docs.exibir_no_faq IS 'Se true, a doc e seus itens FAQ aparecem no portal de FAQ';
-
-
---
--- Name: saas_faq; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_faq (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- pergunta text NOT NULL,
- categoria text,
- publico boolean DEFAULT false NOT NULL,
- votos integer DEFAULT 0 NOT NULL,
- titulo text,
- conteudo text,
- tipo_acesso text DEFAULT 'usuario'::text NOT NULL,
- pagina_path text NOT NULL,
- pagina_label text,
- medias jsonb DEFAULT '[]'::jsonb NOT NULL,
- faqs_relacionados uuid[] DEFAULT '{}'::uuid[] NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- ordem integer DEFAULT 0 NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_faq OWNER TO supabase_admin;
-
---
--- Name: saas_faq_itens; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.saas_faq_itens (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- doc_id uuid NOT NULL,
- pergunta text NOT NULL,
- resposta text,
- ordem integer DEFAULT 0 NOT NULL,
- ativo boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.saas_faq_itens OWNER TO supabase_admin;
-
---
--- Name: TABLE saas_faq_itens; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.saas_faq_itens IS 'Pares pergunta/resposta vinculados a um documento de ajuda';
-
-
---
--- Name: services; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.services (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- owner_id uuid NOT NULL,
- tenant_id uuid NOT NULL,
- name text NOT NULL,
- description text,
- price numeric(10,2) NOT NULL,
- duration_min integer,
- active boolean DEFAULT true NOT NULL,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now()
-);
-
-
-ALTER TABLE public.services OWNER TO supabase_admin;
-
---
--- Name: subscription_events; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_events (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- subscription_id uuid NOT NULL,
- owner_id uuid NOT NULL,
- event_type text NOT NULL,
- old_plan_id uuid,
- new_plan_id uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- created_by uuid,
- source text DEFAULT 'admin_ui'::text,
- reason text,
- metadata jsonb,
- owner_type text NOT NULL,
- owner_ref uuid NOT NULL,
- CONSTRAINT subscription_events_owner_ref_consistency_chk CHECK ((owner_id = owner_ref)),
- CONSTRAINT subscription_events_owner_type_chk CHECK (((owner_type IS NULL) OR (owner_type = ANY (ARRAY['clinic'::text, 'therapist'::text]))))
-);
-
-
-ALTER TABLE public.subscription_events OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_personal; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_intents_personal (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid NOT NULL,
- created_by_user_id uuid,
- email text NOT NULL,
- plan_id uuid NOT NULL,
- plan_key text,
- "interval" text,
- amount_cents integer,
- currency text,
- status text DEFAULT 'new'::text NOT NULL,
- source text DEFAULT 'manual'::text NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- paid_at timestamp with time zone,
- subscription_id uuid,
- CONSTRAINT sint_personal_interval_check CHECK ((("interval" IS NULL) OR ("interval" = ANY (ARRAY['month'::text, 'year'::text])))),
- CONSTRAINT sint_personal_status_check CHECK ((status = ANY (ARRAY['new'::text, 'waiting_payment'::text, 'paid'::text, 'canceled'::text])))
-);
-
-
-ALTER TABLE public.subscription_intents_personal OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_tenant; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_intents_tenant (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid NOT NULL,
- created_by_user_id uuid,
- email text NOT NULL,
- plan_id uuid NOT NULL,
- plan_key text,
- "interval" text,
- amount_cents integer,
- currency text,
- status text DEFAULT 'new'::text NOT NULL,
- source text DEFAULT 'manual'::text NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- paid_at timestamp with time zone,
- tenant_id uuid NOT NULL,
- subscription_id uuid,
- CONSTRAINT sint_tenant_interval_check CHECK ((("interval" IS NULL) OR ("interval" = ANY (ARRAY['month'::text, 'year'::text])))),
- CONSTRAINT sint_tenant_status_check CHECK ((status = ANY (ARRAY['new'::text, 'waiting_payment'::text, 'paid'::text, 'canceled'::text])))
-);
-
-
-ALTER TABLE public.subscription_intents_tenant OWNER TO supabase_admin;
-
---
--- Name: subscription_intents; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.subscription_intents AS
- SELECT t.id,
- t.user_id,
- t.created_by_user_id,
- t.email,
- t.plan_id,
- t.plan_key,
- t."interval",
- t.amount_cents,
- t.currency,
- t.status,
- t.source,
- t.notes,
- t.created_at,
- t.paid_at,
- t.tenant_id,
- t.subscription_id,
- 'clinic'::text AS plan_target
- FROM public.subscription_intents_tenant t
-UNION ALL
- SELECT p.id,
- p.user_id,
- p.created_by_user_id,
- p.email,
- p.plan_id,
- p.plan_key,
- p."interval",
- p.amount_cents,
- p.currency,
- p.status,
- p.source,
- p.notes,
- p.created_at,
- p.paid_at,
- NULL::uuid AS tenant_id,
- p.subscription_id,
- 'therapist'::text AS plan_target
- FROM public.subscription_intents_personal p;
-
-
-ALTER VIEW public.subscription_intents OWNER TO supabase_admin;
-
---
--- Name: subscription_intents_legacy; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.subscription_intents_legacy (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- user_id uuid,
- email text,
- plan_key text NOT NULL,
- "interval" text NOT NULL,
- amount_cents integer NOT NULL,
- currency text DEFAULT 'BRL'::text NOT NULL,
- status text DEFAULT 'new'::text NOT NULL,
- source text DEFAULT 'landing'::text NOT NULL,
- notes text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- paid_at timestamp with time zone,
- tenant_id uuid NOT NULL,
- created_by_user_id uuid,
- CONSTRAINT subscription_intents_interval_check CHECK (("interval" = ANY (ARRAY['month'::text, 'year'::text]))),
- CONSTRAINT subscription_intents_status_check CHECK ((status = ANY (ARRAY['new'::text, 'waiting_payment'::text, 'paid'::text, 'canceled'::text])))
-);
-
-
-ALTER TABLE public.subscription_intents_legacy OWNER TO supabase_admin;
-
---
--- Name: support_sessions; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.support_sessions (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- admin_id uuid NOT NULL,
- token text DEFAULT encode(extensions.gen_random_bytes(32), 'hex'::text) NOT NULL,
- expires_at timestamp with time zone DEFAULT (now() + '01:00:00'::interval) NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.support_sessions OWNER TO supabase_admin;
-
---
--- Name: tenant_feature_exceptions_log; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_feature_exceptions_log (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- feature_key text NOT NULL,
- enabled boolean NOT NULL,
- reason text,
- created_by uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_feature_exceptions_log OWNER TO supabase_admin;
-
---
--- Name: tenant_features; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_features (
- tenant_id uuid NOT NULL,
- feature_key text NOT NULL,
- enabled boolean DEFAULT false NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE public.tenant_features OWNER TO supabase_admin;
-
---
--- Name: tenant_invites; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenant_invites (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- tenant_id uuid NOT NULL,
- email text NOT NULL,
- role text NOT NULL,
- token uuid DEFAULT gen_random_uuid() NOT NULL,
- invited_by uuid,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- expires_at timestamp with time zone DEFAULT (now() + '7 days'::interval) NOT NULL,
- accepted_at timestamp with time zone,
- accepted_by uuid,
- revoked_at timestamp with time zone,
- revoked_by uuid,
- CONSTRAINT tenant_invites_role_check CHECK ((role = ANY (ARRAY['therapist'::text, 'secretary'::text])))
-);
-
-
-ALTER TABLE public.tenant_invites OWNER TO supabase_admin;
-
---
--- Name: tenants; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.tenants (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- name text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- kind text DEFAULT 'saas'::text NOT NULL,
- CONSTRAINT tenants_kind_check CHECK ((kind = ANY (ARRAY['therapist'::text, 'clinic_coworking'::text, 'clinic_reception'::text, 'clinic_full'::text, 'clinic'::text, 'saas'::text, 'supervisor'::text])))
-);
-
-
-ALTER TABLE public.tenants OWNER TO supabase_admin;
-
---
--- Name: COLUMN tenants.kind; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.tenants.kind IS 'Tipo do tenant. Imutável após criação. therapist=terapeuta solo. clinic_coworking/clinic_reception/clinic_full=clínicas. clinic e saas são legados.';
-
-
---
--- Name: user_settings; Type: TABLE; Schema: public; Owner: supabase_admin
---
-
-CREATE TABLE public.user_settings (
- user_id uuid NOT NULL,
- theme_mode text DEFAULT 'dark'::text NOT NULL,
- preset text DEFAULT 'Aura'::text NOT NULL,
- primary_color text DEFAULT 'noir'::text NOT NULL,
- surface_color text DEFAULT 'slate'::text NOT NULL,
- menu_mode text DEFAULT 'static'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- layout_variant text DEFAULT 'classic'::text NOT NULL,
- CONSTRAINT user_settings_layout_variant_check CHECK ((layout_variant = ANY (ARRAY['classic'::text, 'rail'::text]))),
- CONSTRAINT user_settings_menu_mode_check CHECK ((menu_mode = ANY (ARRAY['static'::text, 'overlay'::text]))),
- CONSTRAINT user_settings_theme_mode_check CHECK ((theme_mode = ANY (ARRAY['light'::text, 'dark'::text])))
-);
-
-
-ALTER TABLE public.user_settings OWNER TO supabase_admin;
-
---
--- Name: TABLE user_settings; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON TABLE public.user_settings IS 'Preferências de aparência e layout por usuário';
-
-
---
--- Name: COLUMN user_settings.user_id; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.user_settings.user_id IS 'FK = auth.users.id — um registro por usuário';
-
-
---
--- Name: COLUMN user_settings.theme_mode; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.user_settings.theme_mode IS 'light | dark';
-
-
---
--- Name: COLUMN user_settings.preset; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.user_settings.preset IS 'Preset PrimeVue: Aura | Lara | Nora';
-
-
---
--- Name: COLUMN user_settings.primary_color; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.user_settings.primary_color IS 'Nome da cor primária (ex: blue, emerald, noir)';
-
-
---
--- Name: COLUMN user_settings.surface_color; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.user_settings.surface_color IS 'Nome da surface (ex: slate, zinc, neutral)';
-
-
---
--- Name: COLUMN user_settings.menu_mode; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.user_settings.menu_mode IS 'static | overlay';
-
-
---
--- Name: COLUMN user_settings.layout_variant; Type: COMMENT; Schema: public; Owner: supabase_admin
---
-
-COMMENT ON COLUMN public.user_settings.layout_variant IS 'classic (sidebar) | rail (mini rail + painel)';
-
-
---
--- Name: v_auth_users_public; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_auth_users_public AS
- SELECT id AS user_id,
- email,
- created_at,
- last_sign_in_at
- FROM auth.users u;
-
-
-ALTER VIEW public.v_auth_users_public OWNER TO supabase_admin;
-
---
--- Name: v_commitment_totals; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_commitment_totals AS
- SELECT c.tenant_id,
- c.id AS commitment_id,
- (COALESCE(sum(l.minutes), (0)::bigint))::integer AS total_minutes
- FROM (public.determined_commitments c
- LEFT JOIN public.commitment_time_logs l ON ((l.commitment_id = c.id)))
- GROUP BY c.tenant_id, c.id;
-
-
-ALTER VIEW public.v_commitment_totals OWNER TO supabase_admin;
-
---
--- Name: v_patient_groups_with_counts; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_patient_groups_with_counts AS
- SELECT pg.id,
- pg.nome,
- pg.cor,
- pg.owner_id,
- pg.is_system,
- pg.is_active,
- pg.created_at,
- pg.updated_at,
- (COALESCE(count(pgp.patient_id), (0)::bigint))::integer AS patients_count
- FROM (public.patient_groups pg
- LEFT JOIN public.patient_group_patient pgp ON ((pgp.patient_group_id = pg.id)))
- GROUP BY pg.id, pg.nome, pg.cor, pg.owner_id, pg.is_system, pg.is_active, pg.created_at, pg.updated_at;
-
-
-ALTER VIEW public.v_patient_groups_with_counts OWNER TO supabase_admin;
-
---
--- Name: v_plan_active_prices; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_plan_active_prices AS
- SELECT plan_id,
- max(
- CASE
- WHEN (("interval" = 'month'::text) AND is_active) THEN amount_cents
- ELSE NULL::integer
- END) AS monthly_cents,
- max(
- CASE
- WHEN (("interval" = 'year'::text) AND is_active) THEN amount_cents
- ELSE NULL::integer
- END) AS yearly_cents,
- max(
- CASE
- WHEN (("interval" = 'month'::text) AND is_active) THEN currency
- ELSE NULL::text
- END) AS monthly_currency,
- max(
- CASE
- WHEN (("interval" = 'year'::text) AND is_active) THEN currency
- ELSE NULL::text
- END) AS yearly_currency
- FROM public.plan_prices
- GROUP BY plan_id;
-
-
-ALTER VIEW public.v_plan_active_prices OWNER TO supabase_admin;
-
---
--- Name: v_public_pricing; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_public_pricing AS
- SELECT p.id AS plan_id,
- p.key AS plan_key,
- p.name AS plan_name,
- COALESCE(pp.public_name, ''::text) AS public_name,
- COALESCE(pp.public_description, ''::text) AS public_description,
- pp.badge,
- COALESCE(pp.is_featured, false) AS is_featured,
- COALESCE(pp.is_visible, true) AS is_visible,
- COALESCE(pp.sort_order, 0) AS sort_order,
- ap.monthly_cents,
- ap.yearly_cents,
- ap.monthly_currency,
- ap.yearly_currency,
- COALESCE(( SELECT jsonb_agg(jsonb_build_object('id', b.id, 'text', b.text, 'highlight', b.highlight, 'sort_order', b.sort_order) ORDER BY b.sort_order, b.created_at) AS jsonb_agg
- FROM public.plan_public_bullets b
- WHERE (b.plan_id = p.id)), '[]'::jsonb) AS bullets,
- p.target AS plan_target
- FROM ((public.plans p
- LEFT JOIN public.plan_public pp ON ((pp.plan_id = p.id)))
- LEFT JOIN public.v_plan_active_prices ap ON ((ap.plan_id = p.id)))
- ORDER BY COALESCE(pp.sort_order, 0), p.key;
-
-
-ALTER VIEW public.v_public_pricing OWNER TO supabase_admin;
-
---
--- Name: v_subscription_feature_mismatch; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_subscription_feature_mismatch AS
- WITH expected AS (
- SELECT s.user_id AS owner_id,
- f.key AS feature_key
- FROM ((public.subscriptions s
- JOIN public.plan_features pf ON (((pf.plan_id = s.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)))
- WHERE ((s.status = 'active'::text) AND (s.tenant_id IS NULL) AND (s.user_id IS NOT NULL))
- ), actual AS (
- SELECT e.owner_id,
- e.feature_key
- FROM public.owner_feature_entitlements e
- )
- SELECT COALESCE(expected.owner_id, actual.owner_id) AS owner_id,
- COALESCE(expected.feature_key, actual.feature_key) AS feature_key,
- CASE
- WHEN ((expected.feature_key IS NOT NULL) AND (actual.feature_key IS NULL)) THEN 'missing_entitlement'::text
- WHEN ((expected.feature_key IS NULL) AND (actual.feature_key IS NOT NULL)) THEN 'unexpected_entitlement'::text
- ELSE NULL::text
- END AS mismatch_type
- FROM (expected
- FULL JOIN actual ON (((expected.owner_id = actual.owner_id) AND (expected.feature_key = actual.feature_key))))
- WHERE ((expected.feature_key IS NULL) OR (actual.feature_key IS NULL));
-
-
-ALTER VIEW public.v_subscription_feature_mismatch OWNER TO supabase_admin;
-
---
--- Name: v_subscription_health; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_subscription_health AS
- SELECT s.id AS subscription_id,
- s.user_id AS owner_id,
- s.status,
- s.plan_id,
- p.key AS plan_key,
- s.current_period_start,
- s.current_period_end,
- s.updated_at,
- CASE
- WHEN (s.plan_id IS NULL) THEN 'missing_plan'::text
- WHEN (p.id IS NULL) THEN 'invalid_plan'::text
- WHEN ((s.status = 'active'::text) AND (s.current_period_end IS NOT NULL) AND (s.current_period_end < now())) THEN 'expired_but_active'::text
- WHEN ((s.status = 'canceled'::text) AND (s.current_period_end > now())) THEN 'canceled_but_still_in_period'::text
- ELSE 'ok'::text
- END AS health_status,
- CASE
- WHEN (s.tenant_id IS NOT NULL) THEN 'clinic'::text
- ELSE 'therapist'::text
- END AS owner_type,
- COALESCE(s.tenant_id, s.user_id) AS owner_ref
- FROM (public.subscriptions s
- LEFT JOIN public.plans p ON ((p.id = s.plan_id)));
-
-
-ALTER VIEW public.v_subscription_health OWNER TO supabase_admin;
-
---
--- Name: v_subscription_health_v2; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_subscription_health_v2 AS
- SELECT s.id AS subscription_id,
- s.user_id AS owner_id,
- CASE
- WHEN (s.tenant_id IS NOT NULL) THEN 'clinic'::text
- ELSE 'therapist'::text
- END AS owner_type,
- COALESCE(s.tenant_id, s.user_id) AS owner_ref,
- s.status,
- s.plan_id,
- p.key AS plan_key,
- s.current_period_start,
- s.current_period_end,
- s.updated_at,
- CASE
- WHEN (s.plan_id IS NULL) THEN 'missing_plan'::text
- WHEN (p.id IS NULL) THEN 'invalid_plan'::text
- WHEN ((s.status = 'active'::text) AND (s.current_period_end IS NOT NULL) AND (s.current_period_end < now())) THEN 'expired_but_active'::text
- WHEN ((s.status = 'canceled'::text) AND (s.current_period_end > now())) THEN 'canceled_but_still_in_period'::text
- ELSE 'ok'::text
- END AS health_status
- FROM (public.subscriptions s
- LEFT JOIN public.plans p ON ((p.id = s.plan_id)));
-
-
-ALTER VIEW public.v_subscription_health_v2 OWNER TO supabase_admin;
-
---
--- Name: v_tag_patient_counts; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tag_patient_counts AS
- SELECT t.id,
- t.owner_id,
- t.nome,
- t.cor,
- t.is_padrao,
- t.created_at,
- t.updated_at,
- (COALESCE(count(ppt.patient_id), (0)::bigint))::integer AS pacientes_count,
- (COALESCE(count(ppt.patient_id), (0)::bigint))::integer AS patient_count
- FROM (public.patient_tags t
- LEFT JOIN public.patient_patient_tag ppt ON (((ppt.tag_id = t.id) AND (ppt.owner_id = t.owner_id))))
- GROUP BY t.id, t.owner_id, t.nome, t.cor, t.is_padrao, t.created_at, t.updated_at;
-
-
-ALTER VIEW public.v_tag_patient_counts OWNER TO supabase_admin;
-
---
--- Name: v_tenant_active_subscription; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_active_subscription AS
- SELECT DISTINCT ON (tenant_id) tenant_id,
- plan_id,
- plan_key,
- "interval",
- status,
- current_period_start,
- current_period_end,
- created_at
- FROM public.subscriptions s
- WHERE ((tenant_id IS NOT NULL) AND (status = 'active'::text) AND ((current_period_end IS NULL) OR (current_period_end > now())))
- ORDER BY tenant_id, created_at DESC;
-
-
-ALTER VIEW public.v_tenant_active_subscription OWNER TO supabase_admin;
-
---
--- Name: v_tenant_entitlements; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_entitlements AS
- SELECT a.tenant_id,
- f.key AS feature_key,
- true AS allowed
- FROM ((public.v_tenant_active_subscription a
- JOIN public.plan_features pf ON (((pf.plan_id = a.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)));
-
-
-ALTER VIEW public.v_tenant_entitlements OWNER TO supabase_admin;
-
---
--- Name: v_tenant_entitlements_full; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_entitlements_full AS
- SELECT a.tenant_id,
- f.key AS feature_key,
- (pf.enabled = true) AS allowed,
- pf.limits,
- a.plan_id,
- p.key AS plan_key
- FROM (((public.v_tenant_active_subscription a
- JOIN public.plan_features pf ON ((pf.plan_id = a.plan_id)))
- JOIN public.features f ON ((f.id = pf.feature_id)))
- JOIN public.plans p ON ((p.id = a.plan_id)));
-
-
-ALTER VIEW public.v_tenant_entitlements_full OWNER TO supabase_admin;
-
---
--- Name: v_tenant_entitlements_json; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_entitlements_json AS
- SELECT tenant_id,
- max(plan_key) AS plan_key,
- jsonb_object_agg(feature_key, jsonb_build_object('allowed', allowed, 'limits', COALESCE(limits, '{}'::jsonb)) ORDER BY feature_key) AS entitlements
- FROM public.v_tenant_entitlements_full
- GROUP BY tenant_id;
-
-
-ALTER VIEW public.v_tenant_entitlements_json OWNER TO supabase_admin;
-
---
--- Name: v_tenant_feature_exceptions; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_feature_exceptions AS
- SELECT tf.tenant_id,
- a.plan_key,
- tf.feature_key,
- 'commercial_exception'::text AS exception_type
- FROM ((public.tenant_features tf
- JOIN public.v_tenant_active_subscription a ON ((a.tenant_id = tf.tenant_id)))
- LEFT JOIN public.v_tenant_entitlements_full v ON (((v.tenant_id = tf.tenant_id) AND (v.feature_key = tf.feature_key))))
- WHERE ((tf.enabled = true) AND (COALESCE(v.allowed, false) = false));
-
-
-ALTER VIEW public.v_tenant_feature_exceptions OWNER TO supabase_admin;
-
---
--- Name: v_tenant_feature_mismatch; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_feature_mismatch AS
- WITH plan_allowed AS (
- SELECT v.tenant_id,
- v.feature_key,
- v.allowed
- FROM public.v_tenant_entitlements_full v
- ), overrides AS (
- SELECT tf.tenant_id,
- tf.feature_key,
- tf.enabled
- FROM public.tenant_features tf
- )
- SELECT o.tenant_id,
- o.feature_key,
- CASE
- WHEN ((o.enabled = true) AND (COALESCE(p.allowed, false) = false)) THEN 'unexpected_override'::text
- ELSE NULL::text
- END AS mismatch_type
- FROM (overrides o
- LEFT JOIN plan_allowed p ON (((p.tenant_id = o.tenant_id) AND (p.feature_key = o.feature_key))))
- WHERE ((o.enabled = true) AND (COALESCE(p.allowed, false) = false));
-
-
-ALTER VIEW public.v_tenant_feature_mismatch OWNER TO supabase_admin;
-
---
--- Name: v_tenant_members_with_profiles; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_members_with_profiles AS
- SELECT tm.id AS tenant_member_id,
- tm.tenant_id,
- tm.user_id,
- tm.role,
- tm.status,
- tm.created_at,
- p.full_name,
- au.email
- FROM ((public.tenant_members tm
- LEFT JOIN public.profiles p ON ((p.id = tm.user_id)))
- LEFT JOIN auth.users au ON ((au.id = tm.user_id)));
-
-
-ALTER VIEW public.v_tenant_members_with_profiles OWNER TO supabase_admin;
-
---
--- Name: v_tenant_people; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_people AS
- SELECT 'member'::text AS type,
- m.tenant_id,
- m.user_id,
- u.email,
- m.role,
- m.status,
- NULL::uuid AS invite_token,
- NULL::timestamp with time zone AS expires_at
- FROM (public.tenant_members m
- JOIN auth.users u ON ((u.id = m.user_id)))
-UNION ALL
- SELECT 'invite'::text AS type,
- i.tenant_id,
- NULL::uuid AS user_id,
- i.email,
- i.role,
- 'invited'::text AS status,
- i.token AS invite_token,
- i.expires_at
- FROM public.tenant_invites i
- WHERE ((i.accepted_at IS NULL) AND (i.revoked_at IS NULL));
-
-
-ALTER VIEW public.v_tenant_people OWNER TO supabase_admin;
-
---
--- Name: v_tenant_staff; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_tenant_staff AS
- SELECT ('m_'::text || (tm.id)::text) AS row_id,
- tm.tenant_id,
- tm.user_id,
- tm.role,
- tm.status,
- tm.created_at,
- p.full_name,
- au.email,
- NULL::uuid AS invite_token
- FROM ((public.tenant_members tm
- LEFT JOIN public.profiles p ON ((p.id = tm.user_id)))
- LEFT JOIN auth.users au ON ((au.id = tm.user_id)))
-UNION ALL
- SELECT ('i_'::text || (ti.id)::text) AS row_id,
- ti.tenant_id,
- NULL::uuid AS user_id,
- ti.role,
- 'invited'::text AS status,
- ti.created_at,
- NULL::text AS full_name,
- ti.email,
- ti.token AS invite_token
- FROM public.tenant_invites ti
- WHERE ((ti.accepted_at IS NULL) AND (ti.revoked_at IS NULL) AND (ti.expires_at > now()));
-
-
-ALTER VIEW public.v_tenant_staff OWNER TO supabase_admin;
-
---
--- Name: v_user_active_subscription; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_user_active_subscription AS
- SELECT DISTINCT ON (user_id) user_id,
- plan_id,
- plan_key,
- "interval",
- status,
- current_period_start,
- current_period_end,
- created_at
- FROM public.subscriptions s
- WHERE ((tenant_id IS NULL) AND (user_id IS NOT NULL) AND (status = 'active'::text) AND ((current_period_end IS NULL) OR (current_period_end > now())))
- ORDER BY user_id, created_at DESC;
-
-
-ALTER VIEW public.v_user_active_subscription OWNER TO supabase_admin;
-
---
--- Name: v_user_entitlements; Type: VIEW; Schema: public; Owner: supabase_admin
---
-
-CREATE VIEW public.v_user_entitlements AS
- SELECT a.user_id,
- f.key AS feature_key,
- true AS allowed
- FROM ((public.v_user_active_subscription a
- JOIN public.plan_features pf ON (((pf.plan_id = a.plan_id) AND (pf.enabled = true))))
- JOIN public.features f ON ((f.id = pf.feature_id)));
-
-
-ALTER VIEW public.v_user_entitlements OWNER TO supabase_admin;
-
---
--- Name: messages; Type: TABLE; Schema: realtime; Owner: supabase_realtime_admin
---
-
-CREATE TABLE realtime.messages (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-)
-PARTITION BY RANGE (inserted_at);
-
-
-ALTER TABLE realtime.messages OWNER TO supabase_realtime_admin;
-
---
--- Name: messages_2026_03_12; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_12 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_12 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_13; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_13 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_13 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_14; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_14 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_14 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_15; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_15 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_15 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_16; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_16 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_16 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_17; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_17 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_17 OWNER TO supabase_admin;
-
---
--- Name: messages_2026_03_18; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.messages_2026_03_18 (
- topic text NOT NULL,
- extension text NOT NULL,
- payload jsonb,
- event text,
- private boolean DEFAULT false,
- updated_at timestamp without time zone DEFAULT now() NOT NULL,
- inserted_at timestamp without time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL
-);
-
-
-ALTER TABLE realtime.messages_2026_03_18 OWNER TO supabase_admin;
-
---
--- Name: schema_migrations; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.schema_migrations (
- version bigint NOT NULL,
- inserted_at timestamp(0) without time zone
-);
-
-
-ALTER TABLE realtime.schema_migrations OWNER TO supabase_admin;
-
---
--- Name: subscription; Type: TABLE; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TABLE realtime.subscription (
- id bigint NOT NULL,
- subscription_id uuid NOT NULL,
- entity regclass NOT NULL,
- filters realtime.user_defined_filter[] DEFAULT '{}'::realtime.user_defined_filter[] NOT NULL,
- claims jsonb NOT NULL,
- claims_role regrole GENERATED ALWAYS AS (realtime.to_regrole((claims ->> 'role'::text))) STORED NOT NULL,
- created_at timestamp without time zone DEFAULT timezone('utc'::text, now()) NOT NULL
-);
-
-
-ALTER TABLE realtime.subscription OWNER TO supabase_admin;
-
---
--- Name: subscription_id_seq; Type: SEQUENCE; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE realtime.subscription ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY (
- SEQUENCE NAME realtime.subscription_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: buckets; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.buckets (
- id text NOT NULL,
- name text NOT NULL,
- owner uuid,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now(),
- public boolean DEFAULT false,
- avif_autodetection boolean DEFAULT false,
- file_size_limit bigint,
- allowed_mime_types text[],
- owner_id text,
- type storage.buckettype DEFAULT 'STANDARD'::storage.buckettype NOT NULL
-);
-
-
-ALTER TABLE storage.buckets OWNER TO supabase_storage_admin;
-
---
--- Name: COLUMN buckets.owner; Type: COMMENT; Schema: storage; Owner: supabase_storage_admin
---
-
-COMMENT ON COLUMN storage.buckets.owner IS 'Field is deprecated, use owner_id instead';
-
-
---
--- Name: buckets_analytics; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.buckets_analytics (
- name text NOT NULL,
- type storage.buckettype DEFAULT 'ANALYTICS'::storage.buckettype NOT NULL,
- format text DEFAULT 'ICEBERG'::text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- deleted_at timestamp with time zone
-);
-
-
-ALTER TABLE storage.buckets_analytics OWNER TO supabase_storage_admin;
-
---
--- Name: buckets_vectors; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.buckets_vectors (
- id text NOT NULL,
- type storage.buckettype DEFAULT 'VECTOR'::storage.buckettype NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE storage.buckets_vectors OWNER TO supabase_storage_admin;
-
---
--- Name: iceberg_namespaces; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.iceberg_namespaces (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- bucket_name text NOT NULL,
- name text NOT NULL COLLATE pg_catalog."C",
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- metadata jsonb DEFAULT '{}'::jsonb NOT NULL,
- catalog_id uuid NOT NULL
-);
-
-
-ALTER TABLE storage.iceberg_namespaces OWNER TO supabase_storage_admin;
-
---
--- Name: iceberg_tables; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.iceberg_tables (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- namespace_id uuid NOT NULL,
- bucket_name text NOT NULL,
- name text NOT NULL COLLATE pg_catalog."C",
- location text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL,
- remote_table_id text,
- shard_key text,
- shard_id text,
- catalog_id uuid NOT NULL
-);
-
-
-ALTER TABLE storage.iceberg_tables OWNER TO supabase_storage_admin;
-
---
--- Name: migrations; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.migrations (
- id integer NOT NULL,
- name character varying(100) NOT NULL,
- hash character varying(40) NOT NULL,
- executed_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP
-);
-
-
-ALTER TABLE storage.migrations OWNER TO supabase_storage_admin;
-
---
--- Name: objects; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.objects (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- bucket_id text,
- name text,
- owner uuid,
- created_at timestamp with time zone DEFAULT now(),
- updated_at timestamp with time zone DEFAULT now(),
- last_accessed_at timestamp with time zone DEFAULT now(),
- metadata jsonb,
- path_tokens text[] GENERATED ALWAYS AS (string_to_array(name, '/'::text)) STORED,
- version text,
- owner_id text,
- user_metadata jsonb
-);
-
-
-ALTER TABLE storage.objects OWNER TO supabase_storage_admin;
-
---
--- Name: COLUMN objects.owner; Type: COMMENT; Schema: storage; Owner: supabase_storage_admin
---
-
-COMMENT ON COLUMN storage.objects.owner IS 'Field is deprecated, use owner_id instead';
-
-
---
--- Name: s3_multipart_uploads; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.s3_multipart_uploads (
- id text NOT NULL,
- in_progress_size bigint DEFAULT 0 NOT NULL,
- upload_signature text NOT NULL,
- bucket_id text NOT NULL,
- key text NOT NULL COLLATE pg_catalog."C",
- version text NOT NULL,
- owner_id text,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- user_metadata jsonb
-);
-
-
-ALTER TABLE storage.s3_multipart_uploads OWNER TO supabase_storage_admin;
-
---
--- Name: s3_multipart_uploads_parts; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.s3_multipart_uploads_parts (
- id uuid DEFAULT gen_random_uuid() NOT NULL,
- upload_id text NOT NULL,
- size bigint DEFAULT 0 NOT NULL,
- part_number integer NOT NULL,
- bucket_id text NOT NULL,
- key text NOT NULL COLLATE pg_catalog."C",
- etag text NOT NULL,
- owner_id text,
- version text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE storage.s3_multipart_uploads_parts OWNER TO supabase_storage_admin;
-
---
--- Name: vector_indexes; Type: TABLE; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TABLE storage.vector_indexes (
- id text DEFAULT gen_random_uuid() NOT NULL,
- name text NOT NULL COLLATE pg_catalog."C",
- bucket_id text NOT NULL,
- data_type text NOT NULL,
- dimension integer NOT NULL,
- distance_metric text NOT NULL,
- metadata_configuration jsonb,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- updated_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE storage.vector_indexes OWNER TO supabase_storage_admin;
-
---
--- Name: hooks; Type: TABLE; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE TABLE supabase_functions.hooks (
- id bigint NOT NULL,
- hook_table_id integer NOT NULL,
- hook_name text NOT NULL,
- created_at timestamp with time zone DEFAULT now() NOT NULL,
- request_id bigint
-);
-
-
-ALTER TABLE supabase_functions.hooks OWNER TO supabase_functions_admin;
-
---
--- Name: TABLE hooks; Type: COMMENT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-COMMENT ON TABLE supabase_functions.hooks IS 'Supabase Functions Hooks: Audit trail for triggered hooks.';
-
-
---
--- Name: hooks_id_seq; Type: SEQUENCE; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE SEQUENCE supabase_functions.hooks_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER SEQUENCE supabase_functions.hooks_id_seq OWNER TO supabase_functions_admin;
-
---
--- Name: hooks_id_seq; Type: SEQUENCE OWNED BY; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER SEQUENCE supabase_functions.hooks_id_seq OWNED BY supabase_functions.hooks.id;
-
-
---
--- Name: migrations; Type: TABLE; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE TABLE supabase_functions.migrations (
- version text NOT NULL,
- inserted_at timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE supabase_functions.migrations OWNER TO supabase_functions_admin;
-
---
--- Name: messages_2026_03_12; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_12 FOR VALUES FROM ('2026-03-12 00:00:00') TO ('2026-03-13 00:00:00');
-
-
---
--- Name: messages_2026_03_13; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_13 FOR VALUES FROM ('2026-03-13 00:00:00') TO ('2026-03-14 00:00:00');
-
-
---
--- Name: messages_2026_03_14; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_14 FOR VALUES FROM ('2026-03-14 00:00:00') TO ('2026-03-15 00:00:00');
-
-
---
--- Name: messages_2026_03_15; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_15 FOR VALUES FROM ('2026-03-15 00:00:00') TO ('2026-03-16 00:00:00');
-
-
---
--- Name: messages_2026_03_16; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_16 FOR VALUES FROM ('2026-03-16 00:00:00') TO ('2026-03-17 00:00:00');
-
-
---
--- Name: messages_2026_03_17; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_17 FOR VALUES FROM ('2026-03-17 00:00:00') TO ('2026-03-18 00:00:00');
-
-
---
--- Name: messages_2026_03_18; Type: TABLE ATTACH; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages ATTACH PARTITION realtime.messages_2026_03_18 FOR VALUES FROM ('2026-03-18 00:00:00') TO ('2026-03-19 00:00:00');
-
-
---
--- Name: refresh_tokens id; Type: DEFAULT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens ALTER COLUMN id SET DEFAULT nextval('auth.refresh_tokens_id_seq'::regclass);
-
-
---
--- Name: agenda_online_slots id; Type: DEFAULT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots ALTER COLUMN id SET DEFAULT nextval('public.agenda_online_slots_id_seq'::regclass);
-
-
---
--- Name: hooks id; Type: DEFAULT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER TABLE ONLY supabase_functions.hooks ALTER COLUMN id SET DEFAULT nextval('supabase_functions.hooks_id_seq'::regclass);
-
-
---
--- Name: extensions extensions_pkey; Type: CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.extensions
- ADD CONSTRAINT extensions_pkey PRIMARY KEY (id);
-
-
---
--- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.schema_migrations
- ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: tenants tenants_pkey; Type: CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.tenants
- ADD CONSTRAINT tenants_pkey PRIMARY KEY (id);
-
-
---
--- Name: mfa_amr_claims amr_id_pk; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_amr_claims
- ADD CONSTRAINT amr_id_pk PRIMARY KEY (id);
-
-
---
--- Name: audit_log_entries audit_log_entries_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.audit_log_entries
- ADD CONSTRAINT audit_log_entries_pkey PRIMARY KEY (id);
-
-
---
--- Name: flow_state flow_state_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.flow_state
- ADD CONSTRAINT flow_state_pkey PRIMARY KEY (id);
-
-
---
--- Name: identities identities_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.identities
- ADD CONSTRAINT identities_pkey PRIMARY KEY (id);
-
-
---
--- Name: identities identities_provider_id_provider_unique; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.identities
- ADD CONSTRAINT identities_provider_id_provider_unique UNIQUE (provider_id, provider);
-
-
---
--- Name: instances instances_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.instances
- ADD CONSTRAINT instances_pkey PRIMARY KEY (id);
-
-
---
--- Name: mfa_amr_claims mfa_amr_claims_session_id_authentication_method_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_amr_claims
- ADD CONSTRAINT mfa_amr_claims_session_id_authentication_method_pkey UNIQUE (session_id, authentication_method);
-
-
---
--- Name: mfa_challenges mfa_challenges_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_challenges
- ADD CONSTRAINT mfa_challenges_pkey PRIMARY KEY (id);
-
-
---
--- Name: mfa_factors mfa_factors_last_challenged_at_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_factors
- ADD CONSTRAINT mfa_factors_last_challenged_at_key UNIQUE (last_challenged_at);
-
-
---
--- Name: mfa_factors mfa_factors_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_factors
- ADD CONSTRAINT mfa_factors_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_authorizations oauth_authorizations_authorization_code_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_authorization_code_key UNIQUE (authorization_code);
-
-
---
--- Name: oauth_authorizations oauth_authorizations_authorization_id_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_authorization_id_key UNIQUE (authorization_id);
-
-
---
--- Name: oauth_authorizations oauth_authorizations_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_client_states oauth_client_states_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_client_states
- ADD CONSTRAINT oauth_client_states_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_clients oauth_clients_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_clients
- ADD CONSTRAINT oauth_clients_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_consents oauth_consents_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_pkey PRIMARY KEY (id);
-
-
---
--- Name: oauth_consents oauth_consents_user_client_unique; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_user_client_unique UNIQUE (user_id, client_id);
-
-
---
--- Name: one_time_tokens one_time_tokens_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.one_time_tokens
- ADD CONSTRAINT one_time_tokens_pkey PRIMARY KEY (id);
-
-
---
--- Name: refresh_tokens refresh_tokens_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens
- ADD CONSTRAINT refresh_tokens_pkey PRIMARY KEY (id);
-
-
---
--- Name: refresh_tokens refresh_tokens_token_unique; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens
- ADD CONSTRAINT refresh_tokens_token_unique UNIQUE (token);
-
-
---
--- Name: saml_providers saml_providers_entity_id_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_providers
- ADD CONSTRAINT saml_providers_entity_id_key UNIQUE (entity_id);
-
-
---
--- Name: saml_providers saml_providers_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_providers
- ADD CONSTRAINT saml_providers_pkey PRIMARY KEY (id);
-
-
---
--- Name: saml_relay_states saml_relay_states_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_relay_states
- ADD CONSTRAINT saml_relay_states_pkey PRIMARY KEY (id);
-
-
---
--- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.schema_migrations
- ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: sessions sessions_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sessions
- ADD CONSTRAINT sessions_pkey PRIMARY KEY (id);
-
-
---
--- Name: sso_domains sso_domains_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sso_domains
- ADD CONSTRAINT sso_domains_pkey PRIMARY KEY (id);
-
-
---
--- Name: sso_providers sso_providers_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sso_providers
- ADD CONSTRAINT sso_providers_pkey PRIMARY KEY (id);
-
-
---
--- Name: users users_phone_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.users
- ADD CONSTRAINT users_phone_key UNIQUE (phone);
-
-
---
--- Name: users users_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.users
- ADD CONSTRAINT users_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_bloqueios
- ADD CONSTRAINT agenda_bloqueios_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_configuracoes
- ADD CONSTRAINT agenda_configuracoes_pkey PRIMARY KEY (owner_id);
-
-
---
--- Name: agenda_eventos agenda_eventos_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_eventos agenda_eventos_sem_sobreposicao; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_sem_sobreposicao EXCLUDE USING gist (owner_id WITH =, tstzrange(inicio_em, fim_em, '[)'::text) WITH &&);
-
-
---
--- Name: agenda_excecoes agenda_excecoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_excecoes
- ADD CONSTRAINT agenda_excecoes_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_online_slots agenda_online_slots_owner_id_weekday_time_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_owner_id_weekday_time_key UNIQUE (owner_id, weekday, "time");
-
-
---
--- Name: agenda_online_slots agenda_online_slots_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_regras_semanais
- ADD CONSTRAINT agenda_regras_semanais_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_unique; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_regras_semanais
- ADD CONSTRAINT agenda_regras_semanais_unique UNIQUE (owner_id, dia_semana, hora_inicio, hora_fim, modalidade);
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_seman_owner_id_dia_semana_hora_inic_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_bloqueados_semanais
- ADD CONSTRAINT agenda_slots_bloqueados_seman_owner_id_dia_semana_hora_inic_key UNIQUE (owner_id, dia_semana, hora_inicio);
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_bloqueados_semanais
- ADD CONSTRAINT agenda_slots_bloqueados_semanais_pkey PRIMARY KEY (id);
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_owner_id_dia_semana_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_regras
- ADD CONSTRAINT agenda_slots_regras_owner_id_dia_semana_key UNIQUE (owner_id, dia_semana);
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_regras
- ADD CONSTRAINT agenda_slots_regras_pkey PRIMARY KEY (id);
-
-
---
--- Name: agendador_configuracoes agendador_configuracoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_configuracoes
- ADD CONSTRAINT agendador_configuracoes_pkey PRIMARY KEY (owner_id);
-
-
---
--- Name: agendador_solicitacoes agendador_solicitacoes_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_solicitacoes
- ADD CONSTRAINT agendador_solicitacoes_pkey PRIMARY KEY (id);
-
-
---
--- Name: billing_contracts billing_contracts_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.billing_contracts
- ADD CONSTRAINT billing_contracts_pkey PRIMARY KEY (id);
-
-
---
--- Name: commitment_services commitment_services_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_services
- ADD CONSTRAINT commitment_services_pkey PRIMARY KEY (id);
-
-
---
--- Name: commitment_time_logs commitment_time_logs_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_pkey PRIMARY KEY (id);
-
-
---
--- Name: determined_commitment_fields determined_commitment_fields_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitment_fields
- ADD CONSTRAINT determined_commitment_fields_pkey PRIMARY KEY (id);
-
-
---
--- Name: determined_commitments determined_commitments_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitments
- ADD CONSTRAINT determined_commitments_pkey PRIMARY KEY (id);
-
-
---
--- Name: determined_commitments determined_commitments_tenant_native_key_uq; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitments
- ADD CONSTRAINT determined_commitments_tenant_native_key_uq UNIQUE (tenant_id, native_key);
-
-
---
--- Name: dev_user_credentials dev_user_credentials_email_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.dev_user_credentials
- ADD CONSTRAINT dev_user_credentials_email_key UNIQUE (email);
-
-
---
--- Name: dev_user_credentials dev_user_credentials_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.dev_user_credentials
- ADD CONSTRAINT dev_user_credentials_pkey PRIMARY KEY (id);
-
-
---
--- Name: entitlements_invalidation entitlements_invalidation_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.entitlements_invalidation
- ADD CONSTRAINT entitlements_invalidation_pkey PRIMARY KEY (owner_id);
-
-
---
--- Name: features features_key_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.features
- ADD CONSTRAINT features_key_key UNIQUE (key);
-
-
---
--- Name: features features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.features
- ADD CONSTRAINT features_pkey PRIMARY KEY (id);
-
-
---
--- Name: feriados feriados_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_pkey PRIMARY KEY (id);
-
-
---
--- Name: feriados feriados_tenant_id_data_nome_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_tenant_id_data_nome_key UNIQUE (tenant_id, data, nome);
-
-
---
--- Name: financial_exceptions financial_exceptions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.financial_exceptions
- ADD CONSTRAINT financial_exceptions_pkey PRIMARY KEY (id);
-
-
---
--- Name: insurance_plan_services insurance_plan_services_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.insurance_plan_services
- ADD CONSTRAINT insurance_plan_services_pkey PRIMARY KEY (id);
-
-
---
--- Name: insurance_plans insurance_plans_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.insurance_plans
- ADD CONSTRAINT insurance_plans_pkey PRIMARY KEY (id);
-
-
---
--- Name: module_features module_features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.module_features
- ADD CONSTRAINT module_features_pkey PRIMARY KEY (module_id, feature_id);
-
-
---
--- Name: modules modules_key_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.modules
- ADD CONSTRAINT modules_key_key UNIQUE (key);
-
-
---
--- Name: modules modules_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.modules
- ADD CONSTRAINT modules_pkey PRIMARY KEY (id);
-
-
---
--- Name: owner_users owner_users_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.owner_users
- ADD CONSTRAINT owner_users_pkey PRIMARY KEY (owner_id, user_id);
-
-
---
--- Name: patient_discounts patient_discounts_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_discounts
- ADD CONSTRAINT patient_discounts_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_group_patient patient_group_patient_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_group_patient
- ADD CONSTRAINT patient_group_patient_pkey PRIMARY KEY (patient_group_id, patient_id);
-
-
---
--- Name: patient_groups patient_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_groups
- ADD CONSTRAINT patient_groups_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_intake_requests patient_intake_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_intake_requests
- ADD CONSTRAINT patient_intake_requests_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_invites patient_invites_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_invites
- ADD CONSTRAINT patient_invites_pkey PRIMARY KEY (id);
-
-
---
--- Name: patient_invites patient_invites_token_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_invites
- ADD CONSTRAINT patient_invites_token_key UNIQUE (token);
-
-
---
--- Name: patient_patient_tag patient_patient_tag_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT patient_patient_tag_pkey PRIMARY KEY (patient_id, tag_id);
-
-
---
--- Name: patient_tags patient_tags_owner_name_uniq; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_tags
- ADD CONSTRAINT patient_tags_owner_name_uniq UNIQUE (owner_id, nome);
-
-
---
--- Name: patient_tags patient_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_tags
- ADD CONSTRAINT patient_tags_pkey PRIMARY KEY (id);
-
-
---
--- Name: patients patients_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_pkey PRIMARY KEY (id);
-
-
---
--- Name: payment_settings payment_settings_owner_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_owner_id_key UNIQUE (owner_id);
-
-
---
--- Name: payment_settings payment_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_pkey PRIMARY KEY (id);
-
-
---
--- Name: plan_features plan_features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_features
- ADD CONSTRAINT plan_features_pkey PRIMARY KEY (plan_id, feature_id);
-
-
---
--- Name: plan_prices plan_prices_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_prices
- ADD CONSTRAINT plan_prices_pkey PRIMARY KEY (id);
-
-
---
--- Name: plan_public_bullets plan_public_bullets_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public_bullets
- ADD CONSTRAINT plan_public_bullets_pkey PRIMARY KEY (id);
-
-
---
--- Name: plan_public plan_public_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public
- ADD CONSTRAINT plan_public_pkey PRIMARY KEY (plan_id);
-
-
---
--- Name: plans plans_key_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plans
- ADD CONSTRAINT plans_key_key UNIQUE (key);
-
-
---
--- Name: plans plans_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plans
- ADD CONSTRAINT plans_pkey PRIMARY KEY (id);
-
-
---
--- Name: professional_pricing professional_pricing_owner_commitment_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.professional_pricing
- ADD CONSTRAINT professional_pricing_owner_commitment_key UNIQUE (owner_id, determined_commitment_id);
-
-
---
--- Name: professional_pricing professional_pricing_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.professional_pricing
- ADD CONSTRAINT professional_pricing_pkey PRIMARY KEY (id);
-
-
---
--- Name: profiles profiles_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.profiles
- ADD CONSTRAINT profiles_pkey PRIMARY KEY (id);
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_pkey PRIMARY KEY (id);
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_unique; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_unique UNIQUE (recurrence_id, original_date);
-
-
---
--- Name: recurrence_rule_services recurrence_rule_services_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rule_services
- ADD CONSTRAINT recurrence_rule_services_pkey PRIMARY KEY (id);
-
-
---
--- Name: recurrence_rules recurrence_rules_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rules
- ADD CONSTRAINT recurrence_rules_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_admins saas_admins_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_admins
- ADD CONSTRAINT saas_admins_pkey PRIMARY KEY (user_id);
-
-
---
--- Name: saas_doc_votos saas_doc_votos_doc_id_user_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_doc_id_user_id_key UNIQUE (doc_id, user_id);
-
-
---
--- Name: saas_doc_votos saas_doc_votos_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_docs saas_docs_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_docs
- ADD CONSTRAINT saas_docs_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_faq_itens saas_faq_itens_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_faq_itens
- ADD CONSTRAINT saas_faq_itens_pkey PRIMARY KEY (id);
-
-
---
--- Name: saas_faq saas_faq_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_faq
- ADD CONSTRAINT saas_faq_pkey PRIMARY KEY (id);
-
-
---
--- Name: services services_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.services
- ADD CONSTRAINT services_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_events subscription_events_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_events
- ADD CONSTRAINT subscription_events_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_intents_personal subscription_intents_personal_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_personal
- ADD CONSTRAINT subscription_intents_personal_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_intents_legacy subscription_intents_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_legacy
- ADD CONSTRAINT subscription_intents_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscription_intents_tenant subscription_intents_tenant_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_tenant
- ADD CONSTRAINT subscription_intents_tenant_pkey PRIMARY KEY (id);
-
-
---
--- Name: subscriptions subscriptions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscriptions
- ADD CONSTRAINT subscriptions_pkey PRIMARY KEY (id);
-
-
---
--- Name: support_sessions support_sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_pkey PRIMARY KEY (id);
-
-
---
--- Name: support_sessions support_sessions_token_unique; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_token_unique UNIQUE (token);
-
-
---
--- Name: tenant_feature_exceptions_log tenant_feature_exceptions_log_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_feature_exceptions_log
- ADD CONSTRAINT tenant_feature_exceptions_log_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenant_features tenant_features_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_features
- ADD CONSTRAINT tenant_features_pkey PRIMARY KEY (tenant_id, feature_key);
-
-
---
--- Name: tenant_invites tenant_invites_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenant_members tenant_members_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenant_members tenant_members_tenant_id_user_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_tenant_id_user_id_key UNIQUE (tenant_id, user_id);
-
-
---
--- Name: tenant_modules tenant_modules_owner_id_module_id_key; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_owner_id_module_id_key UNIQUE (owner_id, module_id);
-
-
---
--- Name: tenant_modules tenant_modules_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_pkey PRIMARY KEY (id);
-
-
---
--- Name: tenants tenants_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenants
- ADD CONSTRAINT tenants_pkey PRIMARY KEY (id);
-
-
---
--- Name: user_settings user_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.user_settings
- ADD CONSTRAINT user_settings_pkey PRIMARY KEY (user_id);
-
-
---
--- Name: messages messages_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER TABLE ONLY realtime.messages
- ADD CONSTRAINT messages_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_12 messages_2026_03_12_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_12
- ADD CONSTRAINT messages_2026_03_12_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_13 messages_2026_03_13_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_13
- ADD CONSTRAINT messages_2026_03_13_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_14 messages_2026_03_14_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_14
- ADD CONSTRAINT messages_2026_03_14_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_15 messages_2026_03_15_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_15
- ADD CONSTRAINT messages_2026_03_15_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_16 messages_2026_03_16_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_16
- ADD CONSTRAINT messages_2026_03_16_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_17 messages_2026_03_17_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_17
- ADD CONSTRAINT messages_2026_03_17_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: messages_2026_03_18 messages_2026_03_18_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.messages_2026_03_18
- ADD CONSTRAINT messages_2026_03_18_pkey PRIMARY KEY (id, inserted_at);
-
-
---
--- Name: subscription pk_subscription; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.subscription
- ADD CONSTRAINT pk_subscription PRIMARY KEY (id);
-
-
---
--- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY realtime.schema_migrations
- ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: buckets_analytics buckets_analytics_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.buckets_analytics
- ADD CONSTRAINT buckets_analytics_pkey PRIMARY KEY (id);
-
-
---
--- Name: buckets buckets_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.buckets
- ADD CONSTRAINT buckets_pkey PRIMARY KEY (id);
-
-
---
--- Name: buckets_vectors buckets_vectors_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.buckets_vectors
- ADD CONSTRAINT buckets_vectors_pkey PRIMARY KEY (id);
-
-
---
--- Name: iceberg_namespaces iceberg_namespaces_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_namespaces
- ADD CONSTRAINT iceberg_namespaces_pkey PRIMARY KEY (id);
-
-
---
--- Name: iceberg_tables iceberg_tables_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_tables
- ADD CONSTRAINT iceberg_tables_pkey PRIMARY KEY (id);
-
-
---
--- Name: migrations migrations_name_key; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.migrations
- ADD CONSTRAINT migrations_name_key UNIQUE (name);
-
-
---
--- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.migrations
- ADD CONSTRAINT migrations_pkey PRIMARY KEY (id);
-
-
---
--- Name: objects objects_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.objects
- ADD CONSTRAINT objects_pkey PRIMARY KEY (id);
-
-
---
--- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads_parts
- ADD CONSTRAINT s3_multipart_uploads_parts_pkey PRIMARY KEY (id);
-
-
---
--- Name: s3_multipart_uploads s3_multipart_uploads_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads
- ADD CONSTRAINT s3_multipart_uploads_pkey PRIMARY KEY (id);
-
-
---
--- Name: vector_indexes vector_indexes_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.vector_indexes
- ADD CONSTRAINT vector_indexes_pkey PRIMARY KEY (id);
-
-
---
--- Name: hooks hooks_pkey; Type: CONSTRAINT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER TABLE ONLY supabase_functions.hooks
- ADD CONSTRAINT hooks_pkey PRIMARY KEY (id);
-
-
---
--- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-ALTER TABLE ONLY supabase_functions.migrations
- ADD CONSTRAINT migrations_pkey PRIMARY KEY (version);
-
-
---
--- Name: extensions_tenant_external_id_index; Type: INDEX; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE INDEX extensions_tenant_external_id_index ON _realtime.extensions USING btree (tenant_external_id);
-
-
---
--- Name: extensions_tenant_external_id_type_index; Type: INDEX; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX extensions_tenant_external_id_type_index ON _realtime.extensions USING btree (tenant_external_id, type);
-
-
---
--- Name: tenants_external_id_index; Type: INDEX; Schema: _realtime; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX tenants_external_id_index ON _realtime.tenants USING btree (external_id);
-
-
---
--- Name: audit_logs_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX audit_logs_instance_id_idx ON auth.audit_log_entries USING btree (instance_id);
-
-
---
--- Name: confirmation_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX confirmation_token_idx ON auth.users USING btree (confirmation_token) WHERE ((confirmation_token)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: email_change_token_current_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX email_change_token_current_idx ON auth.users USING btree (email_change_token_current) WHERE ((email_change_token_current)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: email_change_token_new_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX email_change_token_new_idx ON auth.users USING btree (email_change_token_new) WHERE ((email_change_token_new)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: factor_id_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX factor_id_created_at_idx ON auth.mfa_factors USING btree (user_id, created_at);
-
-
---
--- Name: flow_state_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX flow_state_created_at_idx ON auth.flow_state USING btree (created_at DESC);
-
-
---
--- Name: identities_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX identities_email_idx ON auth.identities USING btree (email text_pattern_ops);
-
-
---
--- Name: INDEX identities_email_idx; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON INDEX auth.identities_email_idx IS 'Auth: Ensures indexed queries on the email column';
-
-
---
--- Name: identities_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX identities_user_id_idx ON auth.identities USING btree (user_id);
-
-
---
--- Name: idx_auth_code; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX idx_auth_code ON auth.flow_state USING btree (auth_code);
-
-
---
--- Name: idx_oauth_client_states_created_at; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX idx_oauth_client_states_created_at ON auth.oauth_client_states USING btree (created_at);
-
-
---
--- Name: idx_user_id_auth_method; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX idx_user_id_auth_method ON auth.flow_state USING btree (user_id, authentication_method);
-
-
---
--- Name: mfa_challenge_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX mfa_challenge_created_at_idx ON auth.mfa_challenges USING btree (created_at DESC);
-
-
---
--- Name: mfa_factors_user_friendly_name_unique; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX mfa_factors_user_friendly_name_unique ON auth.mfa_factors USING btree (friendly_name, user_id) WHERE (TRIM(BOTH FROM friendly_name) <> ''::text);
-
-
---
--- Name: mfa_factors_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX mfa_factors_user_id_idx ON auth.mfa_factors USING btree (user_id);
-
-
---
--- Name: oauth_auth_pending_exp_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_auth_pending_exp_idx ON auth.oauth_authorizations USING btree (expires_at) WHERE (status = 'pending'::auth.oauth_authorization_status);
-
-
---
--- Name: oauth_clients_deleted_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_clients_deleted_at_idx ON auth.oauth_clients USING btree (deleted_at);
-
-
---
--- Name: oauth_consents_active_client_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_consents_active_client_idx ON auth.oauth_consents USING btree (client_id) WHERE (revoked_at IS NULL);
-
-
---
--- Name: oauth_consents_active_user_client_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_consents_active_user_client_idx ON auth.oauth_consents USING btree (user_id, client_id) WHERE (revoked_at IS NULL);
-
-
---
--- Name: oauth_consents_user_order_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX oauth_consents_user_order_idx ON auth.oauth_consents USING btree (user_id, granted_at DESC);
-
-
---
--- Name: one_time_tokens_relates_to_hash_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX one_time_tokens_relates_to_hash_idx ON auth.one_time_tokens USING hash (relates_to);
-
-
---
--- Name: one_time_tokens_token_hash_hash_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX one_time_tokens_token_hash_hash_idx ON auth.one_time_tokens USING hash (token_hash);
-
-
---
--- Name: one_time_tokens_user_id_token_type_key; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX one_time_tokens_user_id_token_type_key ON auth.one_time_tokens USING btree (user_id, token_type);
-
-
---
--- Name: reauthentication_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX reauthentication_token_idx ON auth.users USING btree (reauthentication_token) WHERE ((reauthentication_token)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: recovery_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX recovery_token_idx ON auth.users USING btree (recovery_token) WHERE ((recovery_token)::text !~ '^[0-9 ]*$'::text);
-
-
---
--- Name: refresh_tokens_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_instance_id_idx ON auth.refresh_tokens USING btree (instance_id);
-
-
---
--- Name: refresh_tokens_instance_id_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_instance_id_user_id_idx ON auth.refresh_tokens USING btree (instance_id, user_id);
-
-
---
--- Name: refresh_tokens_parent_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_parent_idx ON auth.refresh_tokens USING btree (parent);
-
-
---
--- Name: refresh_tokens_session_id_revoked_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_session_id_revoked_idx ON auth.refresh_tokens USING btree (session_id, revoked);
-
-
---
--- Name: refresh_tokens_updated_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX refresh_tokens_updated_at_idx ON auth.refresh_tokens USING btree (updated_at DESC);
-
-
---
--- Name: saml_providers_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_providers_sso_provider_id_idx ON auth.saml_providers USING btree (sso_provider_id);
-
-
---
--- Name: saml_relay_states_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_relay_states_created_at_idx ON auth.saml_relay_states USING btree (created_at DESC);
-
-
---
--- Name: saml_relay_states_for_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_relay_states_for_email_idx ON auth.saml_relay_states USING btree (for_email);
-
-
---
--- Name: saml_relay_states_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX saml_relay_states_sso_provider_id_idx ON auth.saml_relay_states USING btree (sso_provider_id);
-
-
---
--- Name: sessions_not_after_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sessions_not_after_idx ON auth.sessions USING btree (not_after DESC);
-
-
---
--- Name: sessions_oauth_client_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sessions_oauth_client_id_idx ON auth.sessions USING btree (oauth_client_id);
-
-
---
--- Name: sessions_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sessions_user_id_idx ON auth.sessions USING btree (user_id);
-
-
---
--- Name: sso_domains_domain_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX sso_domains_domain_idx ON auth.sso_domains USING btree (lower(domain));
-
-
---
--- Name: sso_domains_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sso_domains_sso_provider_id_idx ON auth.sso_domains USING btree (sso_provider_id);
-
-
---
--- Name: sso_providers_resource_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX sso_providers_resource_id_idx ON auth.sso_providers USING btree (lower(resource_id));
-
-
---
--- Name: sso_providers_resource_id_pattern_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX sso_providers_resource_id_pattern_idx ON auth.sso_providers USING btree (resource_id text_pattern_ops);
-
-
---
--- Name: unique_phone_factor_per_user; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX unique_phone_factor_per_user ON auth.mfa_factors USING btree (user_id, phone);
-
-
---
--- Name: user_id_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX user_id_created_at_idx ON auth.sessions USING btree (user_id, created_at);
-
-
---
--- Name: users_email_partial_key; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE UNIQUE INDEX users_email_partial_key ON auth.users USING btree (email) WHERE (is_sso_user = false);
-
-
---
--- Name: INDEX users_email_partial_key; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin
---
-
-COMMENT ON INDEX auth.users_email_partial_key IS 'Auth: A partial unique index that applies only when is_sso_user is false';
-
-
---
--- Name: users_instance_id_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX users_instance_id_email_idx ON auth.users USING btree (instance_id, lower((email)::text));
-
-
---
--- Name: users_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX users_instance_id_idx ON auth.users USING btree (instance_id);
-
-
---
--- Name: users_is_anonymous_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE INDEX users_is_anonymous_idx ON auth.users USING btree (is_anonymous);
-
-
---
--- Name: agenda_bloqueios_owner_data_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_owner_data_idx ON public.agenda_bloqueios USING btree (owner_id, data_inicio, data_fim);
-
-
---
--- Name: agenda_bloqueios_owner_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_owner_id_idx ON public.agenda_bloqueios USING btree (owner_id);
-
-
---
--- Name: agenda_bloqueios_recorrente_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_recorrente_idx ON public.agenda_bloqueios USING btree (owner_id, dia_semana) WHERE (recorrente = true);
-
-
---
--- Name: agenda_bloqueios_tenant_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_bloqueios_tenant_id_idx ON public.agenda_bloqueios USING btree (tenant_id);
-
-
---
--- Name: agenda_configuracoes_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_configuracoes_tenant_idx ON public.agenda_configuracoes USING btree (tenant_id);
-
-
---
--- Name: agenda_configuracoes_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_configuracoes_tenant_owner_idx ON public.agenda_configuracoes USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_eventos_billing_contract_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_billing_contract_idx ON public.agenda_eventos USING btree (billing_contract_id) WHERE (billing_contract_id IS NOT NULL);
-
-
---
--- Name: agenda_eventos_insurance_plan_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_insurance_plan_idx ON public.agenda_eventos USING btree (insurance_plan_id);
-
-
---
--- Name: agenda_eventos_owner_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_owner_inicio_idx ON public.agenda_eventos USING btree (owner_id, inicio_em);
-
-
---
--- Name: agenda_eventos_owner_terapeuta_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_owner_terapeuta_inicio_idx ON public.agenda_eventos USING btree (owner_id, terapeuta_id, inicio_em);
-
-
---
--- Name: agenda_eventos_recurrence_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_recurrence_idx ON public.agenda_eventos USING btree (recurrence_id) WHERE (recurrence_id IS NOT NULL);
-
-
---
--- Name: agenda_eventos_tenant_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_tenant_inicio_idx ON public.agenda_eventos USING btree (tenant_id, inicio_em);
-
-
---
--- Name: agenda_eventos_tenant_owner_inicio_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_eventos_tenant_owner_inicio_idx ON public.agenda_eventos USING btree (tenant_id, owner_id, inicio_em);
-
-
---
--- Name: agenda_excecoes_owner_data_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_excecoes_owner_data_idx ON public.agenda_excecoes USING btree (owner_id, data);
-
-
---
--- Name: agenda_excecoes_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_excecoes_tenant_idx ON public.agenda_excecoes USING btree (tenant_id);
-
-
---
--- Name: agenda_excecoes_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_excecoes_tenant_owner_idx ON public.agenda_excecoes USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_online_slots_owner_weekday_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_online_slots_owner_weekday_idx ON public.agenda_online_slots USING btree (owner_id, weekday);
-
-
---
--- Name: agenda_online_slots_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_online_slots_tenant_idx ON public.agenda_online_slots USING btree (tenant_id);
-
-
---
--- Name: agenda_online_slots_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_online_slots_tenant_owner_idx ON public.agenda_online_slots USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_regras_semanais_owner_dia_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_regras_semanais_owner_dia_idx ON public.agenda_regras_semanais USING btree (owner_id, dia_semana);
-
-
---
--- Name: agenda_regras_semanais_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_regras_semanais_tenant_idx ON public.agenda_regras_semanais USING btree (tenant_id);
-
-
---
--- Name: agenda_regras_semanais_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_regras_semanais_tenant_owner_idx ON public.agenda_regras_semanais USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_slots_bloqueados_semanais_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_bloqueados_semanais_tenant_idx ON public.agenda_slots_bloqueados_semanais USING btree (tenant_id);
-
-
---
--- Name: agenda_slots_bloqueados_semanais_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_bloqueados_semanais_tenant_owner_idx ON public.agenda_slots_bloqueados_semanais USING btree (tenant_id, owner_id);
-
-
---
--- Name: agenda_slots_regras_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_regras_tenant_idx ON public.agenda_slots_regras USING btree (tenant_id);
-
-
---
--- Name: agenda_slots_regras_tenant_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agenda_slots_regras_tenant_owner_idx ON public.agenda_slots_regras USING btree (tenant_id, owner_id);
-
-
---
--- Name: agendador_cfg_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_cfg_tenant_idx ON public.agendador_configuracoes USING btree (tenant_id);
-
-
---
--- Name: agendador_sol_data_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_sol_data_idx ON public.agendador_solicitacoes USING btree (data_solicitada, hora_solicitada);
-
-
---
--- Name: agendador_sol_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_sol_owner_idx ON public.agendador_solicitacoes USING btree (owner_id, status);
-
-
---
--- Name: agendador_sol_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX agendador_sol_tenant_idx ON public.agendador_solicitacoes USING btree (tenant_id);
-
-
---
--- Name: billing_contracts_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX billing_contracts_owner_idx ON public.billing_contracts USING btree (owner_id);
-
-
---
--- Name: billing_contracts_patient_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX billing_contracts_patient_idx ON public.billing_contracts USING btree (patient_id);
-
-
---
--- Name: billing_contracts_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX billing_contracts_tenant_idx ON public.billing_contracts USING btree (tenant_id);
-
-
---
--- Name: commitment_services_commitment_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_services_commitment_idx ON public.commitment_services USING btree (commitment_id);
-
-
---
--- Name: commitment_services_service_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_services_service_idx ON public.commitment_services USING btree (service_id);
-
-
---
--- Name: commitment_time_logs_calendar_event_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_time_logs_calendar_event_idx ON public.commitment_time_logs USING btree (calendar_event_id);
-
-
---
--- Name: commitment_time_logs_commitment_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_time_logs_commitment_idx ON public.commitment_time_logs USING btree (commitment_id, created_at DESC);
-
-
---
--- Name: commitment_time_logs_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX commitment_time_logs_tenant_idx ON public.commitment_time_logs USING btree (tenant_id, created_at DESC);
-
-
---
--- Name: determined_commitment_fields_commitment_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitment_fields_commitment_idx ON public.determined_commitment_fields USING btree (commitment_id, sort_order);
-
-
---
--- Name: determined_commitment_fields_key_uniq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX determined_commitment_fields_key_uniq ON public.determined_commitment_fields USING btree (commitment_id, key);
-
-
---
--- Name: determined_commitment_fields_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitment_fields_tenant_idx ON public.determined_commitment_fields USING btree (tenant_id);
-
-
---
--- Name: determined_commitments_active_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitments_active_idx ON public.determined_commitments USING btree (tenant_id, active);
-
-
---
--- Name: determined_commitments_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX determined_commitments_tenant_idx ON public.determined_commitments USING btree (tenant_id);
-
-
---
--- Name: determined_commitments_tenant_name_uniq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX determined_commitments_tenant_name_uniq ON public.determined_commitments USING btree (tenant_id, lower(name));
-
-
---
--- Name: feriados_global_unique; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX feriados_global_unique ON public.feriados USING btree (data, nome) WHERE (tenant_id IS NULL);
-
-
---
--- Name: financial_exceptions_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX financial_exceptions_owner_idx ON public.financial_exceptions USING btree (owner_id);
-
-
---
--- Name: financial_exceptions_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX financial_exceptions_tenant_idx ON public.financial_exceptions USING btree (tenant_id);
-
-
---
--- Name: idx_agenda_eventos_determined_commitment_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_agenda_eventos_determined_commitment_id ON public.agenda_eventos USING btree (determined_commitment_id);
-
-
---
--- Name: idx_agenda_excecoes_owner_data; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_agenda_excecoes_owner_data ON public.agenda_excecoes USING btree (owner_id, data);
-
-
---
--- Name: idx_agenda_slots_regras_owner_dia; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_agenda_slots_regras_owner_dia ON public.agenda_slots_regras USING btree (owner_id, dia_semana);
-
-
---
--- Name: idx_intakes_converted_patient_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_converted_patient_id ON public.patient_intake_requests USING btree (converted_patient_id);
-
-
---
--- Name: idx_intakes_owner_cpf; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_owner_cpf ON public.patient_intake_requests USING btree (owner_id, cpf);
-
-
---
--- Name: idx_intakes_owner_created; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_owner_created ON public.patient_intake_requests USING btree (owner_id, created_at DESC);
-
-
---
--- Name: idx_intakes_owner_status_created; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_owner_status_created ON public.patient_intake_requests USING btree (owner_id, status, created_at DESC);
-
-
---
--- Name: idx_intakes_status_created; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_intakes_status_created ON public.patient_intake_requests USING btree (status, created_at DESC);
-
-
---
--- Name: idx_patient_group_patient_group_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_group_patient_group_id ON public.patient_group_patient USING btree (patient_group_id);
-
-
---
--- Name: idx_patient_groups_owner; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_groups_owner ON public.patient_groups USING btree (owner_id);
-
-
---
--- Name: idx_patient_groups_owner_system_nome; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_groups_owner_system_nome ON public.patient_groups USING btree (owner_id, is_system, nome);
-
-
---
--- Name: idx_patient_tags_owner; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patient_tags_owner ON public.patient_tags USING btree (owner_id);
-
-
---
--- Name: idx_patients_created_at; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_created_at ON public.patients USING btree (created_at DESC);
-
-
---
--- Name: idx_patients_last_attended; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_last_attended ON public.patients USING btree (last_attended_at DESC);
-
-
---
--- Name: idx_patients_owner_email_principal; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_owner_email_principal ON public.patients USING btree (owner_id, email_principal);
-
-
---
--- Name: idx_patients_owner_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_owner_id ON public.patients USING btree (owner_id);
-
-
---
--- Name: idx_patients_owner_nome; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_owner_nome ON public.patients USING btree (owner_id, nome_completo);
-
-
---
--- Name: idx_patients_responsible_member; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_responsible_member ON public.patients USING btree (responsible_member_id);
-
-
---
--- Name: idx_patients_status; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_status ON public.patients USING btree (status);
-
-
---
--- Name: idx_patients_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_tenant ON public.patients USING btree (tenant_id);
-
-
---
--- Name: idx_patients_tenant_email_norm; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_patients_tenant_email_norm ON public.patients USING btree (tenant_id, lower(TRIM(BOTH FROM email_principal)));
-
-
---
--- Name: idx_pgp_group; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_pgp_group ON public.patient_group_patient USING btree (patient_group_id);
-
-
---
--- Name: idx_pgp_patient; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_pgp_patient ON public.patient_group_patient USING btree (patient_id);
-
-
---
--- Name: idx_ppt_patient; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_ppt_patient ON public.patient_patient_tag USING btree (patient_id);
-
-
---
--- Name: idx_ppt_tag; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_ppt_tag ON public.patient_patient_tag USING btree (tag_id);
-
-
---
--- Name: idx_slots_bloq_owner_dia; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_slots_bloq_owner_dia ON public.agenda_slots_bloqueados_semanais USING btree (owner_id, dia_semana);
-
-
---
--- Name: idx_subscription_intents_plan_interval; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_subscription_intents_plan_interval ON public.subscription_intents_legacy USING btree (plan_key, "interval");
-
-
---
--- Name: idx_subscription_intents_status; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_subscription_intents_status ON public.subscription_intents_legacy USING btree (status);
-
-
---
--- Name: idx_subscription_intents_user_id; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_subscription_intents_user_id ON public.subscription_intents_legacy USING btree (user_id);
-
-
---
--- Name: idx_tenant_features_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_tenant_features_tenant ON public.tenant_features USING btree (tenant_id);
-
-
---
--- Name: idx_tenant_invites_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_tenant_invites_tenant ON public.tenant_invites USING btree (tenant_id);
-
-
---
--- Name: idx_tenant_invites_token; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX idx_tenant_invites_token ON public.tenant_invites USING btree (token);
-
-
---
--- Name: insurance_plans_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX insurance_plans_owner_idx ON public.insurance_plans USING btree (owner_id);
-
-
---
--- Name: insurance_plans_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX insurance_plans_tenant_idx ON public.insurance_plans USING btree (tenant_id);
-
-
---
--- Name: ix_plan_prices_plan; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ix_plan_prices_plan ON public.plan_prices USING btree (plan_id);
-
-
---
--- Name: ix_plan_public_bullets_plan; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ix_plan_public_bullets_plan ON public.plan_public_bullets USING btree (plan_id);
-
-
---
--- Name: ix_plan_public_sort; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ix_plan_public_sort ON public.plan_public USING btree (sort_order);
-
-
---
--- Name: patient_discounts_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_discounts_owner_idx ON public.patient_discounts USING btree (owner_id);
-
-
---
--- Name: patient_discounts_patient_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_discounts_patient_idx ON public.patient_discounts USING btree (patient_id);
-
-
---
--- Name: patient_discounts_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_discounts_tenant_idx ON public.patient_discounts USING btree (tenant_id);
-
-
---
--- Name: patient_group_patient_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_group_patient_tenant_idx ON public.patient_group_patient USING btree (tenant_id);
-
-
---
--- Name: patient_groups_owner_nome_uniq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX patient_groups_owner_nome_uniq ON public.patient_groups USING btree (owner_id, nome);
-
-
---
--- Name: patient_groups_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_groups_tenant_idx ON public.patient_groups USING btree (tenant_id);
-
-
---
--- Name: patient_intake_owner_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_owner_id_idx ON public.patient_intake_requests USING btree (owner_id);
-
-
---
--- Name: patient_intake_requests_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_requests_tenant_idx ON public.patient_intake_requests USING btree (tenant_id);
-
-
---
--- Name: patient_intake_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_status_idx ON public.patient_intake_requests USING btree (status);
-
-
---
--- Name: patient_intake_token_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_intake_token_idx ON public.patient_intake_requests USING btree (token);
-
-
---
--- Name: patient_invites_one_active_per_owner; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX patient_invites_one_active_per_owner ON public.patient_invites USING btree (owner_id) WHERE (active = true);
-
-
---
--- Name: patient_invites_owner_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_invites_owner_id_idx ON public.patient_invites USING btree (owner_id);
-
-
---
--- Name: patient_invites_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_invites_tenant_idx ON public.patient_invites USING btree (tenant_id);
-
-
---
--- Name: patient_invites_token_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_invites_token_idx ON public.patient_invites USING btree (token);
-
-
---
--- Name: patient_patient_tag_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_patient_tag_tenant_idx ON public.patient_patient_tag USING btree (tenant_id);
-
-
---
--- Name: patient_tags_owner_name_uq; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX patient_tags_owner_name_uq ON public.patient_tags USING btree (owner_id, lower(nome));
-
-
---
--- Name: patient_tags_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX patient_tags_tenant_idx ON public.patient_tags USING btree (tenant_id);
-
-
---
--- Name: payment_settings_tenant_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX payment_settings_tenant_id_idx ON public.payment_settings USING btree (tenant_id);
-
-
---
--- Name: ppt_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ppt_owner_idx ON public.patient_patient_tag USING btree (owner_id);
-
-
---
--- Name: ppt_patient_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ppt_patient_idx ON public.patient_patient_tag USING btree (patient_id);
-
-
---
--- Name: ppt_tag_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX ppt_tag_idx ON public.patient_patient_tag USING btree (tag_id);
-
-
---
--- Name: professional_pricing_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX professional_pricing_tenant_idx ON public.professional_pricing USING btree (tenant_id);
-
-
---
--- Name: profiles_work_description_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX profiles_work_description_idx ON public.profiles USING btree (work_description) WHERE (work_description IS NOT NULL);
-
-
---
--- Name: recurrence_exceptions_rule_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_exceptions_rule_idx ON public.recurrence_exceptions USING btree (recurrence_id);
-
-
---
--- Name: recurrence_exceptions_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_exceptions_tenant_idx ON public.recurrence_exceptions USING btree (tenant_id);
-
-
---
--- Name: recurrence_rule_services_rule_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rule_services_rule_idx ON public.recurrence_rule_services USING btree (rule_id);
-
-
---
--- Name: recurrence_rule_services_service_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rule_services_service_idx ON public.recurrence_rule_services USING btree (service_id);
-
-
---
--- Name: recurrence_rules_active_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_active_idx ON public.recurrence_rules USING btree (owner_id, status) WHERE (status = 'ativo'::text);
-
-
---
--- Name: recurrence_rules_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_owner_idx ON public.recurrence_rules USING btree (owner_id);
-
-
---
--- Name: recurrence_rules_patient_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_patient_idx ON public.recurrence_rules USING btree (patient_id);
-
-
---
--- Name: recurrence_rules_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX recurrence_rules_tenant_idx ON public.recurrence_rules USING btree (tenant_id);
-
-
---
--- Name: saas_doc_votos_doc_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_doc_votos_doc_id_idx ON public.saas_doc_votos USING btree (doc_id);
-
-
---
--- Name: saas_doc_votos_user_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_doc_votos_user_id_idx ON public.saas_doc_votos USING btree (user_id);
-
-
---
--- Name: saas_docs_categoria_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_docs_categoria_idx ON public.saas_docs USING btree (categoria);
-
-
---
--- Name: saas_docs_exibir_no_faq_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_docs_exibir_no_faq_idx ON public.saas_docs USING btree (exibir_no_faq) WHERE (exibir_no_faq = true);
-
-
---
--- Name: saas_docs_path_ativo_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_docs_path_ativo_idx ON public.saas_docs USING btree (pagina_path, ativo);
-
-
---
--- Name: saas_faq_ativo_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_ativo_idx ON public.saas_faq USING btree (ativo);
-
-
---
--- Name: saas_faq_categoria_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_categoria_idx ON public.saas_faq USING btree (categoria);
-
-
---
--- Name: saas_faq_fts_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_fts_idx ON public.saas_faq USING gin (to_tsvector('portuguese'::regconfig, ((COALESCE(pergunta, ''::text) || ' '::text) || COALESCE(conteudo, ''::text))));
-
-
---
--- Name: saas_faq_itens_ativo_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_itens_ativo_idx ON public.saas_faq_itens USING btree (ativo);
-
-
---
--- Name: saas_faq_itens_doc_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_itens_doc_id_idx ON public.saas_faq_itens USING btree (doc_id);
-
-
---
--- Name: saas_faq_pagina_path_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_pagina_path_idx ON public.saas_faq USING btree (pagina_path);
-
-
---
--- Name: saas_faq_publico_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_publico_idx ON public.saas_faq USING btree (publico);
-
-
---
--- Name: saas_faq_votos_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX saas_faq_votos_idx ON public.saas_faq USING btree (votos DESC);
-
-
---
--- Name: services_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX services_owner_idx ON public.services USING btree (owner_id);
-
-
---
--- Name: services_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX services_tenant_idx ON public.services USING btree (tenant_id);
-
-
---
--- Name: sint_personal_created_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_personal_created_idx ON public.subscription_intents_personal USING btree (created_at DESC);
-
-
---
--- Name: sint_personal_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_personal_status_idx ON public.subscription_intents_personal USING btree (status);
-
-
---
--- Name: sint_tenant_created_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_tenant_created_idx ON public.subscription_intents_tenant USING btree (created_at DESC);
-
-
---
--- Name: sint_tenant_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_tenant_status_idx ON public.subscription_intents_tenant USING btree (status);
-
-
---
--- Name: sint_tenant_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX sint_tenant_tenant_idx ON public.subscription_intents_tenant USING btree (tenant_id);
-
-
---
--- Name: subscription_events_created_at_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_created_at_idx ON public.subscription_events USING btree (created_at DESC);
-
-
---
--- Name: subscription_events_owner_ref_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_owner_ref_idx ON public.subscription_events USING btree (owner_type, owner_ref);
-
-
---
--- Name: subscription_events_sub_created_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_sub_created_idx ON public.subscription_events USING btree (subscription_id, created_at DESC);
-
-
---
--- Name: subscription_events_subscription_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscription_events_subscription_id_idx ON public.subscription_events USING btree (subscription_id);
-
-
---
--- Name: subscriptions_one_active_per_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscriptions_one_active_per_tenant ON public.subscriptions USING btree (tenant_id) WHERE (status = 'active'::text);
-
-
---
--- Name: subscriptions_one_active_per_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscriptions_one_active_per_user ON public.subscriptions USING btree (user_id) WHERE (status = 'active'::text);
-
-
---
--- Name: subscriptions_one_active_per_user_personal; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscriptions_one_active_per_user_personal ON public.subscriptions USING btree (user_id) WHERE ((tenant_id IS NULL) AND (status = 'active'::text));
-
-
---
--- Name: subscriptions_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_owner_idx ON public.subscriptions USING btree (user_id);
-
-
---
--- Name: subscriptions_plan_key_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_plan_key_idx ON public.subscriptions USING btree (plan_key);
-
-
---
--- Name: subscriptions_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_status_idx ON public.subscriptions USING btree (status);
-
-
---
--- Name: subscriptions_tenant_id_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_tenant_id_idx ON public.subscriptions USING btree (tenant_id);
-
-
---
--- Name: subscriptions_tenant_period_end_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_tenant_period_end_idx ON public.subscriptions USING btree (tenant_id, current_period_end);
-
-
---
--- Name: subscriptions_tenant_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_tenant_status_idx ON public.subscriptions USING btree (tenant_id, status);
-
-
---
--- Name: subscriptions_user_status_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX subscriptions_user_status_idx ON public.subscriptions USING btree (user_id, status, created_at DESC);
-
-
---
--- Name: support_sessions_expires_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX support_sessions_expires_idx ON public.support_sessions USING btree (expires_at);
-
-
---
--- Name: support_sessions_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX support_sessions_tenant_idx ON public.support_sessions USING btree (tenant_id);
-
-
---
--- Name: support_sessions_token_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX support_sessions_token_idx ON public.support_sessions USING btree (token);
-
-
---
--- Name: tenant_members_tenant_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX tenant_members_tenant_idx ON public.tenant_members USING btree (tenant_id);
-
-
---
--- Name: tenant_members_user_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX tenant_members_user_idx ON public.tenant_members USING btree (user_id);
-
-
---
--- Name: tenant_modules_owner_idx; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE INDEX tenant_modules_owner_idx ON public.tenant_modules USING btree (owner_id);
-
-
---
--- Name: unique_member_per_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX unique_member_per_tenant ON public.tenant_members USING btree (tenant_id, user_id);
-
-
---
--- Name: uq_patients_tenant_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_patients_tenant_user ON public.patients USING btree (tenant_id, user_id) WHERE (user_id IS NOT NULL);
-
-
---
--- Name: uq_plan_price_active; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_plan_price_active ON public.plan_prices USING btree (plan_id, "interval", currency) WHERE ((is_active = true) AND (active_to IS NULL));
-
-
---
--- Name: uq_plan_prices_active; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_plan_prices_active ON public.plan_prices USING btree (plan_id, "interval") WHERE (is_active = true);
-
-
---
--- Name: uq_subscriptions_active_by_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_subscriptions_active_by_tenant ON public.subscriptions USING btree (tenant_id) WHERE ((tenant_id IS NOT NULL) AND (status = 'active'::text));
-
-
---
--- Name: uq_subscriptions_active_personal_by_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_subscriptions_active_personal_by_user ON public.subscriptions USING btree (user_id) WHERE ((tenant_id IS NULL) AND (status = 'active'::text));
-
-
---
--- Name: uq_tenant_invites_pending; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_tenant_invites_pending ON public.tenant_invites USING btree (tenant_id, lower(email), role) WHERE ((accepted_at IS NULL) AND (revoked_at IS NULL));
-
-
---
--- Name: uq_tenant_members_tenant_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX uq_tenant_members_tenant_user ON public.tenant_members USING btree (tenant_id, user_id);
-
-
---
--- Name: ux_subscriptions_active_per_personal_user; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX ux_subscriptions_active_per_personal_user ON public.subscriptions USING btree (user_id) WHERE ((status = 'active'::text) AND (tenant_id IS NULL));
-
-
---
--- Name: ux_subscriptions_active_per_tenant; Type: INDEX; Schema: public; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX ux_subscriptions_active_per_tenant ON public.subscriptions USING btree (tenant_id) WHERE ((status = 'active'::text) AND (tenant_id IS NOT NULL));
-
-
---
--- Name: ix_realtime_subscription_entity; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX ix_realtime_subscription_entity ON realtime.subscription USING btree (entity);
-
-
---
--- Name: messages_inserted_at_topic_index; Type: INDEX; Schema: realtime; Owner: supabase_realtime_admin
---
-
-CREATE INDEX messages_inserted_at_topic_index ON ONLY realtime.messages USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_12_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_12_inserted_at_topic_idx ON realtime.messages_2026_03_12 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_13_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_13_inserted_at_topic_idx ON realtime.messages_2026_03_13 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_14_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_14_inserted_at_topic_idx ON realtime.messages_2026_03_14 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_15_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_15_inserted_at_topic_idx ON realtime.messages_2026_03_15 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_16_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_16_inserted_at_topic_idx ON realtime.messages_2026_03_16 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_17_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_17_inserted_at_topic_idx ON realtime.messages_2026_03_17 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: messages_2026_03_18_inserted_at_topic_idx; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE INDEX messages_2026_03_18_inserted_at_topic_idx ON realtime.messages_2026_03_18 USING btree (inserted_at DESC, topic) WHERE ((extension = 'broadcast'::text) AND (private IS TRUE));
-
-
---
--- Name: subscription_subscription_id_entity_filters_key; Type: INDEX; Schema: realtime; Owner: supabase_admin
---
-
-CREATE UNIQUE INDEX subscription_subscription_id_entity_filters_key ON realtime.subscription USING btree (subscription_id, entity, filters);
-
-
---
--- Name: bname; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX bname ON storage.buckets USING btree (name);
-
-
---
--- Name: bucketid_objname; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX bucketid_objname ON storage.objects USING btree (bucket_id, name);
-
-
---
--- Name: buckets_analytics_unique_name_idx; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX buckets_analytics_unique_name_idx ON storage.buckets_analytics USING btree (name) WHERE (deleted_at IS NULL);
-
-
---
--- Name: idx_iceberg_namespaces_bucket_id; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX idx_iceberg_namespaces_bucket_id ON storage.iceberg_namespaces USING btree (catalog_id, name);
-
-
---
--- Name: idx_iceberg_tables_location; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX idx_iceberg_tables_location ON storage.iceberg_tables USING btree (location);
-
-
---
--- Name: idx_iceberg_tables_namespace_id; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX idx_iceberg_tables_namespace_id ON storage.iceberg_tables USING btree (catalog_id, namespace_id, name);
-
-
---
--- Name: idx_multipart_uploads_list; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX idx_multipart_uploads_list ON storage.s3_multipart_uploads USING btree (bucket_id, key, created_at);
-
-
---
--- Name: idx_objects_bucket_id_name; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX idx_objects_bucket_id_name ON storage.objects USING btree (bucket_id, name COLLATE "C");
-
-
---
--- Name: idx_objects_bucket_id_name_lower; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX idx_objects_bucket_id_name_lower ON storage.objects USING btree (bucket_id, lower(name) COLLATE "C");
-
-
---
--- Name: name_prefix_search; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE INDEX name_prefix_search ON storage.objects USING btree (name text_pattern_ops);
-
-
---
--- Name: vector_indexes_name_bucket_id_idx; Type: INDEX; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE UNIQUE INDEX vector_indexes_name_bucket_id_idx ON storage.vector_indexes USING btree (name, bucket_id);
-
-
---
--- Name: supabase_functions_hooks_h_table_id_h_name_idx; Type: INDEX; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE INDEX supabase_functions_hooks_h_table_id_h_name_idx ON supabase_functions.hooks USING btree (hook_table_id, hook_name);
-
-
---
--- Name: supabase_functions_hooks_request_id_idx; Type: INDEX; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-CREATE INDEX supabase_functions_hooks_request_id_idx ON supabase_functions.hooks USING btree (request_id);
-
-
---
--- Name: messages_2026_03_12_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_12_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_12_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_12_pkey;
-
-
---
--- Name: messages_2026_03_13_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_13_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_13_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_13_pkey;
-
-
---
--- Name: messages_2026_03_14_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_14_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_14_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_14_pkey;
-
-
---
--- Name: messages_2026_03_15_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_15_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_15_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_15_pkey;
-
-
---
--- Name: messages_2026_03_16_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_16_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_16_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_16_pkey;
-
-
---
--- Name: messages_2026_03_17_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_17_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_17_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_17_pkey;
-
-
---
--- Name: messages_2026_03_18_inserted_at_topic_idx; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_inserted_at_topic_index ATTACH PARTITION realtime.messages_2026_03_18_inserted_at_topic_idx;
-
-
---
--- Name: messages_2026_03_18_pkey; Type: INDEX ATTACH; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER INDEX realtime.messages_pkey ATTACH PARTITION realtime.messages_2026_03_18_pkey;
-
-
---
--- Name: users on_auth_user_created; Type: TRIGGER; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TRIGGER on_auth_user_created AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION public.handle_new_user();
-
-
---
--- Name: users trg_seed_patient_groups; Type: TRIGGER; Schema: auth; Owner: supabase_auth_admin
---
-
-CREATE TRIGGER trg_seed_patient_groups AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION public.on_new_user_seed_patient_groups();
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER agenda_bloqueios_updated_at BEFORE UPDATE ON public.agenda_bloqueios FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agendador_configuracoes agendador_slug_trigger; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER agendador_slug_trigger BEFORE INSERT OR UPDATE ON public.agendador_configuracoes FOR EACH ROW EXECUTE FUNCTION public.agendador_gerar_slug();
-
-
---
--- Name: tenant_members prevent_saas_membership_trigger; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER prevent_saas_membership_trigger BEFORE INSERT ON public.tenant_members FOR EACH ROW EXECUTE FUNCTION public.prevent_saas_membership();
-
-
---
--- Name: insurance_plan_services set_insurance_plan_services_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER set_insurance_plan_services_updated_at BEFORE UPDATE ON public.insurance_plan_services FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: user_settings t_user_settings_set_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER t_user_settings_set_updated_at BEFORE UPDATE ON public.user_settings FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_configuracoes tg_agenda_configuracoes_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_configuracoes_updated_at BEFORE UPDATE ON public.agenda_configuracoes FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_eventos tg_agenda_eventos_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_eventos_updated_at BEFORE UPDATE ON public.agenda_eventos FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_excecoes tg_agenda_excecoes_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_excecoes_updated_at BEFORE UPDATE ON public.agenda_excecoes FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: agenda_regras_semanais tg_agenda_regras_semanais_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_agenda_regras_semanais_updated_at BEFORE UPDATE ON public.agenda_regras_semanais FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: recurrence_rules tg_recurrence_rules_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tg_recurrence_rules_updated_at BEFORE UPDATE ON public.recurrence_rules FOR EACH ROW EXECUTE FUNCTION public.set_updated_at_recurrence();
-
-
---
--- Name: plan_public tr_plan_public_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER tr_plan_public_updated_at BEFORE UPDATE ON public.plan_public FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: profiles trg_account_type_immutable; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_account_type_immutable BEFORE UPDATE OF account_type ON public.profiles FOR EACH ROW EXECUTE FUNCTION public.guard_account_type_immutable();
-
-
---
--- Name: agenda_configuracoes trg_agenda_cfg_sync; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_cfg_sync BEFORE INSERT OR UPDATE ON public.agenda_configuracoes FOR EACH ROW EXECUTE FUNCTION public.agenda_cfg_sync();
-
-
---
--- Name: agenda_eventos trg_agenda_eventos_busy_mirror_del; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_eventos_busy_mirror_del AFTER DELETE ON public.agenda_eventos FOR EACH ROW WHEN (((old.mirror_of_event_id IS NULL) AND (old.tenant_id = old.owner_id))) EXECUTE FUNCTION public.sync_busy_mirror_agenda_eventos();
-
-
---
--- Name: agenda_eventos trg_agenda_eventos_busy_mirror_ins; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_eventos_busy_mirror_ins AFTER INSERT ON public.agenda_eventos FOR EACH ROW WHEN (((new.mirror_of_event_id IS NULL) AND (new.tenant_id = new.owner_id) AND (new.visibility_scope = ANY (ARRAY['busy_only'::text, 'private'::text])))) EXECUTE FUNCTION public.sync_busy_mirror_agenda_eventos();
-
-
---
--- Name: agenda_eventos trg_agenda_eventos_busy_mirror_upd; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_eventos_busy_mirror_upd AFTER UPDATE ON public.agenda_eventos FOR EACH ROW WHEN (((new.mirror_of_event_id IS NULL) AND (new.tenant_id = new.owner_id) AND ((new.visibility_scope IS DISTINCT FROM old.visibility_scope) OR (new.inicio_em IS DISTINCT FROM old.inicio_em) OR (new.fim_em IS DISTINCT FROM old.fim_em) OR (new.owner_id IS DISTINCT FROM old.owner_id) OR (new.tenant_id IS DISTINCT FROM old.tenant_id)))) EXECUTE FUNCTION public.sync_busy_mirror_agenda_eventos();
-
-
---
--- Name: agenda_regras_semanais trg_agenda_regras_semanais_no_overlap; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_agenda_regras_semanais_no_overlap BEFORE INSERT OR UPDATE ON public.agenda_regras_semanais FOR EACH ROW EXECUTE FUNCTION public.fn_agenda_regras_semanais_no_overlap();
-
-
---
--- Name: determined_commitment_fields trg_determined_commitment_fields_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_determined_commitment_fields_updated_at BEFORE UPDATE ON public.determined_commitment_fields FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: determined_commitments trg_determined_commitments_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_determined_commitments_updated_at BEFORE UPDATE ON public.determined_commitments FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: financial_exceptions trg_financial_exceptions_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_financial_exceptions_updated_at BEFORE UPDATE ON public.financial_exceptions FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: insurance_plans trg_insurance_plans_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_insurance_plans_updated_at BEFORE UPDATE ON public.insurance_plans FOR EACH ROW EXECUTE FUNCTION public.set_insurance_plans_updated_at();
-
-
---
--- Name: plans trg_no_change_core_plan_key; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_no_change_core_plan_key BEFORE UPDATE ON public.plans FOR EACH ROW EXECUTE FUNCTION public.guard_no_change_core_plan_key();
-
-
---
--- Name: plans trg_no_change_plan_target; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_no_change_plan_target BEFORE UPDATE ON public.plans FOR EACH ROW EXECUTE FUNCTION public.guard_no_change_plan_target();
-
-
---
--- Name: plans trg_no_delete_core_plans; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_no_delete_core_plans BEFORE DELETE ON public.plans FOR EACH ROW EXECUTE FUNCTION public.guard_no_delete_core_plans();
-
-
---
--- Name: tenant_members trg_patient_cannot_own_tenant; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_cannot_own_tenant BEFORE INSERT OR UPDATE ON public.tenant_members FOR EACH ROW EXECUTE FUNCTION public.guard_patient_cannot_own_tenant();
-
-
---
--- Name: patient_groups trg_patient_groups_set_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_groups_set_updated_at BEFORE UPDATE ON public.patient_groups FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patient_intake_requests trg_patient_intake_requests_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_intake_requests_updated_at BEFORE UPDATE ON public.patient_intake_requests FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patient_tags trg_patient_tags_set_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patient_tags_set_updated_at BEFORE UPDATE ON public.patient_tags FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patients trg_patients_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patients_updated_at BEFORE UPDATE ON public.patients FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: patients trg_patients_validate_members; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_patients_validate_members BEFORE INSERT OR UPDATE OF tenant_id, responsible_member_id, patient_scope, therapist_member_id ON public.patients FOR EACH ROW EXECUTE FUNCTION public.patients_validate_member_consistency();
-
-
---
--- Name: payment_settings trg_payment_settings_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_payment_settings_updated_at BEFORE UPDATE ON public.payment_settings FOR EACH ROW EXECUTE FUNCTION public.update_payment_settings_updated_at();
-
-
---
--- Name: patient_groups trg_prevent_promoting_to_system; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_prevent_promoting_to_system BEFORE UPDATE ON public.patient_groups FOR EACH ROW EXECUTE FUNCTION public.prevent_promoting_to_system();
-
-
---
--- Name: patient_groups trg_prevent_system_group_changes; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_prevent_system_group_changes BEFORE DELETE OR UPDATE ON public.patient_groups FOR EACH ROW EXECUTE FUNCTION public.prevent_system_group_changes();
-
-
---
--- Name: professional_pricing trg_professional_pricing_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_professional_pricing_updated_at BEFORE UPDATE ON public.professional_pricing FOR EACH ROW EXECUTE FUNCTION public.update_professional_pricing_updated_at();
-
-
---
--- Name: profiles trg_profiles_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_profiles_updated_at BEFORE UPDATE ON public.profiles FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: services trg_services_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_services_updated_at BEFORE UPDATE ON public.services FOR EACH ROW EXECUTE FUNCTION public.set_services_updated_at();
-
-
---
--- Name: subscription_intents trg_subscription_intents_view_insert; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_subscription_intents_view_insert INSTEAD OF INSERT ON public.subscription_intents FOR EACH ROW EXECUTE FUNCTION public.subscription_intents_view_insert();
-
-
---
--- Name: subscriptions trg_subscriptions_validate_scope; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_subscriptions_validate_scope BEFORE INSERT OR UPDATE ON public.subscriptions FOR EACH ROW EXECUTE FUNCTION public.subscriptions_validate_scope();
-
-
---
--- Name: tenant_features trg_tenant_features_guard_with_plan; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_tenant_features_guard_with_plan BEFORE INSERT OR UPDATE ON public.tenant_features FOR EACH ROW EXECUTE FUNCTION public.tenant_features_guard_with_plan();
-
-
---
--- Name: tenant_features trg_tenant_features_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_tenant_features_updated_at BEFORE UPDATE ON public.tenant_features FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: tenants trg_tenant_kind_immutable; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_tenant_kind_immutable BEFORE UPDATE OF kind ON public.tenants FOR EACH ROW EXECUTE FUNCTION public.guard_tenant_kind_immutable();
-
-
---
--- Name: user_settings trg_user_settings_updated_at; Type: TRIGGER; Schema: public; Owner: supabase_admin
---
-
-CREATE TRIGGER trg_user_settings_updated_at BEFORE UPDATE ON public.user_settings FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-
-
---
--- Name: subscription tr_check_filters; Type: TRIGGER; Schema: realtime; Owner: supabase_admin
---
-
-CREATE TRIGGER tr_check_filters BEFORE INSERT OR UPDATE ON realtime.subscription FOR EACH ROW EXECUTE FUNCTION realtime.subscription_check_filters();
-
-
---
--- Name: buckets enforce_bucket_name_length_trigger; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER enforce_bucket_name_length_trigger BEFORE INSERT OR UPDATE OF name ON storage.buckets FOR EACH ROW EXECUTE FUNCTION storage.enforce_bucket_name_length();
-
-
---
--- Name: buckets protect_buckets_delete; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER protect_buckets_delete BEFORE DELETE ON storage.buckets FOR EACH STATEMENT EXECUTE FUNCTION storage.protect_delete();
-
-
---
--- Name: objects protect_objects_delete; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER protect_objects_delete BEFORE DELETE ON storage.objects FOR EACH STATEMENT EXECUTE FUNCTION storage.protect_delete();
-
-
---
--- Name: objects update_objects_updated_at; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE TRIGGER update_objects_updated_at BEFORE UPDATE ON storage.objects FOR EACH ROW EXECUTE FUNCTION storage.update_updated_at_column();
-
-
---
--- Name: extensions extensions_tenant_external_id_fkey; Type: FK CONSTRAINT; Schema: _realtime; Owner: supabase_admin
---
-
-ALTER TABLE ONLY _realtime.extensions
- ADD CONSTRAINT extensions_tenant_external_id_fkey FOREIGN KEY (tenant_external_id) REFERENCES _realtime.tenants(external_id) ON DELETE CASCADE;
-
-
---
--- Name: identities identities_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.identities
- ADD CONSTRAINT identities_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: mfa_amr_claims mfa_amr_claims_session_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_amr_claims
- ADD CONSTRAINT mfa_amr_claims_session_id_fkey FOREIGN KEY (session_id) REFERENCES auth.sessions(id) ON DELETE CASCADE;
-
-
---
--- Name: mfa_challenges mfa_challenges_auth_factor_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_challenges
- ADD CONSTRAINT mfa_challenges_auth_factor_id_fkey FOREIGN KEY (factor_id) REFERENCES auth.mfa_factors(id) ON DELETE CASCADE;
-
-
---
--- Name: mfa_factors mfa_factors_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.mfa_factors
- ADD CONSTRAINT mfa_factors_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_authorizations oauth_authorizations_client_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_client_id_fkey FOREIGN KEY (client_id) REFERENCES auth.oauth_clients(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_authorizations oauth_authorizations_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_authorizations
- ADD CONSTRAINT oauth_authorizations_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_consents oauth_consents_client_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_client_id_fkey FOREIGN KEY (client_id) REFERENCES auth.oauth_clients(id) ON DELETE CASCADE;
-
-
---
--- Name: oauth_consents oauth_consents_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.oauth_consents
- ADD CONSTRAINT oauth_consents_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: one_time_tokens one_time_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.one_time_tokens
- ADD CONSTRAINT one_time_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_tokens refresh_tokens_session_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.refresh_tokens
- ADD CONSTRAINT refresh_tokens_session_id_fkey FOREIGN KEY (session_id) REFERENCES auth.sessions(id) ON DELETE CASCADE;
-
-
---
--- Name: saml_providers saml_providers_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_providers
- ADD CONSTRAINT saml_providers_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE;
-
-
---
--- Name: saml_relay_states saml_relay_states_flow_state_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_relay_states
- ADD CONSTRAINT saml_relay_states_flow_state_id_fkey FOREIGN KEY (flow_state_id) REFERENCES auth.flow_state(id) ON DELETE CASCADE;
-
-
---
--- Name: saml_relay_states saml_relay_states_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.saml_relay_states
- ADD CONSTRAINT saml_relay_states_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE;
-
-
---
--- Name: sessions sessions_oauth_client_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sessions
- ADD CONSTRAINT sessions_oauth_client_id_fkey FOREIGN KEY (oauth_client_id) REFERENCES auth.oauth_clients(id) ON DELETE CASCADE;
-
-
---
--- Name: sessions sessions_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sessions
- ADD CONSTRAINT sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: sso_domains sso_domains_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE ONLY auth.sso_domains
- ADD CONSTRAINT sso_domains_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_bloqueios
- ADD CONSTRAINT agenda_bloqueios_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_bloqueios agenda_bloqueios_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_bloqueios
- ADD CONSTRAINT agenda_bloqueios_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_configuracoes
- ADD CONSTRAINT agenda_configuracoes_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_eventos agenda_eventos_billing_contract_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_billing_contract_id_fkey FOREIGN KEY (billing_contract_id) REFERENCES public.billing_contracts(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_determined_commitment_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_determined_commitment_fk FOREIGN KEY (determined_commitment_id) REFERENCES public.determined_commitments(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_insurance_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_insurance_plan_id_fkey FOREIGN KEY (insurance_plan_id) REFERENCES public.insurance_plans(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_insurance_plan_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_insurance_plan_service_id_fkey FOREIGN KEY (insurance_plan_service_id) REFERENCES public.insurance_plan_services(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_patient_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_recurrence_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_recurrence_id_fkey FOREIGN KEY (recurrence_id) REFERENCES public.recurrence_rules(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_eventos agenda_eventos_terapeuta_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_eventos
- ADD CONSTRAINT agenda_eventos_terapeuta_fk FOREIGN KEY (terapeuta_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: agenda_excecoes agenda_excecoes_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_excecoes
- ADD CONSTRAINT agenda_excecoes_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_online_slots agenda_online_slots_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_online_slots agenda_online_slots_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_online_slots
- ADD CONSTRAINT agenda_online_slots_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_regras_semanais
- ADD CONSTRAINT agenda_regras_semanais_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_bloqueados_semanais
- ADD CONSTRAINT agenda_slots_bloqueados_semanais_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agenda_slots_regras
- ADD CONSTRAINT agenda_slots_regras_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_configuracoes agendador_configuracoes_owner_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_configuracoes
- ADD CONSTRAINT agendador_configuracoes_owner_fk FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_configuracoes agendador_configuracoes_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_configuracoes
- ADD CONSTRAINT agendador_configuracoes_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_solicitacoes agendador_sol_owner_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_solicitacoes
- ADD CONSTRAINT agendador_sol_owner_fk FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: agendador_solicitacoes agendador_sol_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.agendador_solicitacoes
- ADD CONSTRAINT agendador_sol_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: billing_contracts billing_contracts_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.billing_contracts
- ADD CONSTRAINT billing_contracts_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: billing_contracts billing_contracts_patient_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.billing_contracts
- ADD CONSTRAINT billing_contracts_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE CASCADE;
-
-
---
--- Name: commitment_services commitment_services_commitment_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_services
- ADD CONSTRAINT commitment_services_commitment_id_fkey FOREIGN KEY (commitment_id) REFERENCES public.agenda_eventos(id) ON DELETE CASCADE;
-
-
---
--- Name: commitment_services commitment_services_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_services
- ADD CONSTRAINT commitment_services_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE RESTRICT;
-
-
---
--- Name: commitment_time_logs commitment_time_logs_calendar_event_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_calendar_event_id_fkey FOREIGN KEY (calendar_event_id) REFERENCES public.agenda_eventos(id) ON DELETE SET NULL;
-
-
---
--- Name: commitment_time_logs commitment_time_logs_commitment_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_commitment_id_fkey FOREIGN KEY (commitment_id) REFERENCES public.determined_commitments(id) ON DELETE CASCADE;
-
-
---
--- Name: commitment_time_logs commitment_time_logs_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.commitment_time_logs
- ADD CONSTRAINT commitment_time_logs_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: determined_commitment_fields determined_commitment_fields_commitment_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitment_fields
- ADD CONSTRAINT determined_commitment_fields_commitment_id_fkey FOREIGN KEY (commitment_id) REFERENCES public.determined_commitments(id) ON DELETE CASCADE;
-
-
---
--- Name: determined_commitment_fields determined_commitment_fields_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitment_fields
- ADD CONSTRAINT determined_commitment_fields_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: determined_commitments determined_commitments_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.determined_commitments
- ADD CONSTRAINT determined_commitments_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: feriados feriados_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: feriados feriados_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.feriados
- ADD CONSTRAINT feriados_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: financial_exceptions financial_exceptions_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.financial_exceptions
- ADD CONSTRAINT financial_exceptions_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: insurance_plan_services insurance_plan_services_plan_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.insurance_plan_services
- ADD CONSTRAINT insurance_plan_services_plan_fkey FOREIGN KEY (insurance_plan_id) REFERENCES public.insurance_plans(id) ON DELETE CASCADE;
-
-
---
--- Name: insurance_plans insurance_plans_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.insurance_plans
- ADD CONSTRAINT insurance_plans_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: module_features module_features_feature_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.module_features
- ADD CONSTRAINT module_features_feature_id_fkey FOREIGN KEY (feature_id) REFERENCES public.features(id) ON DELETE CASCADE;
-
-
---
--- Name: module_features module_features_module_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.module_features
- ADD CONSTRAINT module_features_module_id_fkey FOREIGN KEY (module_id) REFERENCES public.modules(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_discounts patient_discounts_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_discounts
- ADD CONSTRAINT patient_discounts_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_discounts patient_discounts_patient_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_discounts
- ADD CONSTRAINT patient_discounts_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_group_patient patient_group_patient_patient_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_group_patient
- ADD CONSTRAINT patient_group_patient_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_group_patient patient_group_patient_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_group_patient
- ADD CONSTRAINT patient_group_patient_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_groups patient_groups_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_groups
- ADD CONSTRAINT patient_groups_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_intake_requests patient_intake_requests_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_intake_requests
- ADD CONSTRAINT patient_intake_requests_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_invites patient_invites_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_invites
- ADD CONSTRAINT patient_invites_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag patient_patient_tag_tag_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT patient_patient_tag_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES public.patient_tags(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag patient_patient_tag_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT patient_patient_tag_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_tags patient_tags_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_tags
- ADD CONSTRAINT patient_tags_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patients patients_responsible_member_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_responsible_member_id_fkey FOREIGN KEY (responsible_member_id) REFERENCES public.tenant_members(id) ON DELETE RESTRICT;
-
-
---
--- Name: patients patients_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: patients patients_therapist_member_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_therapist_member_id_fkey FOREIGN KEY (therapist_member_id) REFERENCES public.tenant_members(id);
-
-
---
--- Name: patients patients_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patients
- ADD CONSTRAINT patients_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: payment_settings payment_settings_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: payment_settings payment_settings_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.payment_settings
- ADD CONSTRAINT payment_settings_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_features plan_features_feature_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_features
- ADD CONSTRAINT plan_features_feature_id_fkey FOREIGN KEY (feature_id) REFERENCES public.features(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_features plan_features_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_features
- ADD CONSTRAINT plan_features_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_prices plan_prices_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_prices
- ADD CONSTRAINT plan_prices_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_public_bullets plan_public_bullets_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public_bullets
- ADD CONSTRAINT plan_public_bullets_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: plan_public plan_public_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.plan_public
- ADD CONSTRAINT plan_public_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag ppt_patient_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT ppt_patient_fk FOREIGN KEY (patient_id) REFERENCES public.patients(id) ON DELETE CASCADE;
-
-
---
--- Name: patient_patient_tag ppt_tag_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.patient_patient_tag
- ADD CONSTRAINT ppt_tag_fk FOREIGN KEY (tag_id) REFERENCES public.patient_tags(id) ON DELETE CASCADE;
-
-
---
--- Name: professional_pricing professional_pricing_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.professional_pricing
- ADD CONSTRAINT professional_pricing_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: profiles profiles_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.profiles
- ADD CONSTRAINT profiles_id_fkey FOREIGN KEY (id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_agenda_evento_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_agenda_evento_id_fkey FOREIGN KEY (agenda_evento_id) REFERENCES public.agenda_eventos(id) ON DELETE SET NULL;
-
-
---
--- Name: recurrence_exceptions recurrence_exceptions_recurrence_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_exceptions
- ADD CONSTRAINT recurrence_exceptions_recurrence_id_fkey FOREIGN KEY (recurrence_id) REFERENCES public.recurrence_rules(id) ON DELETE CASCADE;
-
-
---
--- Name: recurrence_rule_services recurrence_rule_services_rule_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rule_services
- ADD CONSTRAINT recurrence_rule_services_rule_id_fkey FOREIGN KEY (rule_id) REFERENCES public.recurrence_rules(id) ON DELETE CASCADE;
-
-
---
--- Name: recurrence_rule_services recurrence_rule_services_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rule_services
- ADD CONSTRAINT recurrence_rule_services_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE RESTRICT;
-
-
---
--- Name: recurrence_rules recurrence_rules_insurance_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rules
- ADD CONSTRAINT recurrence_rules_insurance_plan_id_fkey FOREIGN KEY (insurance_plan_id) REFERENCES public.insurance_plans(id) ON DELETE SET NULL;
-
-
---
--- Name: recurrence_rules recurrence_rules_insurance_plan_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.recurrence_rules
- ADD CONSTRAINT recurrence_rules_insurance_plan_service_id_fkey FOREIGN KEY (insurance_plan_service_id) REFERENCES public.insurance_plan_services(id) ON DELETE SET NULL;
-
-
---
--- Name: saas_admins saas_admins_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_admins
- ADD CONSTRAINT saas_admins_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: saas_doc_votos saas_doc_votos_doc_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_doc_id_fkey FOREIGN KEY (doc_id) REFERENCES public.saas_docs(id) ON DELETE CASCADE;
-
-
---
--- Name: saas_doc_votos saas_doc_votos_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_doc_votos
- ADD CONSTRAINT saas_doc_votos_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: saas_faq_itens saas_faq_itens_doc_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.saas_faq_itens
- ADD CONSTRAINT saas_faq_itens_doc_id_fkey FOREIGN KEY (doc_id) REFERENCES public.saas_docs(id) ON DELETE CASCADE;
-
-
---
--- Name: services services_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.services
- ADD CONSTRAINT services_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: subscription_intents_personal sint_personal_subscription_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_personal
- ADD CONSTRAINT sint_personal_subscription_id_fkey FOREIGN KEY (subscription_id) REFERENCES public.subscriptions(id) ON DELETE SET NULL;
-
-
---
--- Name: subscription_intents_tenant sint_tenant_subscription_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_tenant
- ADD CONSTRAINT sint_tenant_subscription_id_fkey FOREIGN KEY (subscription_id) REFERENCES public.subscriptions(id) ON DELETE SET NULL;
-
-
---
--- Name: subscription_events subscription_events_subscription_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_events
- ADD CONSTRAINT subscription_events_subscription_id_fkey FOREIGN KEY (subscription_id) REFERENCES public.subscriptions(id) ON DELETE CASCADE;
-
-
---
--- Name: subscription_intents_personal subscription_intents_personal_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_personal
- ADD CONSTRAINT subscription_intents_personal_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE RESTRICT;
-
-
---
--- Name: subscription_intents_tenant subscription_intents_tenant_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_tenant
- ADD CONSTRAINT subscription_intents_tenant_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE RESTRICT;
-
-
---
--- Name: subscription_intents_legacy subscription_intents_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscription_intents_legacy
- ADD CONSTRAINT subscription_intents_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: subscriptions subscriptions_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscriptions
- ADD CONSTRAINT subscriptions_owner_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: subscriptions subscriptions_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.subscriptions
- ADD CONSTRAINT subscriptions_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE RESTRICT;
-
-
---
--- Name: support_sessions support_sessions_admin_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_admin_fk FOREIGN KEY (admin_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: support_sessions support_sessions_tenant_fk; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.support_sessions
- ADD CONSTRAINT support_sessions_tenant_fk FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_features tenant_features_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_features
- ADD CONSTRAINT tenant_features_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_invites tenant_invites_accepted_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_accepted_by_fkey FOREIGN KEY (accepted_by) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: tenant_invites tenant_invites_invited_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_invited_by_fkey FOREIGN KEY (invited_by) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: tenant_invites tenant_invites_revoked_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_revoked_by_fkey FOREIGN KEY (revoked_by) REFERENCES auth.users(id) ON DELETE SET NULL;
-
-
---
--- Name: tenant_invites tenant_invites_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_invites
- ADD CONSTRAINT tenant_invites_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_members tenant_members_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_members tenant_members_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_members
- ADD CONSTRAINT tenant_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_modules tenant_modules_module_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_module_id_fkey FOREIGN KEY (module_id) REFERENCES public.modules(id) ON DELETE CASCADE;
-
-
---
--- Name: tenant_modules tenant_modules_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.tenant_modules
- ADD CONSTRAINT tenant_modules_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: user_settings user_settings_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE ONLY public.user_settings
- ADD CONSTRAINT user_settings_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE;
-
-
---
--- Name: iceberg_namespaces iceberg_namespaces_catalog_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_namespaces
- ADD CONSTRAINT iceberg_namespaces_catalog_id_fkey FOREIGN KEY (catalog_id) REFERENCES storage.buckets_analytics(id) ON DELETE CASCADE;
-
-
---
--- Name: iceberg_tables iceberg_tables_catalog_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_tables
- ADD CONSTRAINT iceberg_tables_catalog_id_fkey FOREIGN KEY (catalog_id) REFERENCES storage.buckets_analytics(id) ON DELETE CASCADE;
-
-
---
--- Name: iceberg_tables iceberg_tables_namespace_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.iceberg_tables
- ADD CONSTRAINT iceberg_tables_namespace_id_fkey FOREIGN KEY (namespace_id) REFERENCES storage.iceberg_namespaces(id) ON DELETE CASCADE;
-
-
---
--- Name: objects objects_bucketId_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.objects
- ADD CONSTRAINT "objects_bucketId_fkey" FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id);
-
-
---
--- Name: s3_multipart_uploads s3_multipart_uploads_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads
- ADD CONSTRAINT s3_multipart_uploads_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id);
-
-
---
--- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads_parts
- ADD CONSTRAINT s3_multipart_uploads_parts_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id);
-
-
---
--- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_upload_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.s3_multipart_uploads_parts
- ADD CONSTRAINT s3_multipart_uploads_parts_upload_id_fkey FOREIGN KEY (upload_id) REFERENCES storage.s3_multipart_uploads(id) ON DELETE CASCADE;
-
-
---
--- Name: vector_indexes vector_indexes_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE ONLY storage.vector_indexes
- ADD CONSTRAINT vector_indexes_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets_vectors(id);
-
-
---
--- Name: audit_log_entries; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.audit_log_entries ENABLE ROW LEVEL SECURITY;
-
---
--- Name: flow_state; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.flow_state ENABLE ROW LEVEL SECURITY;
-
---
--- Name: identities; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.identities ENABLE ROW LEVEL SECURITY;
-
---
--- Name: instances; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.instances ENABLE ROW LEVEL SECURITY;
-
---
--- Name: mfa_amr_claims; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.mfa_amr_claims ENABLE ROW LEVEL SECURITY;
-
---
--- Name: mfa_challenges; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.mfa_challenges ENABLE ROW LEVEL SECURITY;
-
---
--- Name: mfa_factors; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.mfa_factors ENABLE ROW LEVEL SECURITY;
-
---
--- Name: one_time_tokens; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.one_time_tokens ENABLE ROW LEVEL SECURITY;
-
---
--- Name: refresh_tokens; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.refresh_tokens ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saml_providers; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.saml_providers ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saml_relay_states; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.saml_relay_states ENABLE ROW LEVEL SECURITY;
-
---
--- Name: schema_migrations; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.schema_migrations ENABLE ROW LEVEL SECURITY;
-
---
--- Name: sessions; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.sessions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: sso_domains; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.sso_domains ENABLE ROW LEVEL SECURITY;
-
---
--- Name: sso_providers; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.sso_providers ENABLE ROW LEVEL SECURITY;
-
---
--- Name: users; Type: ROW SECURITY; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER TABLE auth.users ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_bloqueios; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_bloqueios ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_configuracoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_configuracoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_configuracoes agenda_configuracoes_clinic_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_configuracoes_clinic_read ON public.agenda_configuracoes FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_clinic_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_configuracoes_clinic_write ON public.agenda_configuracoes USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_configuracoes agenda_configuracoes_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_configuracoes_owner ON public.agenda_configuracoes USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_eventos; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_eventos ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_eventos agenda_eventos_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_delete ON public.agenda_eventos FOR DELETE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.delete'::text)));
-
-
---
--- Name: agenda_eventos agenda_eventos_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_insert ON public.agenda_eventos FOR INSERT WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.create'::text)));
-
-
---
--- Name: agenda_eventos agenda_eventos_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_owner_all ON public.agenda_eventos TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_eventos agenda_eventos_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_select ON public.agenda_eventos FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_eventos agenda_eventos_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_eventos_update ON public.agenda_eventos FOR UPDATE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_excecoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_excecoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_excecoes agenda_excecoes_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_excecoes_owner ON public.agenda_excecoes USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_excecoes agenda_excecoes_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_excecoes_select ON public.agenda_excecoes FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_excecoes agenda_excecoes_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_excecoes_write ON public.agenda_excecoes USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_online_slots; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_online_slots ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_online_slots agenda_online_slots_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_online_slots_owner ON public.agenda_online_slots USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_online_slots agenda_online_slots_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_online_slots_select ON public.agenda_online_slots FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_online_slots agenda_online_slots_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_online_slots_write ON public.agenda_online_slots USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_regras_semanais; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_regras_semanais ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_regras_semanais_owner ON public.agenda_regras_semanais USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_regras_semanais_select ON public.agenda_regras_semanais FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_regras_semanais agenda_regras_semanais_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_regras_semanais_write ON public.agenda_regras_semanais USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_slots_bloqueados_semanais; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_slots_bloqueados_semanais ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_bloqueados_semanais_select ON public.agenda_slots_bloqueados_semanais FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_slots_bloqueados_semanais agenda_slots_bloqueados_semanais_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_bloqueados_semanais_write ON public.agenda_slots_bloqueados_semanais USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agenda_slots_regras; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agenda_slots_regras ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_slots_regras agenda_slots_regras_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_regras_select ON public.agenda_slots_regras FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: agenda_slots_regras agenda_slots_regras_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agenda_slots_regras_write ON public.agenda_slots_regras USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: agendador_configuracoes agendador_cfg_public_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_cfg_public_read ON public.agendador_configuracoes FOR SELECT TO anon USING (((ativo = true) AND (link_slug IS NOT NULL)));
-
-
---
--- Name: agendador_configuracoes agendador_cfg_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_cfg_select ON public.agendador_configuracoes FOR SELECT USING ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_configuracoes agendador_cfg_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_cfg_write ON public.agendador_configuracoes USING ((auth.uid() = owner_id)) WITH CHECK ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_configuracoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agendador_configuracoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agendador_solicitacoes agendador_sol_owner_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_owner_select ON public.agendador_solicitacoes FOR SELECT USING ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_solicitacoes agendador_sol_owner_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_owner_write ON public.agendador_solicitacoes USING ((auth.uid() = owner_id)) WITH CHECK ((auth.uid() = owner_id));
-
-
---
--- Name: agendador_solicitacoes agendador_sol_patient_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_patient_read ON public.agendador_solicitacoes FOR SELECT TO authenticated USING (((auth.uid() = user_id) OR (auth.uid() = owner_id)));
-
-
---
--- Name: agendador_solicitacoes agendador_sol_public_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY agendador_sol_public_insert ON public.agendador_solicitacoes FOR INSERT TO anon WITH CHECK (true);
-
-
---
--- Name: agendador_solicitacoes; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.agendador_solicitacoes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: billing_contracts; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.billing_contracts ENABLE ROW LEVEL SECURITY;
-
---
--- Name: billing_contracts billing_contracts: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "billing_contracts: owner full access" ON public.billing_contracts USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_delete ON public.agenda_bloqueios FOR DELETE TO authenticated USING ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_insert ON public.agenda_bloqueios FOR INSERT TO authenticated WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_select_clinic; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_select_clinic ON public.agenda_bloqueios FOR SELECT TO authenticated USING ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE ((tenant_members.user_id = auth.uid()) AND (tenant_members.role = ANY (ARRAY['admin'::text, 'clinic_admin'::text, 'tenant_admin'::text, 'secretary'::text]))))));
-
-
---
--- Name: agenda_bloqueios bloqueios_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_select_own ON public.agenda_bloqueios FOR SELECT TO authenticated USING ((owner_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios bloqueios_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY bloqueios_update ON public.agenda_bloqueios FOR UPDATE TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: saas_docs clinic_admin_read_all_docs; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY clinic_admin_read_all_docs ON public.saas_docs FOR SELECT TO authenticated USING (((ativo = true) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = ANY (ARRAY['clinic_admin'::text, 'tenant_admin'::text])))))));
-
-
---
--- Name: commitment_services; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.commitment_services ENABLE ROW LEVEL SECURITY;
-
---
--- Name: commitment_services commitment_services: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "commitment_services: owner full access" ON public.commitment_services USING ((EXISTS ( SELECT 1
- FROM public.services s
- WHERE ((s.id = commitment_services.service_id) AND (s.owner_id = auth.uid()))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.services s
- WHERE ((s.id = commitment_services.service_id) AND (s.owner_id = auth.uid())))));
-
-
---
--- Name: commitment_time_logs; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.commitment_time_logs ENABLE ROW LEVEL SECURITY;
-
---
--- Name: commitment_time_logs ctl_delete_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_delete_for_active_member ON public.commitment_time_logs FOR DELETE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: commitment_time_logs ctl_insert_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_insert_for_active_member ON public.commitment_time_logs FOR INSERT TO authenticated WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: commitment_time_logs ctl_select_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_select_for_active_member ON public.commitment_time_logs FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: commitment_time_logs ctl_update_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ctl_update_for_active_member ON public.commitment_time_logs FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = commitment_time_logs.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitments dc_delete_custom_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_delete_custom_for_active_member ON public.determined_commitments FOR DELETE TO authenticated USING (((is_native = false) AND (EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))));
-
-
---
--- Name: determined_commitments dc_insert_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_insert_for_active_member ON public.determined_commitments FOR INSERT TO authenticated WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitments dc_select_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_select_for_active_member ON public.determined_commitments FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitments dc_update_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dc_update_for_active_member ON public.determined_commitments FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitments.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_delete_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_delete_for_active_member ON public.determined_commitment_fields FOR DELETE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_insert_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_insert_for_active_member ON public.determined_commitment_fields FOR INSERT TO authenticated WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_select_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_select_for_active_member ON public.determined_commitment_fields FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: determined_commitment_fields dcf_update_for_active_member; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dcf_update_for_active_member ON public.determined_commitment_fields FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = determined_commitment_fields.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text)))));
-
-
---
--- Name: agenda_bloqueios delete own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "delete own" ON public.agenda_bloqueios FOR DELETE USING ((owner_id = auth.uid()));
-
-
---
--- Name: determined_commitment_fields; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.determined_commitment_fields ENABLE ROW LEVEL SECURITY;
-
---
--- Name: determined_commitments; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.determined_commitments ENABLE ROW LEVEL SECURITY;
-
---
--- Name: dev_user_credentials dev_creds_select_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dev_creds_select_saas_admin ON public.dev_user_credentials FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles p
- WHERE ((p.id = auth.uid()) AND (p.role = 'saas_admin'::text)))));
-
-
---
--- Name: dev_user_credentials dev_creds_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY dev_creds_write_saas_admin ON public.dev_user_credentials TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles p
- WHERE ((p.id = auth.uid()) AND (p.role = 'saas_admin'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.profiles p
- WHERE ((p.id = auth.uid()) AND (p.role = 'saas_admin'::text)))));
-
-
---
--- Name: dev_user_credentials; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.dev_user_credentials ENABLE ROW LEVEL SECURITY;
-
---
--- Name: entitlements_invalidation ent_inv_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ent_inv_select_own ON public.entitlements_invalidation FOR SELECT USING (((owner_id = auth.uid()) OR public.is_saas_admin()));
-
-
---
--- Name: entitlements_invalidation ent_inv_update_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ent_inv_update_saas ON public.entitlements_invalidation FOR UPDATE USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: entitlements_invalidation ent_inv_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY ent_inv_write_saas ON public.entitlements_invalidation FOR INSERT WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: entitlements_invalidation; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.entitlements_invalidation ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_faq faq_admin_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_admin_write ON public.saas_faq TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = ANY (ARRAY['saas_admin'::text, 'tenant_admin'::text, 'clinic_admin'::text]))))));
-
-
---
--- Name: saas_faq faq_auth_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_auth_read ON public.saas_faq FOR SELECT TO authenticated USING ((ativo = true));
-
-
---
--- Name: saas_faq_itens faq_itens_admin_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_itens_admin_write ON public.saas_faq_itens TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = ANY (ARRAY['saas_admin'::text, 'tenant_admin'::text, 'clinic_admin'::text]))))));
-
-
---
--- Name: saas_faq_itens faq_itens_auth_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_itens_auth_read ON public.saas_faq_itens FOR SELECT TO authenticated USING (((ativo = true) AND (EXISTS ( SELECT 1
- FROM public.saas_docs d
- WHERE ((d.id = saas_faq_itens.doc_id) AND (d.ativo = true))))));
-
-
---
--- Name: saas_faq faq_public_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY faq_public_read ON public.saas_faq FOR SELECT USING (((publico = true) AND (ativo = true)));
-
-
---
--- Name: features; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.features ENABLE ROW LEVEL SECURITY;
-
---
--- Name: features features_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY features_read_authenticated ON public.features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: features features_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY features_write_saas_admin ON public.features TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: feriados; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.feriados ENABLE ROW LEVEL SECURITY;
-
---
--- Name: feriados feriados_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_delete ON public.feriados FOR DELETE USING ((owner_id = auth.uid()));
-
-
---
--- Name: feriados feriados_global_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_global_select ON public.feriados FOR SELECT USING ((tenant_id IS NULL));
-
-
---
--- Name: feriados feriados_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_insert ON public.feriados FOR INSERT WITH CHECK ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_saas_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_saas_delete ON public.feriados FOR DELETE USING ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_saas_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_saas_insert ON public.feriados FOR INSERT WITH CHECK ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_saas_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_saas_select ON public.feriados FOR SELECT USING ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: feriados feriados_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY feriados_select ON public.feriados FOR SELECT USING ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid()))));
-
-
---
--- Name: financial_exceptions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.financial_exceptions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: financial_exceptions financial_exceptions: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "financial_exceptions: owner full access" ON public.financial_exceptions USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: financial_exceptions financial_exceptions: tenant members read clinic rules; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "financial_exceptions: tenant members read clinic rules" ON public.financial_exceptions FOR SELECT USING (((owner_id IS NULL) AND (EXISTS ( SELECT 1
- FROM public.owner_users ou
- WHERE ((ou.owner_id = financial_exceptions.tenant_id) AND (ou.user_id = auth.uid()))))));
-
-
---
--- Name: agenda_bloqueios insert own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "insert own" ON public.agenda_bloqueios FOR INSERT WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: insurance_plan_services; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.insurance_plan_services ENABLE ROW LEVEL SECURITY;
-
---
--- Name: insurance_plan_services insurance_plan_services_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY insurance_plan_services_owner ON public.insurance_plan_services USING ((EXISTS ( SELECT 1
- FROM public.insurance_plans ip
- WHERE ((ip.id = insurance_plan_services.insurance_plan_id) AND (ip.owner_id = auth.uid()))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.insurance_plans ip
- WHERE ((ip.id = insurance_plan_services.insurance_plan_id) AND (ip.owner_id = auth.uid())))));
-
-
---
--- Name: insurance_plans; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.insurance_plans ENABLE ROW LEVEL SECURITY;
-
---
--- Name: insurance_plans insurance_plans: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "insurance_plans: owner full access" ON public.insurance_plans USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: module_features; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.module_features ENABLE ROW LEVEL SECURITY;
-
---
--- Name: module_features module_features_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY module_features_read_authenticated ON public.module_features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: module_features module_features_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY module_features_write_saas_admin ON public.module_features TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: modules; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.modules ENABLE ROW LEVEL SECURITY;
-
---
--- Name: modules modules_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY modules_read_authenticated ON public.modules FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: modules modules_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY modules_write_saas_admin ON public.modules TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: owner_users; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.owner_users ENABLE ROW LEVEL SECURITY;
-
---
--- Name: owner_users owner_users: user can read own links; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "owner_users: user can read own links" ON public.owner_users FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: patient_discounts; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_discounts ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_discounts patient_discounts: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "patient_discounts: owner full access" ON public.patient_discounts USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_group_patient; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_group_patient ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_group_patient patient_group_patient_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_group_patient_owner_all ON public.patient_group_patient TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.patients p
- WHERE ((p.id = patient_group_patient.patient_id) AND (p.owner_id = auth.uid()))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.patients p
- WHERE ((p.id = patient_group_patient.patient_id) AND (p.owner_id = auth.uid())))));
-
-
---
--- Name: patient_group_patient patient_group_patient_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_group_patient_select ON public.patient_group_patient FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_group_patient patient_group_patient_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_group_patient_write ON public.patient_group_patient USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_groups; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_groups ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_groups patient_groups_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_groups_owner_all ON public.patient_groups TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_groups patient_groups_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_groups_select ON public.patient_groups FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_groups patient_groups_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_groups_write ON public.patient_groups USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_intake_requests; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_intake_requests ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_intake_requests patient_intake_requests_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_intake_requests_owner_all ON public.patient_intake_requests TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_intake_requests patient_intake_requests_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_intake_requests_select ON public.patient_intake_requests FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_intake_requests patient_intake_requests_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_intake_requests_write ON public.patient_intake_requests USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_invites; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_invites ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_invites patient_invites_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_invites_owner_all ON public.patient_invites TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_invites patient_invites_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_invites_select ON public.patient_invites FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_invites patient_invites_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_invites_write ON public.patient_invites USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_patient_tag; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_patient_tag ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_patient_tag patient_patient_tag_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_patient_tag_owner_all ON public.patient_patient_tag TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_patient_tag patient_patient_tag_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_patient_tag_select ON public.patient_patient_tag FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_patient_tag patient_patient_tag_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_patient_tag_write ON public.patient_patient_tag USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patient_tags; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patient_tags ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patient_tags patient_tags_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_tags_owner_all ON public.patient_tags TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patient_tags patient_tags_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_tags_select ON public.patient_tags FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patient_tags patient_tags_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patient_tags_write ON public.patient_tags USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: patients; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.patients ENABLE ROW LEVEL SECURITY;
-
---
--- Name: patients patients_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_delete ON public.patients FOR DELETE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.delete'::text)));
-
-
---
--- Name: patients patients_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_insert ON public.patients FOR INSERT WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.create'::text)));
-
-
---
--- Name: patients patients_owner_all; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_owner_all ON public.patients TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: patients patients_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_select ON public.patients FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.view'::text)));
-
-
---
--- Name: patients patients_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY patients_update ON public.patients FOR UPDATE USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'patients.edit'::text)));
-
-
---
--- Name: payment_settings; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.payment_settings ENABLE ROW LEVEL SECURITY;
-
---
--- Name: payment_settings payment_settings: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "payment_settings: owner full access" ON public.payment_settings USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: plan_features; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.plan_features ENABLE ROW LEVEL SECURITY;
-
---
--- Name: plan_features plan_features_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plan_features_read_authenticated ON public.plan_features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plan_features plan_features_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plan_features_write_saas_admin ON public.plan_features TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: plans; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.plans ENABLE ROW LEVEL SECURITY;
-
---
--- Name: plans plans_read_authenticated; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plans_read_authenticated ON public.plans FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plans plans_write_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY plans_write_saas_admin ON public.plans TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: professional_pricing; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.professional_pricing ENABLE ROW LEVEL SECURITY;
-
---
--- Name: professional_pricing professional_pricing: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "professional_pricing: owner full access" ON public.professional_pricing USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: profiles; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;
-
---
--- Name: profiles profiles_insert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_insert_own ON public.profiles FOR INSERT WITH CHECK ((id = auth.uid()));
-
-
---
--- Name: profiles profiles_read_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_read_saas_admin ON public.profiles FOR SELECT USING (public.is_saas_admin());
-
-
---
--- Name: profiles profiles_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_select_own ON public.profiles FOR SELECT USING ((id = auth.uid()));
-
-
---
--- Name: profiles profiles_update_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY profiles_update_own ON public.profiles FOR UPDATE USING ((id = auth.uid())) WITH CHECK ((id = auth.uid()));
-
-
---
--- Name: features read features (auth); Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "read features (auth)" ON public.features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plan_features read plan_features (auth); Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "read plan_features (auth)" ON public.plan_features FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: plans read plans (auth); Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "read plans (auth)" ON public.plans FOR SELECT TO authenticated USING (true);
-
-
---
--- Name: recurrence_exceptions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.recurrence_exceptions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: recurrence_exceptions recurrence_exceptions_tenant; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_exceptions_tenant ON public.recurrence_exceptions TO authenticated USING ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid())))) WITH CHECK ((tenant_id IN ( SELECT tenant_members.tenant_id
- FROM public.tenant_members
- WHERE (tenant_members.user_id = auth.uid()))));
-
-
---
--- Name: recurrence_rule_services; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.recurrence_rule_services ENABLE ROW LEVEL SECURITY;
-
---
--- Name: recurrence_rule_services recurrence_rule_services: clinic read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "recurrence_rule_services: clinic read" ON public.recurrence_rule_services FOR SELECT USING ((EXISTS ( SELECT 1
- FROM public.recurrence_rules r
- WHERE ((r.id = recurrence_rule_services.rule_id) AND public.is_clinic_tenant(r.tenant_id) AND public.is_tenant_member(r.tenant_id) AND public.tenant_has_feature(r.tenant_id, 'agenda.view'::text)))));
-
-
---
--- Name: recurrence_rule_services recurrence_rule_services: clinic write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "recurrence_rule_services: clinic write" ON public.recurrence_rule_services USING ((EXISTS ( SELECT 1
- FROM public.recurrence_rules r
- WHERE ((r.id = recurrence_rule_services.rule_id) AND public.is_clinic_tenant(r.tenant_id) AND public.is_tenant_member(r.tenant_id) AND public.tenant_has_feature(r.tenant_id, 'agenda.edit'::text))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.recurrence_rules r
- WHERE ((r.id = recurrence_rule_services.rule_id) AND public.is_clinic_tenant(r.tenant_id) AND public.is_tenant_member(r.tenant_id) AND public.tenant_has_feature(r.tenant_id, 'agenda.edit'::text)))));
-
-
---
--- Name: recurrence_rule_services recurrence_rule_services: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "recurrence_rule_services: owner full access" ON public.recurrence_rule_services TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.recurrence_rules r
- WHERE ((r.id = recurrence_rule_services.rule_id) AND (r.owner_id = auth.uid()))))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.recurrence_rules r
- WHERE ((r.id = recurrence_rule_services.rule_id) AND (r.owner_id = auth.uid())))));
-
-
---
--- Name: recurrence_rules; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.recurrence_rules ENABLE ROW LEVEL SECURITY;
-
---
--- Name: recurrence_rules recurrence_rules_clinic_read; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_rules_clinic_read ON public.recurrence_rules FOR SELECT USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.view'::text)));
-
-
---
--- Name: recurrence_rules recurrence_rules_clinic_write; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_rules_clinic_write ON public.recurrence_rules USING ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text))) WITH CHECK ((public.is_clinic_tenant(tenant_id) AND public.is_tenant_member(tenant_id) AND public.tenant_has_feature(tenant_id, 'agenda.edit'::text)));
-
-
---
--- Name: recurrence_rules recurrence_rules_owner; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY recurrence_rules_owner ON public.recurrence_rules TO authenticated USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: subscription_intents_legacy saas_admin can read subscription_intents; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "saas_admin can read subscription_intents" ON public.subscription_intents_legacy FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.saas_admins a
- WHERE (a.user_id = auth.uid()))));
-
-
---
--- Name: subscription_intents_legacy saas_admin can update subscription_intents; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "saas_admin can update subscription_intents" ON public.subscription_intents_legacy FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.saas_admins a
- WHERE (a.user_id = auth.uid())))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.saas_admins a
- WHERE (a.user_id = auth.uid()))));
-
-
---
--- Name: saas_docs saas_admin_full_access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY saas_admin_full_access ON public.saas_docs TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid())))) WITH CHECK ((EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid()))));
-
-
---
--- Name: saas_admins; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_admins ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_admins saas_admins_select_self; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY saas_admins_select_self ON public.saas_admins FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: saas_doc_votos; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_doc_votos ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_docs; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_docs ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_faq; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_faq ENABLE ROW LEVEL SECURITY;
-
---
--- Name: saas_faq_itens; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.saas_faq_itens ENABLE ROW LEVEL SECURITY;
-
---
--- Name: agenda_bloqueios select own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "select own" ON public.agenda_bloqueios FOR SELECT USING ((owner_id = auth.uid()));
-
-
---
--- Name: services; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.services ENABLE ROW LEVEL SECURITY;
-
---
--- Name: services services: owner full access; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "services: owner full access" ON public.services USING ((owner_id = auth.uid())) WITH CHECK ((owner_id = auth.uid()));
-
-
---
--- Name: subscription_events; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.subscription_events ENABLE ROW LEVEL SECURITY;
-
---
--- Name: subscription_events subscription_events_read_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_events_read_saas ON public.subscription_events FOR SELECT USING (public.is_saas_admin());
-
-
---
--- Name: subscription_events subscription_events_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_events_write_saas ON public.subscription_events FOR INSERT WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: subscription_intents_legacy subscription_intents_insert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_intents_insert_own ON public.subscription_intents_legacy FOR INSERT TO authenticated WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: subscription_intents_legacy; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.subscription_intents_legacy ENABLE ROW LEVEL SECURITY;
-
---
--- Name: subscription_intents_legacy subscription_intents_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscription_intents_select_own ON public.subscription_intents_legacy FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: subscriptions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.subscriptions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: subscriptions subscriptions read own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "subscriptions read own" ON public.subscriptions FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: subscriptions subscriptions: read if linked owner_users; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "subscriptions: read if linked owner_users" ON public.subscriptions FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1
- FROM public.owner_users ou
- WHERE ((ou.owner_id = subscriptions.user_id) AND (ou.user_id = auth.uid())))));
-
-
---
--- Name: subscriptions subscriptions_insert_own_personal; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_insert_own_personal ON public.subscriptions FOR INSERT TO authenticated WITH CHECK (((user_id = auth.uid()) AND (tenant_id IS NULL)));
-
-
---
--- Name: subscriptions subscriptions_no_direct_update; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_no_direct_update ON public.subscriptions FOR UPDATE TO authenticated USING (false) WITH CHECK (false);
-
-
---
--- Name: subscriptions subscriptions_read_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_read_own ON public.subscriptions FOR SELECT TO authenticated USING (((user_id = auth.uid()) OR public.is_saas_admin()));
-
-
---
--- Name: subscriptions subscriptions_select_for_tenant_members; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_select_for_tenant_members ON public.subscriptions FOR SELECT TO authenticated USING (((tenant_id IS NOT NULL) AND (EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = subscriptions.tenant_id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))));
-
-
---
--- Name: subscriptions subscriptions_select_own_personal; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_select_own_personal ON public.subscriptions FOR SELECT TO authenticated USING (((user_id = auth.uid()) AND (tenant_id IS NULL)));
-
-
---
--- Name: subscriptions subscriptions_update_only_saas_admin; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY subscriptions_update_only_saas_admin ON public.subscriptions FOR UPDATE TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: support_sessions; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.support_sessions ENABLE ROW LEVEL SECURITY;
-
---
--- Name: support_sessions support_sessions_saas_delete; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY support_sessions_saas_delete ON public.support_sessions FOR DELETE USING (((auth.uid() = admin_id) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = 'saas_admin'::text))))));
-
-
---
--- Name: support_sessions support_sessions_saas_insert; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY support_sessions_saas_insert ON public.support_sessions FOR INSERT WITH CHECK (((auth.uid() = admin_id) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = 'saas_admin'::text))))));
-
-
---
--- Name: support_sessions support_sessions_saas_select; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY support_sessions_saas_select ON public.support_sessions FOR SELECT USING (((auth.uid() = admin_id) AND (EXISTS ( SELECT 1
- FROM public.profiles
- WHERE ((profiles.id = auth.uid()) AND (profiles.role = 'saas_admin'::text))))));
-
-
---
--- Name: tenant_members; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.tenant_members ENABLE ROW LEVEL SECURITY;
-
---
--- Name: tenant_members tenant_members_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenant_members_write_saas ON public.tenant_members TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: tenant_modules; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.tenant_modules ENABLE ROW LEVEL SECURITY;
-
---
--- Name: tenant_modules tenant_modules_read_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenant_modules_read_own ON public.tenant_modules FOR SELECT TO authenticated USING (((owner_id = auth.uid()) OR public.is_saas_admin()));
-
-
---
--- Name: tenant_modules tenant_modules_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenant_modules_write_saas ON public.tenant_modules TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: tenants; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.tenants ENABLE ROW LEVEL SECURITY;
-
---
--- Name: tenants tenants_read_members; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenants_read_members ON public.tenants FOR SELECT TO authenticated USING ((public.is_saas_admin() OR (EXISTS ( SELECT 1
- FROM public.tenant_members tm
- WHERE ((tm.tenant_id = tenants.id) AND (tm.user_id = auth.uid()) AND (tm.status = 'active'::text))))));
-
-
---
--- Name: tenants tenants_write_saas; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tenants_write_saas ON public.tenants TO authenticated USING (public.is_saas_admin()) WITH CHECK (public.is_saas_admin());
-
-
---
--- Name: tenant_members tm_select_admin_all_members; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tm_select_admin_all_members ON public.tenant_members FOR SELECT TO authenticated USING (public.is_tenant_admin(tenant_id));
-
-
---
--- Name: tenant_members tm_select_own_membership; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY tm_select_own_membership ON public.tenant_members FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: agenda_bloqueios update own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY "update own" ON public.agenda_bloqueios FOR UPDATE USING ((owner_id = auth.uid()));
-
-
---
--- Name: user_settings; Type: ROW SECURITY; Schema: public; Owner: supabase_admin
---
-
-ALTER TABLE public.user_settings ENABLE ROW LEVEL SECURITY;
-
---
--- Name: user_settings user_settings_insert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY user_settings_insert_own ON public.user_settings FOR INSERT WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: user_settings user_settings_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY user_settings_select_own ON public.user_settings FOR SELECT USING ((user_id = auth.uid()));
-
-
---
--- Name: user_settings user_settings_update_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY user_settings_update_own ON public.user_settings FOR UPDATE USING ((user_id = auth.uid())) WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: saas_docs users_read_usuario_docs; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY users_read_usuario_docs ON public.saas_docs FOR SELECT TO authenticated USING (((ativo = true) AND (tipo_acesso = 'usuario'::text)));
-
-
---
--- Name: saas_doc_votos votos_select_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY votos_select_own ON public.saas_doc_votos FOR SELECT TO authenticated USING ((user_id = auth.uid()));
-
-
---
--- Name: saas_doc_votos votos_upsert_own; Type: POLICY; Schema: public; Owner: supabase_admin
---
-
-CREATE POLICY votos_upsert_own ON public.saas_doc_votos TO authenticated USING ((user_id = auth.uid())) WITH CHECK ((user_id = auth.uid()));
-
-
---
--- Name: messages; Type: ROW SECURITY; Schema: realtime; Owner: supabase_realtime_admin
---
-
-ALTER TABLE realtime.messages ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects agendador_storage_owner_delete; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_owner_delete ON storage.objects FOR DELETE TO authenticated USING (((bucket_id = 'agendador'::text) AND ((storage.foldername(name))[1] = (auth.uid())::text)));
-
-
---
--- Name: objects agendador_storage_owner_insert; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_owner_insert ON storage.objects FOR INSERT TO authenticated WITH CHECK (((bucket_id = 'agendador'::text) AND ((storage.foldername(name))[1] = (auth.uid())::text)));
-
-
---
--- Name: objects agendador_storage_owner_update; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_owner_update ON storage.objects FOR UPDATE TO authenticated USING (((bucket_id = 'agendador'::text) AND ((storage.foldername(name))[1] = (auth.uid())::text)));
-
-
---
--- Name: objects agendador_storage_public_read; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY agendador_storage_public_read ON storage.objects FOR SELECT USING ((bucket_id = 'agendador'::text));
-
-
---
--- Name: objects avatars_delete_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_delete_own ON storage.objects FOR DELETE TO authenticated USING (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_delete_own_folder; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_delete_own_folder ON storage.objects FOR DELETE USING (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text))));
-
-
---
--- Name: objects avatars_insert_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_insert_own ON storage.objects FOR INSERT TO authenticated WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_insert_own_folder; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_insert_own_folder ON storage.objects FOR INSERT WITH CHECK (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text))));
-
-
---
--- Name: objects avatars_read; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_read ON storage.objects FOR SELECT USING ((bucket_id = 'avatars'::text));
-
-
---
--- Name: objects avatars_select_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_select_own ON storage.objects FOR SELECT TO authenticated USING (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_update_own; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_update_own ON storage.objects FOR UPDATE TO authenticated USING (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text)))) WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ ((auth.uid())::text || '/%'::text))));
-
-
---
--- Name: objects avatars_update_own_folder; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY avatars_update_own_folder ON storage.objects FOR UPDATE USING (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text)))) WITH CHECK (((bucket_id = 'avatars'::text) AND (auth.role() = 'authenticated'::text) AND (name ~~ (('owners/'::text || auth.uid()) || '/%'::text))));
-
-
---
--- Name: buckets; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.buckets ENABLE ROW LEVEL SECURITY;
-
---
--- Name: buckets_analytics; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.buckets_analytics ENABLE ROW LEVEL SECURITY;
-
---
--- Name: buckets_vectors; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.buckets_vectors ENABLE ROW LEVEL SECURITY;
-
---
--- Name: iceberg_namespaces; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.iceberg_namespaces ENABLE ROW LEVEL SECURITY;
-
---
--- Name: iceberg_tables; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.iceberg_tables ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects intake_read_anon; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_read_anon ON storage.objects FOR SELECT TO anon USING (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: objects intake_read_public; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_read_public ON storage.objects FOR SELECT USING (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: objects intake_upload_anon; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_upload_anon ON storage.objects FOR INSERT TO anon WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: objects intake_upload_public; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY intake_upload_public ON storage.objects FOR INSERT WITH CHECK (((bucket_id = 'avatars'::text) AND (name ~~ 'intakes/%'::text)));
-
-
---
--- Name: migrations; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.migrations ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.objects ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects public_read; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY public_read ON storage.objects FOR SELECT USING ((bucket_id = 'saas-docs'::text));
-
-
---
--- Name: s3_multipart_uploads; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.s3_multipart_uploads ENABLE ROW LEVEL SECURITY;
-
---
--- Name: s3_multipart_uploads_parts; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.s3_multipart_uploads_parts ENABLE ROW LEVEL SECURITY;
-
---
--- Name: objects saas_admin_delete; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY saas_admin_delete ON storage.objects FOR DELETE TO authenticated USING (((bucket_id = 'saas-docs'::text) AND (EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid())))));
-
-
---
--- Name: objects saas_admin_upload; Type: POLICY; Schema: storage; Owner: supabase_storage_admin
---
-
-CREATE POLICY saas_admin_upload ON storage.objects FOR INSERT TO authenticated WITH CHECK (((bucket_id = 'saas-docs'::text) AND (EXISTS ( SELECT 1
- FROM public.saas_admins
- WHERE (saas_admins.user_id = auth.uid())))));
-
-
---
--- Name: vector_indexes; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin
---
-
-ALTER TABLE storage.vector_indexes ENABLE ROW LEVEL SECURITY;
-
---
--- Name: supabase_realtime; Type: PUBLICATION; Schema: -; Owner: postgres
---
-
-CREATE PUBLICATION supabase_realtime WITH (publish = 'insert, update, delete, truncate');
-
-
-ALTER PUBLICATION supabase_realtime OWNER TO postgres;
-
---
--- Name: SCHEMA auth; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA auth TO anon;
-GRANT USAGE ON SCHEMA auth TO authenticated;
-GRANT USAGE ON SCHEMA auth TO service_role;
-GRANT ALL ON SCHEMA auth TO supabase_auth_admin;
-GRANT ALL ON SCHEMA auth TO dashboard_user;
-GRANT USAGE ON SCHEMA auth TO postgres;
-
-
---
--- Name: SCHEMA extensions; Type: ACL; Schema: -; Owner: postgres
---
-
-GRANT USAGE ON SCHEMA extensions TO anon;
-GRANT USAGE ON SCHEMA extensions TO authenticated;
-GRANT USAGE ON SCHEMA extensions TO service_role;
-GRANT ALL ON SCHEMA extensions TO dashboard_user;
-
-
---
--- Name: SCHEMA net; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA net TO supabase_functions_admin;
-GRANT USAGE ON SCHEMA net TO postgres;
-GRANT USAGE ON SCHEMA net TO anon;
-GRANT USAGE ON SCHEMA net TO authenticated;
-GRANT USAGE ON SCHEMA net TO service_role;
-
-
---
--- Name: SCHEMA public; Type: ACL; Schema: -; Owner: pg_database_owner
---
-
-GRANT USAGE ON SCHEMA public TO postgres;
-GRANT USAGE ON SCHEMA public TO anon;
-GRANT USAGE ON SCHEMA public TO authenticated;
-GRANT USAGE ON SCHEMA public TO service_role;
-
-
---
--- Name: SCHEMA realtime; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA realtime TO postgres;
-GRANT USAGE ON SCHEMA realtime TO anon;
-GRANT USAGE ON SCHEMA realtime TO authenticated;
-GRANT USAGE ON SCHEMA realtime TO service_role;
-GRANT ALL ON SCHEMA realtime TO supabase_realtime_admin;
-
-
---
--- Name: SCHEMA storage; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA storage TO postgres WITH GRANT OPTION;
-GRANT USAGE ON SCHEMA storage TO anon;
-GRANT USAGE ON SCHEMA storage TO authenticated;
-GRANT USAGE ON SCHEMA storage TO service_role;
-GRANT ALL ON SCHEMA storage TO supabase_storage_admin WITH GRANT OPTION;
-GRANT ALL ON SCHEMA storage TO dashboard_user;
-
-
---
--- Name: SCHEMA supabase_functions; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA supabase_functions TO postgres;
-GRANT USAGE ON SCHEMA supabase_functions TO anon;
-GRANT USAGE ON SCHEMA supabase_functions TO authenticated;
-GRANT USAGE ON SCHEMA supabase_functions TO service_role;
-GRANT ALL ON SCHEMA supabase_functions TO supabase_functions_admin;
-
-
---
--- Name: SCHEMA vault; Type: ACL; Schema: -; Owner: supabase_admin
---
-
-GRANT USAGE ON SCHEMA vault TO postgres WITH GRANT OPTION;
-GRANT USAGE ON SCHEMA vault TO service_role;
-
-
---
--- Name: FUNCTION citextin(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextin(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.citextin(cstring) TO anon;
-GRANT ALL ON FUNCTION public.citextin(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.citextin(cstring) TO service_role;
-
-
---
--- Name: FUNCTION citextout(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citextout(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citextrecv(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO postgres;
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO anon;
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.citextrecv(internal) TO service_role;
-
-
---
--- Name: FUNCTION citextsend(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citextsend(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey16_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey16_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey16_out(public.gbtreekey16); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey16_out(public.gbtreekey16) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey2_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey2_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey2_out(public.gbtreekey2); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey2_out(public.gbtreekey2) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey32_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey32_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey32_out(public.gbtreekey32); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey32_out(public.gbtreekey32) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey4_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey4_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey4_out(public.gbtreekey4); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey4_out(public.gbtreekey4) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey8_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey8_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey8_out(public.gbtreekey8); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey8_out(public.gbtreekey8) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey_var_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey_var_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gbtreekey_var_out(public.gbtreekey_var); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO postgres;
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO anon;
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO authenticated;
-GRANT ALL ON FUNCTION public.gbtreekey_var_out(public.gbtreekey_var) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_in(cstring); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_in(cstring) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_out(public.gtrgm); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_out(public.gtrgm) TO service_role;
-
-
---
--- Name: FUNCTION citext(boolean); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext(boolean) TO postgres;
-GRANT ALL ON FUNCTION public.citext(boolean) TO anon;
-GRANT ALL ON FUNCTION public.citext(boolean) TO authenticated;
-GRANT ALL ON FUNCTION public.citext(boolean) TO service_role;
-
-
---
--- Name: FUNCTION citext(character); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext(character) TO postgres;
-GRANT ALL ON FUNCTION public.citext(character) TO anon;
-GRANT ALL ON FUNCTION public.citext(character) TO authenticated;
-GRANT ALL ON FUNCTION public.citext(character) TO service_role;
-
-
---
--- Name: FUNCTION citext(inet); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext(inet) TO postgres;
-GRANT ALL ON FUNCTION public.citext(inet) TO anon;
-GRANT ALL ON FUNCTION public.citext(inet) TO authenticated;
-GRANT ALL ON FUNCTION public.citext(inet) TO service_role;
-
-
---
--- Name: FUNCTION email(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.email() TO dashboard_user;
-
-
---
--- Name: FUNCTION jwt(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.jwt() TO postgres;
-GRANT ALL ON FUNCTION auth.jwt() TO dashboard_user;
-
-
---
--- Name: FUNCTION role(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.role() TO dashboard_user;
-
-
---
--- Name: FUNCTION uid(); Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON FUNCTION auth.uid() TO dashboard_user;
-
-
---
--- Name: FUNCTION armor(bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.armor(bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.armor(bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION armor(bytea, text[], text[]); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.armor(bytea, text[], text[]) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.armor(bytea, text[], text[]) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION crypt(text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.crypt(text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.crypt(text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION dearmor(text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.dearmor(text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.dearmor(text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION decrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.decrypt(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.decrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION decrypt_iv(bytea, bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.decrypt_iv(bytea, bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.decrypt_iv(bytea, bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION digest(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.digest(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.digest(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION digest(text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.digest(text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.digest(text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION encrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.encrypt(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.encrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION encrypt_iv(bytea, bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.encrypt_iv(bytea, bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.encrypt_iv(bytea, bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_random_bytes(integer); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_random_bytes(integer) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_random_bytes(integer) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_random_uuid(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_random_uuid() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_random_uuid() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_salt(text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_salt(text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_salt(text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION gen_salt(text, integer); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.gen_salt(text, integer) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.gen_salt(text, integer) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION grant_pg_cron_access(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION extensions.grant_pg_cron_access() FROM supabase_admin;
-GRANT ALL ON FUNCTION extensions.grant_pg_cron_access() TO supabase_admin WITH GRANT OPTION;
-GRANT ALL ON FUNCTION extensions.grant_pg_cron_access() TO dashboard_user;
-
-
---
--- Name: FUNCTION grant_pg_graphql_access(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.grant_pg_graphql_access() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION grant_pg_net_access(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION extensions.grant_pg_net_access() FROM supabase_admin;
-GRANT ALL ON FUNCTION extensions.grant_pg_net_access() TO supabase_admin WITH GRANT OPTION;
-GRANT ALL ON FUNCTION extensions.grant_pg_net_access() TO dashboard_user;
-
-
---
--- Name: FUNCTION hmac(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.hmac(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.hmac(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION hmac(text, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.hmac(text, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.hmac(text, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pg_stat_statements(showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT shared_blk_read_time double precision, OUT shared_blk_write_time double precision, OUT local_blk_read_time double precision, OUT local_blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision, OUT jit_deform_count bigint, OUT jit_deform_time double precision, OUT stats_since timestamp with time zone, OUT minmax_stats_since timestamp with time zone); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pg_stat_statements(showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT shared_blk_read_time double precision, OUT shared_blk_write_time double precision, OUT local_blk_read_time double precision, OUT local_blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision, OUT jit_deform_count bigint, OUT jit_deform_time double precision, OUT stats_since timestamp with time zone, OUT minmax_stats_since timestamp with time zone) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pg_stat_statements_info(OUT dealloc bigint, OUT stats_reset timestamp with time zone); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pg_stat_statements_info(OUT dealloc bigint, OUT stats_reset timestamp with time zone) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pg_stat_statements_reset(userid oid, dbid oid, queryid bigint, minmax_only boolean); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pg_stat_statements_reset(userid oid, dbid oid, queryid bigint, minmax_only boolean) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_armor_headers(text, OUT key text, OUT value text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_armor_headers(text, OUT key text, OUT value text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_armor_headers(text, OUT key text, OUT value text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_key_id(bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_key_id(bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_key_id(bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt(bytea, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt(bytea, bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt(text, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt(text, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt_bytea(bytea, bytea); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_pub_encrypt_bytea(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt(bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt_bytea(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_decrypt_bytea(bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt(text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt(text, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt_bytea(bytea, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgp_sym_encrypt_bytea(bytea, text, text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text, text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text, text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgrst_ddl_watch(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgrst_ddl_watch() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION pgrst_drop_watch(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.pgrst_drop_watch() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION set_graphql_placeholder(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.set_graphql_placeholder() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v1(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v1mc(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1mc() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v1mc() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v3(namespace uuid, name text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v3(namespace uuid, name text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v3(namespace uuid, name text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v4(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v4() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v4() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_generate_v5(namespace uuid, name text); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_generate_v5(namespace uuid, name text) TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_generate_v5(namespace uuid, name text) TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_nil(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_nil() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_nil() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_dns(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_dns() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_dns() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_oid(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_oid() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_oid() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_url(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_url() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_url() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION uuid_ns_x500(); Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION extensions.uuid_ns_x500() TO dashboard_user;
-GRANT ALL ON FUNCTION extensions.uuid_ns_x500() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION graphql("operationName" text, query text, variables jsonb, extensions jsonb); Type: ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO postgres;
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO anon;
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO authenticated;
-GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO service_role;
-
-
---
--- Name: FUNCTION http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer); Type: ACL; Schema: net; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO postgres;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO anon;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO authenticated;
-GRANT ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO service_role;
-
-
---
--- Name: FUNCTION http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer); Type: ACL; Schema: net; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO postgres;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO anon;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO authenticated;
-GRANT ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO service_role;
-
-
---
--- Name: FUNCTION pg_reload_conf(); Type: ACL; Schema: pg_catalog; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION pg_catalog.pg_reload_conf() TO postgres WITH GRANT OPTION;
-
-
---
--- Name: FUNCTION get_auth(p_usename text); Type: ACL; Schema: pgbouncer; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION pgbouncer.get_auth(p_usename text) FROM PUBLIC;
-GRANT ALL ON FUNCTION pgbouncer.get_auth(p_usename text) TO pgbouncer;
-
-
---
--- Name: FUNCTION __rls_ping(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.__rls_ping() TO postgres;
-GRANT ALL ON FUNCTION public.__rls_ping() TO anon;
-GRANT ALL ON FUNCTION public.__rls_ping() TO authenticated;
-GRANT ALL ON FUNCTION public.__rls_ping() TO service_role;
-
-
---
--- Name: TABLE subscriptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscriptions TO postgres;
-GRANT ALL ON TABLE public.subscriptions TO anon;
-GRANT ALL ON TABLE public.subscriptions TO authenticated;
-GRANT ALL ON TABLE public.subscriptions TO service_role;
-
-
---
--- Name: FUNCTION activate_subscription_from_intent(p_intent_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.activate_subscription_from_intent(p_intent_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION admin_fix_plan_target(p_plan_key text, p_new_target text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) FROM PUBLIC;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO postgres;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO anon;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO authenticated;
-GRANT ALL ON FUNCTION public.admin_fix_plan_target(p_plan_key text, p_new_target text) TO service_role;
-
-
---
--- Name: FUNCTION agenda_cfg_sync(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO postgres;
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO anon;
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO authenticated;
-GRANT ALL ON FUNCTION public.agenda_cfg_sync() TO service_role;
-
-
---
--- Name: FUNCTION agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO postgres;
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO anon;
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO authenticated;
-GRANT ALL ON FUNCTION public.agendador_dias_disponiveis(p_slug text, p_ano integer, p_mes integer) TO service_role;
-
-
---
--- Name: FUNCTION agendador_gerar_slug(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO postgres;
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO anon;
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO authenticated;
-GRANT ALL ON FUNCTION public.agendador_gerar_slug() TO service_role;
-
-
---
--- Name: FUNCTION agendador_slots_disponiveis(p_slug text, p_data date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO postgres;
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO anon;
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO authenticated;
-GRANT ALL ON FUNCTION public.agendador_slots_disponiveis(p_slug text, p_data date) TO service_role;
-
-
---
--- Name: FUNCTION cancel_recurrence_from(p_recurrence_id uuid, p_from_date date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO postgres;
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO anon;
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO authenticated;
-GRANT ALL ON FUNCTION public.cancel_recurrence_from(p_recurrence_id uuid, p_from_date date) TO service_role;
-
-
---
--- Name: FUNCTION cancel_subscription(p_subscription_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.cancel_subscription(p_subscription_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO postgres;
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO anon;
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.cancelar_eventos_serie(p_serie_id uuid, p_a_partir_de timestamp with time zone) TO service_role;
-
-
---
--- Name: FUNCTION cash_dist(money, money); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO postgres;
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO anon;
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO authenticated;
-GRANT ALL ON FUNCTION public.cash_dist(money, money) TO service_role;
-
-
---
--- Name: FUNCTION change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.change_subscription_plan(p_subscription_id uuid, p_new_plan_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION citext_cmp(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_cmp(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_eq(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_eq(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_ge(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_ge(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_gt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_gt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_hash(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_hash(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_hash_extended(public.citext, bigint); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO postgres;
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO anon;
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_hash_extended(public.citext, bigint) TO service_role;
-
-
---
--- Name: FUNCTION citext_larger(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_larger(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_le(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_le(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_lt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_lt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_ne(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_ne(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_cmp(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_cmp(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_ge(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_ge(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_gt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_gt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_le(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_le(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_pattern_lt(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_pattern_lt(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION citext_smaller(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.citext_smaller(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION create_clinic_tenant(p_name text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO postgres;
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO anon;
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO authenticated;
-GRANT ALL ON FUNCTION public.create_clinic_tenant(p_name text) TO service_role;
-
-
---
--- Name: FUNCTION create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO postgres;
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO anon;
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO authenticated;
-GRANT ALL ON FUNCTION public.create_patient_intake_request(p_token text, p_name text, p_email text, p_phone text, p_notes text, p_consent boolean) TO service_role;
-
-
---
--- Name: FUNCTION create_patient_intake_request_v2(p_token text, p_payload jsonb); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) FROM PUBLIC;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO postgres;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO anon;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO authenticated;
-GRANT ALL ON FUNCTION public.create_patient_intake_request_v2(p_token text, p_payload jsonb) TO service_role;
-
-
---
--- Name: FUNCTION create_support_session(p_tenant_id uuid, p_ttl_minutes integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO postgres;
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO anon;
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO authenticated;
-GRANT ALL ON FUNCTION public.create_support_session(p_tenant_id uuid, p_ttl_minutes integer) TO service_role;
-
-
---
--- Name: FUNCTION current_member_id(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.current_member_id(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION current_member_role(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.current_member_role(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION date_dist(date, date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO postgres;
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO anon;
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO authenticated;
-GRANT ALL ON FUNCTION public.date_dist(date, date) TO service_role;
-
-
---
--- Name: FUNCTION delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid); Type: ACL; Schema: public; Owner: postgres
---
-
-GRANT ALL ON FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.delete_commitment_full(p_tenant_id uuid, p_commitment_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.delete_determined_commitment(p_tenant_id uuid, p_commitment_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION dev_list_auth_users(p_limit integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO postgres;
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO anon;
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO authenticated;
-GRANT ALL ON FUNCTION public.dev_list_auth_users(p_limit integer) TO service_role;
-
-
---
--- Name: FUNCTION dev_list_custom_users(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.dev_list_custom_users() FROM PUBLIC;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO postgres;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO anon;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO authenticated;
-GRANT ALL ON FUNCTION public.dev_list_custom_users() TO service_role;
-
-
---
--- Name: FUNCTION dev_list_intent_leads(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.dev_list_intent_leads() FROM PUBLIC;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO postgres;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO anon;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO authenticated;
-GRANT ALL ON FUNCTION public.dev_list_intent_leads() TO service_role;
-
-
---
--- Name: FUNCTION dev_public_debug_snapshot(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO postgres;
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO anon;
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO authenticated;
-GRANT ALL ON FUNCTION public.dev_public_debug_snapshot() TO service_role;
-
-
---
--- Name: FUNCTION ensure_personal_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO anon;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant() TO service_role;
-
-
---
--- Name: FUNCTION ensure_personal_tenant_for_user(p_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.ensure_personal_tenant_for_user(p_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION faq_votar(faq_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.faq_votar(faq_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION fix_all_subscription_mismatches(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO postgres;
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO anon;
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO authenticated;
-GRANT ALL ON FUNCTION public.fix_all_subscription_mismatches() TO service_role;
-
-
---
--- Name: FUNCTION float4_dist(real, real); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO postgres;
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO anon;
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO authenticated;
-GRANT ALL ON FUNCTION public.float4_dist(real, real) TO service_role;
-
-
---
--- Name: FUNCTION float8_dist(double precision, double precision); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO postgres;
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO anon;
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO authenticated;
-GRANT ALL ON FUNCTION public.float8_dist(double precision, double precision) TO service_role;
-
-
---
--- Name: FUNCTION fn_agenda_regras_semanais_no_overlap(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO postgres;
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO anon;
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO authenticated;
-GRANT ALL ON FUNCTION public.fn_agenda_regras_semanais_no_overlap() TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_consistent(internal, bit, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_consistent(internal, bit, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bit_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bit_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_consistent(internal, boolean, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_same(public.gbtreekey2, public.gbtreekey2, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bool_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bool_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bpchar_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bpchar_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bpchar_consistent(internal, character, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_consistent(internal, bytea, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_bytea_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_bytea_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_consistent(internal, money, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_consistent(internal, money, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_distance(internal, money, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_distance(internal, money, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_cash_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_cash_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_consistent(internal, date, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_consistent(internal, date, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_distance(internal, date, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_distance(internal, date, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_date_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_date_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_consistent(internal, anyenum, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_enum_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_enum_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_consistent(internal, real, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_consistent(internal, real, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_distance(internal, real, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_distance(internal, real, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float4_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float4_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_consistent(internal, double precision, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_distance(internal, double precision, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_distance(internal, double precision, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_float8_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_float8_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_consistent(internal, inet, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_consistent(internal, inet, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_inet_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_inet_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_consistent(internal, smallint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_distance(internal, smallint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_distance(internal, smallint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int2_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int2_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_consistent(internal, integer, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_consistent(internal, integer, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_distance(internal, integer, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_distance(internal, integer, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int4_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int4_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_consistent(internal, bigint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_distance(internal, bigint, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_distance(internal, bigint, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_int8_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_int8_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_consistent(internal, interval, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_consistent(internal, interval, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_distance(internal, interval, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_distance(internal, interval, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_intv_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_intv_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad8_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad8_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_consistent(internal, macaddr, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_macad_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_macad_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_consistent(internal, numeric, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_numeric_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_numeric_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_consistent(internal, oid, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_consistent(internal, oid, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_distance(internal, oid, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_distance(internal, oid, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_oid_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_oid_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_consistent(internal, text, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_consistent(internal, text, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_text_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_text_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_consistent(internal, time without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_distance(internal, time without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_time_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_time_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_timetz_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_timetz_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_ts_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_ts_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_tstz_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_tstz_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_consistent(internal, uuid, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_uuid_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_uuid_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_var_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_var_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gbt_var_fetch(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO anon;
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gbt_var_fetch(internal) TO service_role;
-
-
---
--- Name: FUNCTION get_my_email(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.get_my_email() FROM PUBLIC;
-GRANT ALL ON FUNCTION public.get_my_email() TO postgres;
-GRANT ALL ON FUNCTION public.get_my_email() TO anon;
-GRANT ALL ON FUNCTION public.get_my_email() TO authenticated;
-GRANT ALL ON FUNCTION public.get_my_email() TO service_role;
-
-
---
--- Name: FUNCTION gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_extract_query_trgm(text, internal, smallint, internal, internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gin_extract_value_trgm(text, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_extract_value_trgm(text, internal) TO service_role;
-
-
---
--- Name: FUNCTION gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_trgm_consistent(internal, smallint, text, integer, internal, internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gin_trgm_triconsistent(internal, smallint, text, integer, internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_compress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_compress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_consistent(internal, text, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_consistent(internal, text, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_decompress(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_decompress(internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_distance(internal, text, smallint, oid, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_distance(internal, text, smallint, oid, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_options(internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_options(internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_penalty(internal, internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_penalty(internal, internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_picksplit(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_picksplit(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_same(public.gtrgm, public.gtrgm, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_same(public.gtrgm, public.gtrgm, internal) TO service_role;
-
-
---
--- Name: FUNCTION gtrgm_union(internal, internal); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO postgres;
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO anon;
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO authenticated;
-GRANT ALL ON FUNCTION public.gtrgm_union(internal, internal) TO service_role;
-
-
---
--- Name: FUNCTION guard_account_type_immutable(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO postgres;
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO anon;
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_account_type_immutable() TO service_role;
-
-
---
--- Name: FUNCTION guard_locked_commitment(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO postgres;
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO anon;
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_locked_commitment() TO service_role;
-
-
---
--- Name: FUNCTION guard_no_change_core_plan_key(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO postgres;
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO anon;
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_no_change_core_plan_key() TO service_role;
-
-
---
--- Name: FUNCTION guard_no_change_plan_target(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO postgres;
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO anon;
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_no_change_plan_target() TO service_role;
-
-
---
--- Name: FUNCTION guard_no_delete_core_plans(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO postgres;
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO anon;
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_no_delete_core_plans() TO service_role;
-
-
---
--- Name: FUNCTION guard_patient_cannot_own_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO anon;
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_patient_cannot_own_tenant() TO service_role;
-
-
---
--- Name: FUNCTION guard_tenant_kind_immutable(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO postgres;
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO anon;
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO authenticated;
-GRANT ALL ON FUNCTION public.guard_tenant_kind_immutable() TO service_role;
-
-
---
--- Name: FUNCTION handle_new_user(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.handle_new_user() TO postgres;
-GRANT ALL ON FUNCTION public.handle_new_user() TO anon;
-GRANT ALL ON FUNCTION public.handle_new_user() TO authenticated;
-GRANT ALL ON FUNCTION public.handle_new_user() TO service_role;
-
-
---
--- Name: FUNCTION handle_new_user_create_personal_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO anon;
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.handle_new_user_create_personal_tenant() TO service_role;
-
-
---
--- Name: FUNCTION has_feature(p_owner_id uuid, p_feature_key text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO postgres;
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO anon;
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO authenticated;
-GRANT ALL ON FUNCTION public.has_feature(p_owner_id uuid, p_feature_key text) TO service_role;
-
-
---
--- Name: FUNCTION int2_dist(smallint, smallint); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO postgres;
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO anon;
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO authenticated;
-GRANT ALL ON FUNCTION public.int2_dist(smallint, smallint) TO service_role;
-
-
---
--- Name: FUNCTION int4_dist(integer, integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO postgres;
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO anon;
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO authenticated;
-GRANT ALL ON FUNCTION public.int4_dist(integer, integer) TO service_role;
-
-
---
--- Name: FUNCTION int8_dist(bigint, bigint); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO postgres;
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO anon;
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO authenticated;
-GRANT ALL ON FUNCTION public.int8_dist(bigint, bigint) TO service_role;
-
-
---
--- Name: FUNCTION interval_dist(interval, interval); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO postgres;
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO anon;
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO authenticated;
-GRANT ALL ON FUNCTION public.interval_dist(interval, interval) TO service_role;
-
-
---
--- Name: FUNCTION is_clinic_tenant(_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_clinic_tenant(_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION is_saas_admin(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_saas_admin() TO postgres;
-GRANT ALL ON FUNCTION public.is_saas_admin() TO anon;
-GRANT ALL ON FUNCTION public.is_saas_admin() TO authenticated;
-GRANT ALL ON FUNCTION public.is_saas_admin() TO service_role;
-
-
---
--- Name: FUNCTION is_tenant_admin(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_tenant_admin(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION is_tenant_member(_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_tenant_member(_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION is_therapist_tenant(_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.is_therapist_tenant(_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION jwt_email(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.jwt_email() TO postgres;
-GRANT ALL ON FUNCTION public.jwt_email() TO anon;
-GRANT ALL ON FUNCTION public.jwt_email() TO authenticated;
-GRANT ALL ON FUNCTION public.jwt_email() TO service_role;
-
-
---
--- Name: FUNCTION my_tenants(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.my_tenants() TO postgres;
-GRANT ALL ON FUNCTION public.my_tenants() TO anon;
-GRANT ALL ON FUNCTION public.my_tenants() TO authenticated;
-GRANT ALL ON FUNCTION public.my_tenants() TO service_role;
-
-
---
--- Name: FUNCTION oid_dist(oid, oid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO postgres;
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO anon;
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO authenticated;
-GRANT ALL ON FUNCTION public.oid_dist(oid, oid) TO service_role;
-
-
---
--- Name: FUNCTION on_new_user_seed_patient_groups(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO postgres;
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO anon;
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO authenticated;
-GRANT ALL ON FUNCTION public.on_new_user_seed_patient_groups() TO service_role;
-
-
---
--- Name: FUNCTION patients_validate_member_consistency(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO postgres;
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO anon;
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO authenticated;
-GRANT ALL ON FUNCTION public.patients_validate_member_consistency() TO service_role;
-
-
---
--- Name: FUNCTION patients_validate_responsible_member_tenant(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO postgres;
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO anon;
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO authenticated;
-GRANT ALL ON FUNCTION public.patients_validate_responsible_member_tenant() TO service_role;
-
-
---
--- Name: FUNCTION prevent_promoting_to_system(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO postgres;
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO anon;
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO authenticated;
-GRANT ALL ON FUNCTION public.prevent_promoting_to_system() TO service_role;
-
-
---
--- Name: FUNCTION prevent_saas_membership(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO postgres;
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO anon;
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO authenticated;
-GRANT ALL ON FUNCTION public.prevent_saas_membership() TO service_role;
-
-
---
--- Name: FUNCTION prevent_system_group_changes(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO postgres;
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO anon;
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO authenticated;
-GRANT ALL ON FUNCTION public.prevent_system_group_changes() TO service_role;
-
-
---
--- Name: FUNCTION provision_account_tenant(p_user_id uuid, p_kind text, p_name text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO postgres;
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO anon;
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO authenticated;
-GRANT ALL ON FUNCTION public.provision_account_tenant(p_user_id uuid, p_kind text, p_name text) TO service_role;
-
-
---
--- Name: FUNCTION reactivate_subscription(p_subscription_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.reactivate_subscription(p_subscription_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION rebuild_owner_entitlements(p_owner_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.rebuild_owner_entitlements(p_owner_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION regexp_match(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_match(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_match(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_matches(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_matches(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_matches(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_replace(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_replace(public.citext, public.citext, text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_replace(public.citext, public.citext, text, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_array(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_array(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_array(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_table(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION regexp_split_to_table(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.regexp_split_to_table(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION replace(public.citext, public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.replace(public.citext, public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION revoke_support_session(p_token text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO postgres;
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO anon;
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO authenticated;
-GRANT ALL ON FUNCTION public.revoke_support_session(p_token text) TO service_role;
-
-
---
--- Name: FUNCTION rotate_patient_invite_token(p_new_token text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO postgres;
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO anon;
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO authenticated;
-GRANT ALL ON FUNCTION public.rotate_patient_invite_token(p_new_token text) TO service_role;
-
-
---
--- Name: FUNCTION saas_votar_doc(p_doc_id uuid, p_util boolean); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO postgres;
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO anon;
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO authenticated;
-GRANT ALL ON FUNCTION public.saas_votar_doc(p_doc_id uuid, p_util boolean) TO service_role;
-
-
---
--- Name: FUNCTION seed_determined_commitments(p_tenant_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.seed_determined_commitments(p_tenant_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION set_insurance_plans_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_insurance_plans_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.set_insurance_plans_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.set_insurance_plans_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.set_insurance_plans_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION set_limit(real); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_limit(real) TO postgres;
-GRANT ALL ON FUNCTION public.set_limit(real) TO anon;
-GRANT ALL ON FUNCTION public.set_limit(real) TO authenticated;
-GRANT ALL ON FUNCTION public.set_limit(real) TO service_role;
-
-
---
--- Name: FUNCTION set_owner_id(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_owner_id() TO postgres;
-GRANT ALL ON FUNCTION public.set_owner_id() TO anon;
-GRANT ALL ON FUNCTION public.set_owner_id() TO authenticated;
-GRANT ALL ON FUNCTION public.set_owner_id() TO service_role;
-
-
---
--- Name: FUNCTION set_services_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_services_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.set_services_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.set_services_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.set_services_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO postgres;
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO anon;
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO authenticated;
-GRANT ALL ON FUNCTION public.set_tenant_feature_exception(p_tenant_id uuid, p_feature_key text, p_enabled boolean, p_reason text) TO service_role;
-
-
---
--- Name: FUNCTION set_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.set_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.set_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.set_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION set_updated_at_recurrence(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO postgres;
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO anon;
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO authenticated;
-GRANT ALL ON FUNCTION public.set_updated_at_recurrence() TO service_role;
-
-
---
--- Name: FUNCTION show_limit(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.show_limit() TO postgres;
-GRANT ALL ON FUNCTION public.show_limit() TO anon;
-GRANT ALL ON FUNCTION public.show_limit() TO authenticated;
-GRANT ALL ON FUNCTION public.show_limit() TO service_role;
-
-
---
--- Name: FUNCTION show_trgm(text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.show_trgm(text) TO postgres;
-GRANT ALL ON FUNCTION public.show_trgm(text) TO anon;
-GRANT ALL ON FUNCTION public.show_trgm(text) TO authenticated;
-GRANT ALL ON FUNCTION public.show_trgm(text) TO service_role;
-
-
---
--- Name: FUNCTION similarity(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.similarity(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.similarity(text, text) TO anon;
-GRANT ALL ON FUNCTION public.similarity(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.similarity(text, text) TO service_role;
-
-
---
--- Name: FUNCTION similarity_dist(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO anon;
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.similarity_dist(text, text) TO service_role;
-
-
---
--- Name: FUNCTION similarity_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.similarity_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION split_part(public.citext, public.citext, integer); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO postgres;
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO anon;
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO authenticated;
-GRANT ALL ON FUNCTION public.split_part(public.citext, public.citext, integer) TO service_role;
-
-
---
--- Name: FUNCTION split_recurrence_at(p_recurrence_id uuid, p_from_date date); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO postgres;
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO anon;
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO authenticated;
-GRANT ALL ON FUNCTION public.split_recurrence_at(p_recurrence_id uuid, p_from_date date) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_dist_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_dist_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_dist_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strict_word_similarity_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.strict_word_similarity_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION strpos(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.strpos(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION subscription_intents_view_insert(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO postgres;
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO anon;
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO authenticated;
-GRANT ALL ON FUNCTION public.subscription_intents_view_insert() TO service_role;
-
-
---
--- Name: FUNCTION subscriptions_validate_scope(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO postgres;
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO anon;
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO authenticated;
-GRANT ALL ON FUNCTION public.subscriptions_validate_scope() TO service_role;
-
-
---
--- Name: FUNCTION sync_busy_mirror_agenda_eventos(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO postgres;
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO anon;
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO authenticated;
-GRANT ALL ON FUNCTION public.sync_busy_mirror_agenda_eventos() TO service_role;
-
-
---
--- Name: FUNCTION tenant_accept_invite(p_token uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_accept_invite(p_token uuid) TO service_role;
-
-
---
--- Name: TABLE tenant_members; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_members TO postgres;
-GRANT SELECT,REFERENCES,TRIGGER,TRUNCATE,MAINTAIN ON TABLE public.tenant_members TO authenticated;
-GRANT ALL ON TABLE public.tenant_members TO service_role;
-
-
---
--- Name: FUNCTION tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_add_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_feature_allowed(p_tenant_id uuid, p_feature_key text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_feature_allowed(p_tenant_id uuid, p_feature_key text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_feature_enabled(p_tenant_id uuid, p_feature_key text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_feature_enabled(p_tenant_id uuid, p_feature_key text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_features_guard_with_plan(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO postgres;
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO anon;
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_features_guard_with_plan() TO service_role;
-
-
---
--- Name: FUNCTION tenant_has_feature(_tenant_id uuid, _feature text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_has_feature(_tenant_id uuid, _feature text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-REVOKE ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) FROM PUBLIC;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_invite_member_by_email(p_tenant_id uuid, p_email text, p_role text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_reactivate_member(p_tenant_id uuid, p_member_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_remove_member(p_tenant_id uuid, p_member_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO anon;
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_remove_member_soft(p_tenant_id uuid, p_member_user_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_revoke_invite(p_tenant_id uuid, p_email text, p_role text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_set_member_status(p_tenant_id uuid, p_member_user_id uuid, p_new_status text) TO service_role;
-
-
---
--- Name: FUNCTION tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO postgres;
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO anon;
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO authenticated;
-GRANT ALL ON FUNCTION public.tenant_update_member_role(p_tenant_id uuid, p_member_user_id uuid, p_new_role text) TO service_role;
-
-
---
--- Name: FUNCTION texticlike(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticlike(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticlike(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION texticnlike(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticnlike(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticnlike(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION texticregexeq(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticregexeq(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexeq(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION texticregexne(public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION texticregexne(public.citext, public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO anon;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.texticregexne(public.citext, public.citext) TO service_role;
-
-
---
--- Name: FUNCTION time_dist(time without time zone, time without time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO postgres;
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO anon;
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.time_dist(time without time zone, time without time zone) TO service_role;
-
-
---
--- Name: FUNCTION toggle_plan(owner uuid); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO postgres;
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO anon;
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO authenticated;
-GRANT ALL ON FUNCTION public.toggle_plan(owner uuid) TO service_role;
-
-
---
--- Name: FUNCTION transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO postgres;
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO anon;
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO authenticated;
-GRANT ALL ON FUNCTION public.transition_subscription(p_subscription_id uuid, p_to_status text, p_reason text, p_metadata jsonb) TO service_role;
-
-
---
--- Name: FUNCTION translate(public.citext, public.citext, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO postgres;
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO anon;
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO authenticated;
-GRANT ALL ON FUNCTION public.translate(public.citext, public.citext, text) TO service_role;
-
-
---
--- Name: FUNCTION ts_dist(timestamp without time zone, timestamp without time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO postgres;
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO anon;
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.ts_dist(timestamp without time zone, timestamp without time zone) TO service_role;
-
-
---
--- Name: FUNCTION tstz_dist(timestamp with time zone, timestamp with time zone); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO postgres;
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO anon;
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO authenticated;
-GRANT ALL ON FUNCTION public.tstz_dist(timestamp with time zone, timestamp with time zone) TO service_role;
-
-
---
--- Name: FUNCTION update_payment_settings_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.update_payment_settings_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION update_professional_pricing_updated_at(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO postgres;
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO anon;
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO authenticated;
-GRANT ALL ON FUNCTION public.update_professional_pricing_updated_at() TO service_role;
-
-
---
--- Name: FUNCTION user_has_feature(_user_id uuid, _feature text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO postgres;
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO anon;
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO authenticated;
-GRANT ALL ON FUNCTION public.user_has_feature(_user_id uuid, _feature text) TO service_role;
-
-
---
--- Name: FUNCTION validate_support_session(p_token text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO postgres;
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO anon;
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO authenticated;
-GRANT ALL ON FUNCTION public.validate_support_session(p_token text) TO service_role;
-
-
---
--- Name: FUNCTION whoami(); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.whoami() TO postgres;
-GRANT ALL ON FUNCTION public.whoami() TO anon;
-GRANT ALL ON FUNCTION public.whoami() TO authenticated;
-GRANT ALL ON FUNCTION public.whoami() TO service_role;
-
-
---
--- Name: FUNCTION word_similarity(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_dist_commutator_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_dist_commutator_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_dist_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_dist_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION word_similarity_op(text, text); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO postgres;
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO anon;
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO authenticated;
-GRANT ALL ON FUNCTION public.word_similarity_op(text, text) TO service_role;
-
-
---
--- Name: FUNCTION apply_rls(wal jsonb, max_record_bytes integer); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO postgres;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO anon;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO authenticated;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO service_role;
-GRANT ALL ON FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text) TO postgres;
-GRANT ALL ON FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text) TO dashboard_user;
-
-
---
--- Name: FUNCTION build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO postgres;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO anon;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO authenticated;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO service_role;
-GRANT ALL ON FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION "cast"(val text, type_ regtype); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO postgres;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO anon;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO authenticated;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO service_role;
-GRANT ALL ON FUNCTION realtime."cast"(val text, type_ regtype) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO postgres;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO anon;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO authenticated;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO service_role;
-GRANT ALL ON FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO postgres;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO anon;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO authenticated;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO service_role;
-GRANT ALL ON FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO postgres;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO anon;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO authenticated;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO service_role;
-GRANT ALL ON FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION quote_wal2json(entity regclass); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO postgres;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO anon;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO authenticated;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO service_role;
-GRANT ALL ON FUNCTION realtime.quote_wal2json(entity regclass) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION send(payload jsonb, event text, topic text, private boolean); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean) TO postgres;
-GRANT ALL ON FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean) TO dashboard_user;
-
-
---
--- Name: FUNCTION subscription_check_filters(); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO postgres;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO anon;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO authenticated;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO service_role;
-GRANT ALL ON FUNCTION realtime.subscription_check_filters() TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION to_regrole(role_name text); Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO postgres;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO dashboard_user;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO anon;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO authenticated;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO service_role;
-GRANT ALL ON FUNCTION realtime.to_regrole(role_name text) TO supabase_realtime_admin;
-
-
---
--- Name: FUNCTION topic(); Type: ACL; Schema: realtime; Owner: supabase_realtime_admin
---
-
-GRANT ALL ON FUNCTION realtime.topic() TO postgres;
-GRANT ALL ON FUNCTION realtime.topic() TO dashboard_user;
-
-
---
--- Name: FUNCTION http_request(); Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-REVOKE ALL ON FUNCTION supabase_functions.http_request() FROM PUBLIC;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO postgres;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO anon;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO authenticated;
-GRANT ALL ON FUNCTION supabase_functions.http_request() TO service_role;
-
-
---
--- Name: FUNCTION _crypto_aead_det_decrypt(message bytea, additional bytea, key_id bigint, context bytea, nonce bytea); Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION vault._crypto_aead_det_decrypt(message bytea, additional bytea, key_id bigint, context bytea, nonce bytea) TO postgres WITH GRANT OPTION;
-GRANT ALL ON FUNCTION vault._crypto_aead_det_decrypt(message bytea, additional bytea, key_id bigint, context bytea, nonce bytea) TO service_role;
-
-
---
--- Name: FUNCTION create_secret(new_secret text, new_name text, new_description text, new_key_id uuid); Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION vault.create_secret(new_secret text, new_name text, new_description text, new_key_id uuid) TO postgres WITH GRANT OPTION;
-GRANT ALL ON FUNCTION vault.create_secret(new_secret text, new_name text, new_description text, new_key_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION update_secret(secret_id uuid, new_secret text, new_name text, new_description text, new_key_id uuid); Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION vault.update_secret(secret_id uuid, new_secret text, new_name text, new_description text, new_key_id uuid) TO postgres WITH GRANT OPTION;
-GRANT ALL ON FUNCTION vault.update_secret(secret_id uuid, new_secret text, new_name text, new_description text, new_key_id uuid) TO service_role;
-
-
---
--- Name: FUNCTION max(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.max(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.max(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.max(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.max(public.citext) TO service_role;
-
-
---
--- Name: FUNCTION min(public.citext); Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON FUNCTION public.min(public.citext) TO postgres;
-GRANT ALL ON FUNCTION public.min(public.citext) TO anon;
-GRANT ALL ON FUNCTION public.min(public.citext) TO authenticated;
-GRANT ALL ON FUNCTION public.min(public.citext) TO service_role;
-
-
---
--- Name: TABLE audit_log_entries; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.audit_log_entries TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.audit_log_entries TO postgres;
-GRANT SELECT ON TABLE auth.audit_log_entries TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE flow_state; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.flow_state TO postgres;
-GRANT SELECT ON TABLE auth.flow_state TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.flow_state TO dashboard_user;
-
-
---
--- Name: TABLE identities; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.identities TO postgres;
-GRANT SELECT ON TABLE auth.identities TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.identities TO dashboard_user;
-
-
---
--- Name: TABLE instances; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.instances TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.instances TO postgres;
-GRANT SELECT ON TABLE auth.instances TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE mfa_amr_claims; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.mfa_amr_claims TO postgres;
-GRANT SELECT ON TABLE auth.mfa_amr_claims TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.mfa_amr_claims TO dashboard_user;
-
-
---
--- Name: TABLE mfa_challenges; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.mfa_challenges TO postgres;
-GRANT SELECT ON TABLE auth.mfa_challenges TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.mfa_challenges TO dashboard_user;
-
-
---
--- Name: TABLE mfa_factors; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.mfa_factors TO postgres;
-GRANT SELECT ON TABLE auth.mfa_factors TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.mfa_factors TO dashboard_user;
-
-
---
--- Name: TABLE oauth_authorizations; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_authorizations TO postgres;
-GRANT ALL ON TABLE auth.oauth_authorizations TO dashboard_user;
-
-
---
--- Name: TABLE oauth_client_states; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_client_states TO postgres;
-GRANT ALL ON TABLE auth.oauth_client_states TO dashboard_user;
-
-
---
--- Name: TABLE oauth_clients; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_clients TO postgres;
-GRANT ALL ON TABLE auth.oauth_clients TO dashboard_user;
-
-
---
--- Name: TABLE oauth_consents; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.oauth_consents TO postgres;
-GRANT ALL ON TABLE auth.oauth_consents TO dashboard_user;
-
-
---
--- Name: TABLE one_time_tokens; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.one_time_tokens TO postgres;
-GRANT SELECT ON TABLE auth.one_time_tokens TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.one_time_tokens TO dashboard_user;
-
-
---
--- Name: TABLE refresh_tokens; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.refresh_tokens TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.refresh_tokens TO postgres;
-GRANT SELECT ON TABLE auth.refresh_tokens TO postgres WITH GRANT OPTION;
-
-
---
--- Name: SEQUENCE refresh_tokens_id_seq; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON SEQUENCE auth.refresh_tokens_id_seq TO dashboard_user;
-GRANT ALL ON SEQUENCE auth.refresh_tokens_id_seq TO postgres;
-
-
---
--- Name: TABLE saml_providers; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.saml_providers TO postgres;
-GRANT SELECT ON TABLE auth.saml_providers TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.saml_providers TO dashboard_user;
-
-
---
--- Name: TABLE saml_relay_states; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.saml_relay_states TO postgres;
-GRANT SELECT ON TABLE auth.saml_relay_states TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.saml_relay_states TO dashboard_user;
-
-
---
--- Name: TABLE schema_migrations; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT SELECT ON TABLE auth.schema_migrations TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE sessions; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.sessions TO postgres;
-GRANT SELECT ON TABLE auth.sessions TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.sessions TO dashboard_user;
-
-
---
--- Name: TABLE sso_domains; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.sso_domains TO postgres;
-GRANT SELECT ON TABLE auth.sso_domains TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.sso_domains TO dashboard_user;
-
-
---
--- Name: TABLE sso_providers; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.sso_providers TO postgres;
-GRANT SELECT ON TABLE auth.sso_providers TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE auth.sso_providers TO dashboard_user;
-
-
---
--- Name: TABLE users; Type: ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-GRANT ALL ON TABLE auth.users TO dashboard_user;
-GRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,MAINTAIN,UPDATE ON TABLE auth.users TO postgres;
-GRANT SELECT ON TABLE auth.users TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE pg_stat_statements; Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE extensions.pg_stat_statements TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE pg_stat_statements_info; Type: ACL; Schema: extensions; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE extensions.pg_stat_statements_info TO postgres WITH GRANT OPTION;
-
-
---
--- Name: TABLE agenda_bloqueios; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_bloqueios TO postgres;
-GRANT ALL ON TABLE public.agenda_bloqueios TO anon;
-GRANT ALL ON TABLE public.agenda_bloqueios TO authenticated;
-GRANT ALL ON TABLE public.agenda_bloqueios TO service_role;
-
-
---
--- Name: TABLE agenda_configuracoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_configuracoes TO postgres;
-GRANT ALL ON TABLE public.agenda_configuracoes TO anon;
-GRANT ALL ON TABLE public.agenda_configuracoes TO authenticated;
-GRANT ALL ON TABLE public.agenda_configuracoes TO service_role;
-
-
---
--- Name: TABLE agenda_eventos; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_eventos TO postgres;
-GRANT ALL ON TABLE public.agenda_eventos TO anon;
-GRANT ALL ON TABLE public.agenda_eventos TO authenticated;
-GRANT ALL ON TABLE public.agenda_eventos TO service_role;
-
-
---
--- Name: TABLE agenda_excecoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_excecoes TO postgres;
-GRANT ALL ON TABLE public.agenda_excecoes TO anon;
-GRANT ALL ON TABLE public.agenda_excecoes TO authenticated;
-GRANT ALL ON TABLE public.agenda_excecoes TO service_role;
-
-
---
--- Name: TABLE agenda_online_slots; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_online_slots TO postgres;
-GRANT ALL ON TABLE public.agenda_online_slots TO anon;
-GRANT ALL ON TABLE public.agenda_online_slots TO authenticated;
-GRANT ALL ON TABLE public.agenda_online_slots TO service_role;
-
-
---
--- Name: SEQUENCE agenda_online_slots_id_seq; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO postgres;
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO anon;
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO authenticated;
-GRANT ALL ON SEQUENCE public.agenda_online_slots_id_seq TO service_role;
-
-
---
--- Name: TABLE agenda_regras_semanais; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_regras_semanais TO postgres;
-GRANT ALL ON TABLE public.agenda_regras_semanais TO anon;
-GRANT ALL ON TABLE public.agenda_regras_semanais TO authenticated;
-GRANT ALL ON TABLE public.agenda_regras_semanais TO service_role;
-
-
---
--- Name: TABLE agenda_slots_bloqueados_semanais; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO postgres;
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO anon;
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO authenticated;
-GRANT ALL ON TABLE public.agenda_slots_bloqueados_semanais TO service_role;
-
-
---
--- Name: TABLE agenda_slots_regras; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agenda_slots_regras TO postgres;
-GRANT ALL ON TABLE public.agenda_slots_regras TO anon;
-GRANT ALL ON TABLE public.agenda_slots_regras TO authenticated;
-GRANT ALL ON TABLE public.agenda_slots_regras TO service_role;
-
-
---
--- Name: TABLE agendador_configuracoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agendador_configuracoes TO postgres;
-GRANT ALL ON TABLE public.agendador_configuracoes TO anon;
-GRANT ALL ON TABLE public.agendador_configuracoes TO authenticated;
-GRANT ALL ON TABLE public.agendador_configuracoes TO service_role;
-
-
---
--- Name: TABLE agendador_solicitacoes; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.agendador_solicitacoes TO postgres;
-GRANT ALL ON TABLE public.agendador_solicitacoes TO anon;
-GRANT ALL ON TABLE public.agendador_solicitacoes TO authenticated;
-GRANT ALL ON TABLE public.agendador_solicitacoes TO service_role;
-
-
---
--- Name: TABLE billing_contracts; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.billing_contracts TO postgres;
-GRANT ALL ON TABLE public.billing_contracts TO anon;
-GRANT ALL ON TABLE public.billing_contracts TO authenticated;
-GRANT ALL ON TABLE public.billing_contracts TO service_role;
-
-
---
--- Name: TABLE commitment_services; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.commitment_services TO postgres;
-GRANT ALL ON TABLE public.commitment_services TO anon;
-GRANT ALL ON TABLE public.commitment_services TO authenticated;
-GRANT ALL ON TABLE public.commitment_services TO service_role;
-
-
---
--- Name: TABLE commitment_time_logs; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.commitment_time_logs TO postgres;
-GRANT ALL ON TABLE public.commitment_time_logs TO anon;
-GRANT ALL ON TABLE public.commitment_time_logs TO authenticated;
-GRANT ALL ON TABLE public.commitment_time_logs TO service_role;
-
-
---
--- Name: TABLE current_tenant_id; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.current_tenant_id TO postgres;
-GRANT ALL ON TABLE public.current_tenant_id TO anon;
-GRANT ALL ON TABLE public.current_tenant_id TO authenticated;
-GRANT ALL ON TABLE public.current_tenant_id TO service_role;
-
-
---
--- Name: TABLE determined_commitment_fields; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.determined_commitment_fields TO postgres;
-GRANT ALL ON TABLE public.determined_commitment_fields TO anon;
-GRANT ALL ON TABLE public.determined_commitment_fields TO authenticated;
-GRANT ALL ON TABLE public.determined_commitment_fields TO service_role;
-
-
---
--- Name: TABLE determined_commitments; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.determined_commitments TO postgres;
-GRANT ALL ON TABLE public.determined_commitments TO anon;
-GRANT ALL ON TABLE public.determined_commitments TO authenticated;
-GRANT ALL ON TABLE public.determined_commitments TO service_role;
-
-
---
--- Name: TABLE dev_user_credentials; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.dev_user_credentials TO postgres;
-GRANT ALL ON TABLE public.dev_user_credentials TO anon;
-GRANT ALL ON TABLE public.dev_user_credentials TO authenticated;
-GRANT ALL ON TABLE public.dev_user_credentials TO service_role;
-
-
---
--- Name: TABLE entitlements_invalidation; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.entitlements_invalidation TO postgres;
-GRANT ALL ON TABLE public.entitlements_invalidation TO anon;
-GRANT ALL ON TABLE public.entitlements_invalidation TO authenticated;
-GRANT ALL ON TABLE public.entitlements_invalidation TO service_role;
-
-
---
--- Name: TABLE features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.features TO postgres;
-GRANT ALL ON TABLE public.features TO anon;
-GRANT ALL ON TABLE public.features TO authenticated;
-GRANT ALL ON TABLE public.features TO service_role;
-
-
---
--- Name: TABLE feriados; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.feriados TO postgres;
-GRANT ALL ON TABLE public.feriados TO anon;
-GRANT ALL ON TABLE public.feriados TO authenticated;
-GRANT ALL ON TABLE public.feriados TO service_role;
-
-
---
--- Name: TABLE financial_exceptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.financial_exceptions TO postgres;
-GRANT ALL ON TABLE public.financial_exceptions TO anon;
-GRANT ALL ON TABLE public.financial_exceptions TO authenticated;
-GRANT ALL ON TABLE public.financial_exceptions TO service_role;
-
-
---
--- Name: TABLE insurance_plan_services; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.insurance_plan_services TO postgres;
-GRANT ALL ON TABLE public.insurance_plan_services TO anon;
-GRANT ALL ON TABLE public.insurance_plan_services TO authenticated;
-GRANT ALL ON TABLE public.insurance_plan_services TO service_role;
-
-
---
--- Name: TABLE insurance_plans; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.insurance_plans TO postgres;
-GRANT ALL ON TABLE public.insurance_plans TO anon;
-GRANT ALL ON TABLE public.insurance_plans TO authenticated;
-GRANT ALL ON TABLE public.insurance_plans TO service_role;
-
-
---
--- Name: TABLE module_features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.module_features TO postgres;
-GRANT ALL ON TABLE public.module_features TO anon;
-GRANT ALL ON TABLE public.module_features TO authenticated;
-GRANT ALL ON TABLE public.module_features TO service_role;
-
-
---
--- Name: TABLE modules; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.modules TO postgres;
-GRANT ALL ON TABLE public.modules TO anon;
-GRANT ALL ON TABLE public.modules TO authenticated;
-GRANT ALL ON TABLE public.modules TO service_role;
-
-
---
--- Name: TABLE plan_features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_features TO postgres;
-GRANT ALL ON TABLE public.plan_features TO anon;
-GRANT ALL ON TABLE public.plan_features TO authenticated;
-GRANT ALL ON TABLE public.plan_features TO service_role;
-
-
---
--- Name: TABLE tenant_modules; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_modules TO postgres;
-GRANT ALL ON TABLE public.tenant_modules TO anon;
-GRANT ALL ON TABLE public.tenant_modules TO authenticated;
-GRANT ALL ON TABLE public.tenant_modules TO service_role;
-
-
---
--- Name: TABLE owner_feature_entitlements; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.owner_feature_entitlements TO postgres;
-GRANT ALL ON TABLE public.owner_feature_entitlements TO anon;
-GRANT ALL ON TABLE public.owner_feature_entitlements TO authenticated;
-GRANT ALL ON TABLE public.owner_feature_entitlements TO service_role;
-
-
---
--- Name: TABLE owner_users; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.owner_users TO postgres;
-GRANT ALL ON TABLE public.owner_users TO anon;
-GRANT ALL ON TABLE public.owner_users TO authenticated;
-GRANT ALL ON TABLE public.owner_users TO service_role;
-
-
---
--- Name: TABLE patient_discounts; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_discounts TO postgres;
-GRANT ALL ON TABLE public.patient_discounts TO anon;
-GRANT ALL ON TABLE public.patient_discounts TO authenticated;
-GRANT ALL ON TABLE public.patient_discounts TO service_role;
-
-
---
--- Name: TABLE patient_group_patient; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_group_patient TO postgres;
-GRANT ALL ON TABLE public.patient_group_patient TO anon;
-GRANT ALL ON TABLE public.patient_group_patient TO authenticated;
-GRANT ALL ON TABLE public.patient_group_patient TO service_role;
-
-
---
--- Name: TABLE patient_groups; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_groups TO postgres;
-GRANT ALL ON TABLE public.patient_groups TO anon;
-GRANT ALL ON TABLE public.patient_groups TO authenticated;
-GRANT ALL ON TABLE public.patient_groups TO service_role;
-
-
---
--- Name: TABLE patient_intake_requests; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_intake_requests TO postgres;
-GRANT ALL ON TABLE public.patient_intake_requests TO authenticated;
-GRANT ALL ON TABLE public.patient_intake_requests TO service_role;
-
-
---
--- Name: TABLE patient_invites; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_invites TO postgres;
-GRANT ALL ON TABLE public.patient_invites TO authenticated;
-GRANT ALL ON TABLE public.patient_invites TO service_role;
-
-
---
--- Name: TABLE patient_patient_tag; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_patient_tag TO postgres;
-GRANT ALL ON TABLE public.patient_patient_tag TO anon;
-GRANT ALL ON TABLE public.patient_patient_tag TO authenticated;
-GRANT ALL ON TABLE public.patient_patient_tag TO service_role;
-
-
---
--- Name: TABLE patient_tags; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patient_tags TO postgres;
-GRANT ALL ON TABLE public.patient_tags TO anon;
-GRANT ALL ON TABLE public.patient_tags TO authenticated;
-GRANT ALL ON TABLE public.patient_tags TO service_role;
-
-
---
--- Name: TABLE patients; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.patients TO postgres;
-GRANT ALL ON TABLE public.patients TO anon;
-GRANT ALL ON TABLE public.patients TO authenticated;
-GRANT ALL ON TABLE public.patients TO service_role;
-
-
---
--- Name: TABLE payment_settings; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.payment_settings TO postgres;
-GRANT ALL ON TABLE public.payment_settings TO anon;
-GRANT ALL ON TABLE public.payment_settings TO authenticated;
-GRANT ALL ON TABLE public.payment_settings TO service_role;
-
-
---
--- Name: TABLE plan_prices; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_prices TO postgres;
-GRANT ALL ON TABLE public.plan_prices TO anon;
-GRANT ALL ON TABLE public.plan_prices TO authenticated;
-GRANT ALL ON TABLE public.plan_prices TO service_role;
-
-
---
--- Name: TABLE plan_public; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_public TO postgres;
-GRANT ALL ON TABLE public.plan_public TO anon;
-GRANT ALL ON TABLE public.plan_public TO authenticated;
-GRANT ALL ON TABLE public.plan_public TO service_role;
-
-
---
--- Name: TABLE plan_public_bullets; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plan_public_bullets TO postgres;
-GRANT ALL ON TABLE public.plan_public_bullets TO anon;
-GRANT ALL ON TABLE public.plan_public_bullets TO authenticated;
-GRANT ALL ON TABLE public.plan_public_bullets TO service_role;
-
-
---
--- Name: TABLE plans; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.plans TO postgres;
-GRANT ALL ON TABLE public.plans TO anon;
-GRANT ALL ON TABLE public.plans TO authenticated;
-GRANT ALL ON TABLE public.plans TO service_role;
-
-
---
--- Name: TABLE professional_pricing; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.professional_pricing TO postgres;
-GRANT ALL ON TABLE public.professional_pricing TO anon;
-GRANT ALL ON TABLE public.professional_pricing TO authenticated;
-GRANT ALL ON TABLE public.professional_pricing TO service_role;
-
-
---
--- Name: TABLE profiles; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.profiles TO postgres;
-GRANT ALL ON TABLE public.profiles TO anon;
-GRANT ALL ON TABLE public.profiles TO authenticated;
-GRANT ALL ON TABLE public.profiles TO service_role;
-
-
---
--- Name: TABLE recurrence_exceptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.recurrence_exceptions TO postgres;
-GRANT ALL ON TABLE public.recurrence_exceptions TO anon;
-GRANT ALL ON TABLE public.recurrence_exceptions TO authenticated;
-GRANT ALL ON TABLE public.recurrence_exceptions TO service_role;
-
-
---
--- Name: TABLE recurrence_rule_services; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.recurrence_rule_services TO postgres;
-GRANT ALL ON TABLE public.recurrence_rule_services TO anon;
-GRANT ALL ON TABLE public.recurrence_rule_services TO authenticated;
-GRANT ALL ON TABLE public.recurrence_rule_services TO service_role;
-
-
---
--- Name: TABLE recurrence_rules; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.recurrence_rules TO postgres;
-GRANT ALL ON TABLE public.recurrence_rules TO anon;
-GRANT ALL ON TABLE public.recurrence_rules TO authenticated;
-GRANT ALL ON TABLE public.recurrence_rules TO service_role;
-
-
---
--- Name: TABLE saas_admins; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_admins TO postgres;
-GRANT ALL ON TABLE public.saas_admins TO anon;
-GRANT ALL ON TABLE public.saas_admins TO authenticated;
-GRANT ALL ON TABLE public.saas_admins TO service_role;
-
-
---
--- Name: TABLE saas_doc_votos; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_doc_votos TO postgres;
-GRANT ALL ON TABLE public.saas_doc_votos TO anon;
-GRANT ALL ON TABLE public.saas_doc_votos TO authenticated;
-GRANT ALL ON TABLE public.saas_doc_votos TO service_role;
-
-
---
--- Name: TABLE saas_docs; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_docs TO postgres;
-GRANT ALL ON TABLE public.saas_docs TO anon;
-GRANT ALL ON TABLE public.saas_docs TO authenticated;
-GRANT ALL ON TABLE public.saas_docs TO service_role;
-
-
---
--- Name: TABLE saas_faq; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_faq TO postgres;
-GRANT ALL ON TABLE public.saas_faq TO anon;
-GRANT ALL ON TABLE public.saas_faq TO authenticated;
-GRANT ALL ON TABLE public.saas_faq TO service_role;
-
-
---
--- Name: TABLE saas_faq_itens; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.saas_faq_itens TO postgres;
-GRANT ALL ON TABLE public.saas_faq_itens TO anon;
-GRANT ALL ON TABLE public.saas_faq_itens TO authenticated;
-GRANT ALL ON TABLE public.saas_faq_itens TO service_role;
-
-
---
--- Name: TABLE services; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.services TO postgres;
-GRANT ALL ON TABLE public.services TO anon;
-GRANT ALL ON TABLE public.services TO authenticated;
-GRANT ALL ON TABLE public.services TO service_role;
-
-
---
--- Name: TABLE subscription_events; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_events TO postgres;
-GRANT ALL ON TABLE public.subscription_events TO anon;
-GRANT ALL ON TABLE public.subscription_events TO authenticated;
-GRANT ALL ON TABLE public.subscription_events TO service_role;
-
-
---
--- Name: TABLE subscription_intents_personal; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents_personal TO postgres;
-GRANT ALL ON TABLE public.subscription_intents_personal TO anon;
-GRANT ALL ON TABLE public.subscription_intents_personal TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents_personal TO service_role;
-
-
---
--- Name: TABLE subscription_intents_tenant; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents_tenant TO postgres;
-GRANT ALL ON TABLE public.subscription_intents_tenant TO anon;
-GRANT ALL ON TABLE public.subscription_intents_tenant TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents_tenant TO service_role;
-
-
---
--- Name: TABLE subscription_intents; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents TO postgres;
-GRANT ALL ON TABLE public.subscription_intents TO anon;
-GRANT ALL ON TABLE public.subscription_intents TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents TO service_role;
-
-
---
--- Name: TABLE subscription_intents_legacy; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.subscription_intents_legacy TO postgres;
-GRANT ALL ON TABLE public.subscription_intents_legacy TO anon;
-GRANT ALL ON TABLE public.subscription_intents_legacy TO authenticated;
-GRANT ALL ON TABLE public.subscription_intents_legacy TO service_role;
-
-
---
--- Name: TABLE support_sessions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.support_sessions TO postgres;
-GRANT ALL ON TABLE public.support_sessions TO anon;
-GRANT ALL ON TABLE public.support_sessions TO authenticated;
-GRANT ALL ON TABLE public.support_sessions TO service_role;
-
-
---
--- Name: TABLE tenant_feature_exceptions_log; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO postgres;
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO anon;
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO authenticated;
-GRANT ALL ON TABLE public.tenant_feature_exceptions_log TO service_role;
-
-
---
--- Name: TABLE tenant_features; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_features TO postgres;
-GRANT ALL ON TABLE public.tenant_features TO anon;
-GRANT ALL ON TABLE public.tenant_features TO authenticated;
-GRANT ALL ON TABLE public.tenant_features TO service_role;
-
-
---
--- Name: TABLE tenant_invites; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenant_invites TO postgres;
-GRANT ALL ON TABLE public.tenant_invites TO authenticated;
-GRANT ALL ON TABLE public.tenant_invites TO service_role;
-
-
---
--- Name: TABLE tenants; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.tenants TO postgres;
-GRANT ALL ON TABLE public.tenants TO anon;
-GRANT ALL ON TABLE public.tenants TO authenticated;
-GRANT ALL ON TABLE public.tenants TO service_role;
-
-
---
--- Name: TABLE user_settings; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.user_settings TO postgres;
-GRANT ALL ON TABLE public.user_settings TO anon;
-GRANT ALL ON TABLE public.user_settings TO authenticated;
-GRANT ALL ON TABLE public.user_settings TO service_role;
-
-
---
--- Name: TABLE v_auth_users_public; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_auth_users_public TO postgres;
-GRANT ALL ON TABLE public.v_auth_users_public TO anon;
-GRANT ALL ON TABLE public.v_auth_users_public TO authenticated;
-GRANT ALL ON TABLE public.v_auth_users_public TO service_role;
-
-
---
--- Name: TABLE v_commitment_totals; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_commitment_totals TO postgres;
-GRANT ALL ON TABLE public.v_commitment_totals TO anon;
-GRANT ALL ON TABLE public.v_commitment_totals TO authenticated;
-GRANT ALL ON TABLE public.v_commitment_totals TO service_role;
-
-
---
--- Name: TABLE v_patient_groups_with_counts; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO postgres;
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO anon;
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO authenticated;
-GRANT ALL ON TABLE public.v_patient_groups_with_counts TO service_role;
-
-
---
--- Name: TABLE v_plan_active_prices; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_plan_active_prices TO postgres;
-GRANT ALL ON TABLE public.v_plan_active_prices TO anon;
-GRANT ALL ON TABLE public.v_plan_active_prices TO authenticated;
-GRANT ALL ON TABLE public.v_plan_active_prices TO service_role;
-
-
---
--- Name: TABLE v_public_pricing; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_public_pricing TO postgres;
-GRANT ALL ON TABLE public.v_public_pricing TO anon;
-GRANT ALL ON TABLE public.v_public_pricing TO authenticated;
-GRANT ALL ON TABLE public.v_public_pricing TO service_role;
-
-
---
--- Name: TABLE v_subscription_feature_mismatch; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO postgres;
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO anon;
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO authenticated;
-GRANT ALL ON TABLE public.v_subscription_feature_mismatch TO service_role;
-
-
---
--- Name: TABLE v_subscription_health; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_subscription_health TO postgres;
-GRANT ALL ON TABLE public.v_subscription_health TO anon;
-GRANT ALL ON TABLE public.v_subscription_health TO authenticated;
-GRANT ALL ON TABLE public.v_subscription_health TO service_role;
-
-
---
--- Name: TABLE v_subscription_health_v2; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO postgres;
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO anon;
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO authenticated;
-GRANT ALL ON TABLE public.v_subscription_health_v2 TO service_role;
-
-
---
--- Name: TABLE v_tag_patient_counts; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tag_patient_counts TO postgres;
-GRANT ALL ON TABLE public.v_tag_patient_counts TO anon;
-GRANT ALL ON TABLE public.v_tag_patient_counts TO authenticated;
-GRANT ALL ON TABLE public.v_tag_patient_counts TO service_role;
-
-
---
--- Name: TABLE v_tenant_active_subscription; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO postgres;
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO anon;
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_active_subscription TO service_role;
-
-
---
--- Name: TABLE v_tenant_entitlements; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_entitlements TO postgres;
-GRANT ALL ON TABLE public.v_tenant_entitlements TO anon;
-GRANT ALL ON TABLE public.v_tenant_entitlements TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_entitlements TO service_role;
-
-
---
--- Name: TABLE v_tenant_entitlements_full; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO postgres;
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO anon;
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_entitlements_full TO service_role;
-
-
---
--- Name: TABLE v_tenant_entitlements_json; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO postgres;
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO anon;
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_entitlements_json TO service_role;
-
-
---
--- Name: TABLE v_tenant_feature_exceptions; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO postgres;
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO anon;
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_feature_exceptions TO service_role;
-
-
---
--- Name: TABLE v_tenant_feature_mismatch; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO postgres;
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO anon;
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_feature_mismatch TO service_role;
-
-
---
--- Name: TABLE v_tenant_members_with_profiles; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO postgres;
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO anon;
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_members_with_profiles TO service_role;
-
-
---
--- Name: TABLE v_tenant_people; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_people TO postgres;
-GRANT ALL ON TABLE public.v_tenant_people TO anon;
-GRANT ALL ON TABLE public.v_tenant_people TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_people TO service_role;
-
-
---
--- Name: TABLE v_tenant_staff; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_tenant_staff TO postgres;
-GRANT ALL ON TABLE public.v_tenant_staff TO anon;
-GRANT ALL ON TABLE public.v_tenant_staff TO authenticated;
-GRANT ALL ON TABLE public.v_tenant_staff TO service_role;
-
-
---
--- Name: TABLE v_user_active_subscription; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_user_active_subscription TO postgres;
-GRANT ALL ON TABLE public.v_user_active_subscription TO anon;
-GRANT ALL ON TABLE public.v_user_active_subscription TO authenticated;
-GRANT ALL ON TABLE public.v_user_active_subscription TO service_role;
-
-
---
--- Name: TABLE v_user_entitlements; Type: ACL; Schema: public; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE public.v_user_entitlements TO postgres;
-GRANT ALL ON TABLE public.v_user_entitlements TO anon;
-GRANT ALL ON TABLE public.v_user_entitlements TO authenticated;
-GRANT ALL ON TABLE public.v_user_entitlements TO service_role;
-
-
---
--- Name: TABLE messages; Type: ACL; Schema: realtime; Owner: supabase_realtime_admin
---
-
-GRANT ALL ON TABLE realtime.messages TO postgres;
-GRANT ALL ON TABLE realtime.messages TO dashboard_user;
-GRANT SELECT,INSERT,UPDATE ON TABLE realtime.messages TO anon;
-GRANT SELECT,INSERT,UPDATE ON TABLE realtime.messages TO authenticated;
-GRANT SELECT,INSERT,UPDATE ON TABLE realtime.messages TO service_role;
-
-
---
--- Name: TABLE messages_2026_03_12; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_12 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_12 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_13; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_13 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_13 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_14; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_14 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_14 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_15; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_15 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_15 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_16; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_16 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_16 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_17; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_17 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_17 TO dashboard_user;
-
-
---
--- Name: TABLE messages_2026_03_18; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.messages_2026_03_18 TO postgres;
-GRANT ALL ON TABLE realtime.messages_2026_03_18 TO dashboard_user;
-
-
---
--- Name: TABLE schema_migrations; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.schema_migrations TO postgres;
-GRANT ALL ON TABLE realtime.schema_migrations TO dashboard_user;
-GRANT SELECT ON TABLE realtime.schema_migrations TO anon;
-GRANT SELECT ON TABLE realtime.schema_migrations TO authenticated;
-GRANT SELECT ON TABLE realtime.schema_migrations TO service_role;
-GRANT ALL ON TABLE realtime.schema_migrations TO supabase_realtime_admin;
-
-
---
--- Name: TABLE subscription; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON TABLE realtime.subscription TO postgres;
-GRANT ALL ON TABLE realtime.subscription TO dashboard_user;
-GRANT SELECT ON TABLE realtime.subscription TO anon;
-GRANT SELECT ON TABLE realtime.subscription TO authenticated;
-GRANT SELECT ON TABLE realtime.subscription TO service_role;
-GRANT ALL ON TABLE realtime.subscription TO supabase_realtime_admin;
-
-
---
--- Name: SEQUENCE subscription_id_seq; Type: ACL; Schema: realtime; Owner: supabase_admin
---
-
-GRANT ALL ON SEQUENCE realtime.subscription_id_seq TO postgres;
-GRANT ALL ON SEQUENCE realtime.subscription_id_seq TO dashboard_user;
-GRANT USAGE ON SEQUENCE realtime.subscription_id_seq TO anon;
-GRANT USAGE ON SEQUENCE realtime.subscription_id_seq TO authenticated;
-GRANT USAGE ON SEQUENCE realtime.subscription_id_seq TO service_role;
-GRANT ALL ON SEQUENCE realtime.subscription_id_seq TO supabase_realtime_admin;
-
-
---
--- Name: TABLE buckets; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.buckets TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE storage.buckets TO service_role;
-GRANT ALL ON TABLE storage.buckets TO authenticated;
-GRANT ALL ON TABLE storage.buckets TO anon;
-
-
---
--- Name: TABLE buckets_analytics; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.buckets_analytics TO service_role;
-GRANT ALL ON TABLE storage.buckets_analytics TO authenticated;
-GRANT ALL ON TABLE storage.buckets_analytics TO anon;
-
-
---
--- Name: TABLE buckets_vectors; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT SELECT ON TABLE storage.buckets_vectors TO service_role;
-GRANT SELECT ON TABLE storage.buckets_vectors TO authenticated;
-GRANT SELECT ON TABLE storage.buckets_vectors TO anon;
-
-
---
--- Name: TABLE iceberg_namespaces; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.iceberg_namespaces TO service_role;
-GRANT SELECT ON TABLE storage.iceberg_namespaces TO authenticated;
-GRANT SELECT ON TABLE storage.iceberg_namespaces TO anon;
-
-
---
--- Name: TABLE iceberg_tables; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.iceberg_tables TO service_role;
-GRANT SELECT ON TABLE storage.iceberg_tables TO authenticated;
-GRANT SELECT ON TABLE storage.iceberg_tables TO anon;
-
-
---
--- Name: TABLE objects; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.objects TO postgres WITH GRANT OPTION;
-GRANT ALL ON TABLE storage.objects TO service_role;
-GRANT ALL ON TABLE storage.objects TO authenticated;
-GRANT ALL ON TABLE storage.objects TO anon;
-
-
---
--- Name: TABLE s3_multipart_uploads; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.s3_multipart_uploads TO service_role;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads TO authenticated;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads TO anon;
-
-
---
--- Name: TABLE s3_multipart_uploads_parts; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT ALL ON TABLE storage.s3_multipart_uploads_parts TO service_role;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads_parts TO authenticated;
-GRANT SELECT ON TABLE storage.s3_multipart_uploads_parts TO anon;
-
-
---
--- Name: TABLE vector_indexes; Type: ACL; Schema: storage; Owner: supabase_storage_admin
---
-
-GRANT SELECT ON TABLE storage.vector_indexes TO service_role;
-GRANT SELECT ON TABLE storage.vector_indexes TO authenticated;
-GRANT SELECT ON TABLE storage.vector_indexes TO anon;
-
-
---
--- Name: TABLE hooks; Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-GRANT ALL ON TABLE supabase_functions.hooks TO postgres;
-GRANT ALL ON TABLE supabase_functions.hooks TO anon;
-GRANT ALL ON TABLE supabase_functions.hooks TO authenticated;
-GRANT ALL ON TABLE supabase_functions.hooks TO service_role;
-
-
---
--- Name: SEQUENCE hooks_id_seq; Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO postgres;
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO anon;
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO authenticated;
-GRANT ALL ON SEQUENCE supabase_functions.hooks_id_seq TO service_role;
-
-
---
--- Name: TABLE migrations; Type: ACL; Schema: supabase_functions; Owner: supabase_functions_admin
---
-
-GRANT ALL ON TABLE supabase_functions.migrations TO postgres;
-GRANT ALL ON TABLE supabase_functions.migrations TO anon;
-GRANT ALL ON TABLE supabase_functions.migrations TO authenticated;
-GRANT ALL ON TABLE supabase_functions.migrations TO service_role;
-
-
---
--- Name: TABLE secrets; Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT SELECT,REFERENCES,DELETE,TRUNCATE ON TABLE vault.secrets TO postgres WITH GRANT OPTION;
-GRANT SELECT,DELETE ON TABLE vault.secrets TO service_role;
-
-
---
--- Name: TABLE decrypted_secrets; Type: ACL; Schema: vault; Owner: supabase_admin
---
-
-GRANT SELECT,REFERENCES,DELETE,TRUNCATE ON TABLE vault.decrypted_secrets TO postgres WITH GRANT OPTION;
-GRANT SELECT,DELETE ON TABLE vault.decrypted_secrets TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON SEQUENCES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON FUNCTIONS TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON TABLES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON SEQUENCES TO postgres WITH GRANT OPTION;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON FUNCTIONS TO postgres WITH GRANT OPTION;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON TABLES TO postgres WITH GRANT OPTION;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: public; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: public; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: public; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON SEQUENCES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON FUNCTIONS TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON TABLES TO dashboard_user;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: storage; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: storage; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: storage; Owner: postgres
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: supabase_functions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: supabase_functions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO service_role;
-
-
---
--- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: supabase_functions; Owner: supabase_admin
---
-
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO postgres;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO anon;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO authenticated;
-ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA supabase_functions GRANT ALL ON TABLES TO service_role;
-
-
---
--- Name: issue_graphql_placeholder; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_graphql_placeholder ON sql_drop
- WHEN TAG IN ('DROP EXTENSION')
- EXECUTE FUNCTION extensions.set_graphql_placeholder();
-
-
-ALTER EVENT TRIGGER issue_graphql_placeholder OWNER TO supabase_admin;
-
---
--- Name: issue_pg_cron_access; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_pg_cron_access ON ddl_command_end
- WHEN TAG IN ('CREATE EXTENSION')
- EXECUTE FUNCTION extensions.grant_pg_cron_access();
-
-
-ALTER EVENT TRIGGER issue_pg_cron_access OWNER TO supabase_admin;
-
---
--- Name: issue_pg_graphql_access; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_pg_graphql_access ON ddl_command_end
- WHEN TAG IN ('CREATE FUNCTION')
- EXECUTE FUNCTION extensions.grant_pg_graphql_access();
-
-
-ALTER EVENT TRIGGER issue_pg_graphql_access OWNER TO supabase_admin;
-
---
--- Name: issue_pg_net_access; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER issue_pg_net_access ON ddl_command_end
- WHEN TAG IN ('CREATE EXTENSION')
- EXECUTE FUNCTION extensions.grant_pg_net_access();
-
-
-ALTER EVENT TRIGGER issue_pg_net_access OWNER TO supabase_admin;
-
---
--- Name: pgrst_ddl_watch; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER pgrst_ddl_watch ON ddl_command_end
- EXECUTE FUNCTION extensions.pgrst_ddl_watch();
-
-
-ALTER EVENT TRIGGER pgrst_ddl_watch OWNER TO supabase_admin;
-
---
--- Name: pgrst_drop_watch; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin
---
-
-CREATE EVENT TRIGGER pgrst_drop_watch ON sql_drop
- EXECUTE FUNCTION extensions.pgrst_drop_watch();
-
-
-ALTER EVENT TRIGGER pgrst_drop_watch OWNER TO supabase_admin;
-
---
--- PostgreSQL database dump complete
---
-
-\unrestrict jIaZyygk9Cg9Z4ELczVcfs8ceh7EIWutd6NCBTzG3dunNfjBgnAm5uGtlm0D4Zf
-
diff --git a/Nova-Dev-Doc/supervisor_fase1.sql b/Nova-Dev-Doc/supervisor_fase1.sql
deleted file mode 100644
index 87ecaa1..0000000
--- a/Nova-Dev-Doc/supervisor_fase1.sql
+++ /dev/null
@@ -1,414 +0,0 @@
--- ============================================================
--- SUPERVISOR — Fase 1
--- Aplicar no Supabase SQL Editor (em ordem)
--- ============================================================
-
-
--- ────────────────────────────────────────────────────────────
--- 1. tenants.kind → adiciona 'supervisor'
--- ────────────────────────────────────────────────────────────
-ALTER TABLE public.tenants
- DROP CONSTRAINT IF EXISTS tenants_kind_check;
-
-ALTER TABLE public.tenants
- ADD CONSTRAINT tenants_kind_check
- CHECK (kind = ANY (ARRAY[
- 'therapist',
- 'clinic_coworking',
- 'clinic_reception',
- 'clinic_full',
- 'clinic',
- 'saas',
- 'supervisor' -- ← novo
- ]));
-
-
--- ────────────────────────────────────────────────────────────
--- 2. plans.target → adiciona 'supervisor'
--- ────────────────────────────────────────────────────────────
-ALTER TABLE public.plans
- DROP CONSTRAINT IF EXISTS plans_target_check;
-
-ALTER TABLE public.plans
- ADD CONSTRAINT plans_target_check
- CHECK (target = ANY (ARRAY[
- 'patient',
- 'therapist',
- 'clinic',
- 'supervisor' -- ← novo
- ]));
-
-
--- ────────────────────────────────────────────────────────────
--- 3. plans.max_supervisees — limite de supervisionados
--- ────────────────────────────────────────────────────────────
-ALTER TABLE public.plans
- ADD COLUMN IF NOT EXISTS max_supervisees integer DEFAULT NULL;
-
-COMMENT ON COLUMN public.plans.max_supervisees IS
- 'Limite de terapeutas que podem ser supervisionados. Apenas para planos target=supervisor. NULL = sem limite.';
-
-
--- ────────────────────────────────────────────────────────────
--- 4. Planos supervisor_free e supervisor_pro
--- ────────────────────────────────────────────────────────────
-INSERT INTO public.plans (key, name, description, target, is_active, max_supervisees)
-VALUES
- (
- 'supervisor_free',
- 'Supervisor Free',
- 'Plano gratuito de supervisão. Até 3 terapeutas supervisionados.',
- 'supervisor',
- true,
- 3
- ),
- (
- 'supervisor_pro',
- 'Supervisor PRO',
- 'Plano profissional de supervisão. Até 20 terapeutas supervisionados.',
- 'supervisor',
- true,
- 20
- )
-ON CONFLICT (key) DO UPDATE
- SET
- name = EXCLUDED.name,
- description = EXCLUDED.description,
- target = EXCLUDED.target,
- is_active = EXCLUDED.is_active,
- max_supervisees = EXCLUDED.max_supervisees;
-
-
--- ────────────────────────────────────────────────────────────
--- 5. Features de supervisor
--- ────────────────────────────────────────────────────────────
-INSERT INTO public.features (key, name, descricao)
-VALUES
- (
- 'supervisor.access',
- 'Acesso à Supervisão',
- 'Acesso básico ao espaço de supervisão (sala, lista de supervisionados).'
- ),
- (
- 'supervisor.invite',
- 'Convidar Supervisionados',
- 'Permite convidar terapeutas para participar da sala de supervisão.'
- ),
- (
- 'supervisor.sessions',
- 'Sessões de Supervisão',
- 'Agendamento e registro de sessões de supervisão.'
- ),
- (
- 'supervisor.reports',
- 'Relatórios de Supervisão',
- 'Relatórios avançados de progresso e evolução dos supervisionados.'
- )
-ON CONFLICT (key) DO UPDATE
- SET
- name = EXCLUDED.name,
- descricao = EXCLUDED.descricao;
-
-
--- ────────────────────────────────────────────────────────────
--- 6. plan_features — vincula features aos planos supervisor
--- ────────────────────────────────────────────────────────────
-DO $$
-DECLARE
- v_free_id uuid;
- v_pro_id uuid;
- v_f_access uuid;
- v_f_invite uuid;
- v_f_sessions uuid;
- v_f_reports uuid;
-BEGIN
- SELECT id INTO v_free_id FROM public.plans WHERE key = 'supervisor_free';
- SELECT id INTO v_pro_id FROM public.plans WHERE key = 'supervisor_pro';
-
- SELECT id INTO v_f_access FROM public.features WHERE key = 'supervisor.access';
- SELECT id INTO v_f_invite FROM public.features WHERE key = 'supervisor.invite';
- SELECT id INTO v_f_sessions FROM public.features WHERE key = 'supervisor.sessions';
- SELECT id INTO v_f_reports FROM public.features WHERE key = 'supervisor.reports';
-
- -- supervisor_free: access + invite (limitado por max_supervisees=3)
- INSERT INTO public.plan_features (plan_id, feature_id)
- VALUES
- (v_free_id, v_f_access),
- (v_free_id, v_f_invite)
- ON CONFLICT DO NOTHING;
-
- -- supervisor_pro: tudo
- INSERT INTO public.plan_features (plan_id, feature_id)
- VALUES
- (v_pro_id, v_f_access),
- (v_pro_id, v_f_invite),
- (v_pro_id, v_f_sessions),
- (v_pro_id, v_f_reports)
- ON CONFLICT DO NOTHING;
-END;
-$$;
-
-
--- ────────────────────────────────────────────────────────────
--- 7. activate_subscription_from_intent — suporte a supervisor
--- Supervisor = pessoal (user_id), sem tenant_id (igual therapist)
--- ────────────────────────────────────────────────────────────
-CREATE OR REPLACE FUNCTION public.activate_subscription_from_intent(p_intent_id uuid)
-RETURNS public.subscriptions
-LANGUAGE plpgsql SECURITY DEFINER
-AS $$
-declare
- v_intent record;
- v_sub public.subscriptions;
- v_days int;
- v_user_id uuid;
- v_plan_id uuid;
- v_target text;
-begin
- -- lê pela VIEW unificada
- select * into v_intent
- from public.subscription_intents
- where id = p_intent_id;
-
- if not found then
- raise exception 'Intent não encontrado: %', p_intent_id;
- end if;
-
- if v_intent.status <> 'paid' then
- raise exception 'Intent precisa estar paid para ativar assinatura';
- end if;
-
- -- resolve target e plan_id via plans.key
- select p.id, p.target
- into v_plan_id, v_target
- from public.plans p
- where p.key = v_intent.plan_key
- limit 1;
-
- if v_plan_id is null then
- raise exception 'Plano não encontrado em plans.key = %', v_intent.plan_key;
- end if;
-
- v_target := lower(coalesce(v_target, ''));
-
- -- ✅ supervisor adicionado
- if v_target not in ('clinic', 'therapist', 'supervisor') then
- raise exception 'Target inválido em plans.target: %', v_target;
- end if;
-
- -- regra por target
- if v_target = 'clinic' then
- if v_intent.tenant_id is null then
- raise exception 'Intent sem tenant_id';
- end if;
- else
- -- therapist ou supervisor: vinculado ao user
- v_user_id := v_intent.user_id;
- if v_user_id is null then
- v_user_id := v_intent.created_by_user_id;
- end if;
- end if;
-
- if v_target in ('therapist', 'supervisor') and v_user_id is null then
- raise exception 'Não foi possível determinar user_id para assinatura %.', v_target;
- end if;
-
- -- cancela assinatura ativa anterior
- if v_target = 'clinic' then
- update public.subscriptions
- set status = 'cancelled',
- cancelled_at = now()
- where tenant_id = v_intent.tenant_id
- and plan_id = v_plan_id
- and status = 'active';
- else
- -- therapist ou supervisor
- update public.subscriptions
- set status = 'cancelled',
- cancelled_at = now()
- where user_id = v_user_id
- and plan_id = v_plan_id
- and status = 'active'
- and tenant_id is null;
- end if;
-
- -- duração do plano (30 dias para mensal)
- v_days := case
- when lower(coalesce(v_intent.interval, 'month')) = 'year' then 365
- else 30
- end;
-
- -- cria nova assinatura
- insert into public.subscriptions (
- user_id,
- plan_id,
- status,
- started_at,
- expires_at,
- cancelled_at,
- activated_at,
- tenant_id,
- plan_key,
- interval,
- source,
- created_at,
- updated_at
- )
- values (
- case when v_target = 'clinic' then null else v_user_id end,
- v_plan_id,
- 'active',
- now(),
- now() + make_interval(days => v_days),
- null,
- now(),
- case when v_target = 'clinic' then v_intent.tenant_id else null end,
- v_intent.plan_key,
- v_intent.interval,
- 'manual',
- now(),
- now()
- )
- returning * into v_sub;
-
- -- grava vínculo intent → subscription
- if v_target = 'clinic' then
- update public.subscription_intents_tenant
- set subscription_id = v_sub.id
- where id = p_intent_id;
- else
- update public.subscription_intents_personal
- set subscription_id = v_sub.id
- where id = p_intent_id;
- end if;
-
- return v_sub;
-end;
-$$;
-
-
--- ────────────────────────────────────────────────────────────
--- 8. subscriptions_validate_scope — suporte a supervisor
--- ────────────────────────────────────────────────────────────
-CREATE OR REPLACE FUNCTION public.subscriptions_validate_scope()
-RETURNS trigger
-LANGUAGE plpgsql
-AS $$
-DECLARE
- v_target text;
-BEGIN
- SELECT lower(p.target) INTO v_target
- FROM public.plans p
- WHERE p.id = NEW.plan_id;
-
- IF v_target IS NULL THEN
- RAISE EXCEPTION 'Plano inválido (target nulo).';
- END IF;
-
- IF v_target = 'clinic' THEN
- IF NEW.tenant_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura clinic exige tenant_id.';
- END IF;
- IF NEW.user_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura clinic não pode ter user_id (XOR).';
- END IF;
-
- ELSIF v_target IN ('therapist', 'supervisor') THEN
- -- supervisor é pessoal como therapist
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura % não deve ter tenant_id.', v_target;
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura % exige user_id.', v_target;
- END IF;
-
- ELSIF v_target = 'patient' THEN
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura patient não deve ter tenant_id.';
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura patient exige user_id.';
- END IF;
-
- ELSE
- RAISE EXCEPTION 'Target de plano inválido: %', v_target;
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-
--- ────────────────────────────────────────────────────────────
--- 9. subscription_intents_view_insert — suporte a supervisor
--- supervisor é roteado como therapist (tabela personal)
--- ────────────────────────────────────────────────────────────
-CREATE OR REPLACE FUNCTION public.subscription_intents_view_insert()
-RETURNS trigger
-LANGUAGE plpgsql SECURITY DEFINER
-AS $$
-declare
- v_target text;
- v_plan_id uuid;
-begin
- select p.id, p.target into v_plan_id, v_target
- from public.plans p
- where p.key = new.plan_key;
-
- if v_plan_id is null then
- raise exception 'Plano inválido: plan_key=%', new.plan_key;
- end if;
-
- if lower(v_target) = 'clinic' then
- if new.tenant_id is null then
- raise exception 'Intenção clinic exige tenant_id.';
- end if;
-
- insert into public.subscription_intents_tenant (
- id, tenant_id, created_by_user_id, email,
- plan_id, plan_key, interval, amount_cents, currency,
- status, source, notes, created_at, paid_at
- ) values (
- coalesce(new.id, gen_random_uuid()),
- new.tenant_id, new.created_by_user_id, new.email,
- v_plan_id, new.plan_key, coalesce(new.interval,'month'),
- new.amount_cents, coalesce(new.currency,'BRL'),
- coalesce(new.status,'pending'), coalesce(new.source,'manual'),
- new.notes, coalesce(new.created_at, now()), new.paid_at
- );
-
- new.plan_target := 'clinic';
- return new;
- end if;
-
- -- therapist ou supervisor → tabela personal
- if lower(v_target) in ('therapist', 'supervisor') then
- insert into public.subscription_intents_personal (
- id, user_id, created_by_user_id, email,
- plan_id, plan_key, interval, amount_cents, currency,
- status, source, notes, created_at, paid_at
- ) values (
- coalesce(new.id, gen_random_uuid()),
- new.user_id, new.created_by_user_id, new.email,
- v_plan_id, new.plan_key, coalesce(new.interval,'month'),
- new.amount_cents, coalesce(new.currency,'BRL'),
- coalesce(new.status,'pending'), coalesce(new.source,'manual'),
- new.notes, coalesce(new.created_at, now()), new.paid_at
- );
-
- new.plan_target := lower(v_target); -- 'therapist' ou 'supervisor'
- return new;
- end if;
-
- raise exception 'Target de plano não suportado: %', v_target;
-end;
-$$;
-
-
--- ────────────────────────────────────────────────────────────
--- FIM — verificação rápida
--- ────────────────────────────────────────────────────────────
-SELECT key, name, target, max_supervisees
-FROM public.plans
-WHERE target = 'supervisor'
-ORDER BY key;
diff --git a/Novo-DB/fix_missing_subscriptions.sql b/Novo-DB/fix_missing_subscriptions.sql
deleted file mode 100644
index 898766d..0000000
--- a/Novo-DB/fix_missing_subscriptions.sql
+++ /dev/null
@@ -1,220 +0,0 @@
--- =============================================================================
--- FIX: Atribuir plano free a usuários/tenants sem assinatura ativa
--- =============================================================================
--- Execute no SQL Editor do Supabase (service_role)
--- Idempotente: só insere onde não existe assinatura ativa.
---
--- Regras:
--- • tenant kind = 'therapist' → therapist_free (por user_id do admin)
--- • tenant kind IN (clinic_*) → clinic_free (por tenant_id)
--- • profiles.account_type = 'patient' / portal_user → patient_free (por user_id)
--- =============================================================================
-
-BEGIN;
-
--- ──────────────────────────────────────────────────────────────────────────────
--- DIAGNÓSTICO — mostra o estado atual antes de corrigir
--- ──────────────────────────────────────────────────────────────────────────────
-
-DO $$
-DECLARE
- r RECORD;
-BEGIN
- RAISE NOTICE '=== DIAGNÓSTICO DE ASSINATURAS ===';
- RAISE NOTICE '';
-
- -- Terapeutas sem plano
- RAISE NOTICE '--- Terapeutas SEM assinatura ativa ---';
- FOR r IN
- SELECT
- tm.user_id,
- p.full_name,
- t.id AS tenant_id,
- t.name AS tenant_name
- FROM public.tenant_members tm
- JOIN public.tenants t ON t.id = tm.tenant_id
- JOIN public.profiles p ON p.id = tm.user_id
- WHERE t.kind = 'therapist'
- AND tm.role = 'tenant_admin'
- AND tm.status = 'active'
- AND NOT EXISTS (
- SELECT 1 FROM public.subscriptions s
- WHERE s.user_id = tm.user_id
- AND s.status = 'active'
- )
- LOOP
- RAISE NOTICE ' FALTANDO: % (%) — tenant %', r.full_name, r.user_id, r.tenant_id;
- END LOOP;
-
- -- Clínicas sem plano
- RAISE NOTICE '';
- RAISE NOTICE '--- Clínicas SEM assinatura ativa ---';
- FOR r IN
- SELECT t.id, t.name, t.kind
- FROM public.tenants t
- WHERE t.kind IN ('clinic_coworking', 'clinic_reception', 'clinic_full', 'clinic')
- AND NOT EXISTS (
- SELECT 1 FROM public.subscriptions s
- WHERE s.tenant_id = t.id
- AND s.status = 'active'
- )
- LOOP
- RAISE NOTICE ' FALTANDO: % (%) — kind %', r.name, r.id, r.kind;
- END LOOP;
-
- -- Pacientes sem plano
- RAISE NOTICE '';
- RAISE NOTICE '--- Pacientes SEM assinatura ativa ---';
- FOR r IN
- SELECT p.id, p.full_name
- FROM public.profiles p
- WHERE p.account_type = 'patient'
- AND NOT EXISTS (
- SELECT 1 FROM public.subscriptions s
- WHERE s.user_id = p.id
- AND s.status = 'active'
- )
- LOOP
- RAISE NOTICE ' FALTANDO: % (%)', r.full_name, r.id;
- END LOOP;
-
- RAISE NOTICE '';
- RAISE NOTICE '=== FIM DO DIAGNÓSTICO — aplicando correções... ===';
-END;
-$$;
-
-
--- ──────────────────────────────────────────────────────────────────────────────
--- CORREÇÃO 1: Terapeutas sem assinatura → therapist_free
--- Escopo: user_id do tenant_admin do tenant kind='therapist'
--- ──────────────────────────────────────────────────────────────────────────────
-
-INSERT INTO public.subscriptions (
- user_id, plan_id, plan_key, status, interval,
- current_period_start, current_period_end,
- source, started_at, activated_at
-)
-SELECT
- tm.user_id,
- p.id,
- p.key,
- 'active',
- 'month',
- now(),
- now() + interval '30 days',
- 'fix_seed',
- now(),
- now()
-FROM public.tenant_members tm
-JOIN public.tenants t ON t.id = tm.tenant_id
-JOIN public.plans p ON p.key = 'therapist_free'
-WHERE t.kind = 'therapist'
- AND tm.role = 'tenant_admin'
- AND tm.status = 'active'
- AND NOT EXISTS (
- SELECT 1 FROM public.subscriptions s
- WHERE s.user_id = tm.user_id
- AND s.status = 'active'
- );
-
-
--- ──────────────────────────────────────────────────────────────────────────────
--- CORREÇÃO 2: Clínicas sem assinatura → clinic_free
--- Escopo: tenant_id
--- ──────────────────────────────────────────────────────────────────────────────
-
-INSERT INTO public.subscriptions (
- tenant_id, plan_id, plan_key, status, interval,
- current_period_start, current_period_end,
- source, started_at, activated_at
-)
-SELECT
- t.id,
- p.id,
- p.key,
- 'active',
- 'month',
- now(),
- now() + interval '30 days',
- 'fix_seed',
- now(),
- now()
-FROM public.tenants t
-JOIN public.plans p ON p.key = 'clinic_free'
-WHERE t.kind IN ('clinic_coworking', 'clinic_reception', 'clinic_full', 'clinic')
- AND NOT EXISTS (
- SELECT 1 FROM public.subscriptions s
- WHERE s.tenant_id = t.id
- AND s.status = 'active'
- );
-
-
--- ──────────────────────────────────────────────────────────────────────────────
--- CORREÇÃO 3: Pacientes sem assinatura → patient_free
--- Escopo: user_id
--- ──────────────────────────────────────────────────────────────────────────────
-
-INSERT INTO public.subscriptions (
- user_id, plan_id, plan_key, status, interval,
- current_period_start, current_period_end,
- source, started_at, activated_at
-)
-SELECT
- pr.id,
- p.id,
- p.key,
- 'active',
- 'month',
- now(),
- now() + interval '30 days',
- 'fix_seed',
- now(),
- now()
-FROM public.profiles pr
-JOIN public.plans p ON p.key = 'patient_free'
-WHERE pr.account_type = 'patient'
- AND NOT EXISTS (
- SELECT 1 FROM public.subscriptions s
- WHERE s.user_id = pr.id
- AND s.status = 'active'
- );
-
-
--- ──────────────────────────────────────────────────────────────────────────────
--- CONFIRMAÇÃO — mostra o que foi inserido (source = 'fix_seed')
--- ──────────────────────────────────────────────────────────────────────────────
-
-DO $$
-DECLARE
- r RECORD;
- total INT := 0;
-BEGIN
- RAISE NOTICE '';
- RAISE NOTICE '=== ASSINATURAS CRIADAS NESTA EXECUÇÃO ===';
-
- FOR r IN
- SELECT
- s.plan_key,
- COALESCE(pr.full_name, t.name) AS nome,
- COALESCE(s.user_id::text, s.tenant_id::text) AS owner_id
- FROM public.subscriptions s
- LEFT JOIN public.profiles pr ON pr.id = s.user_id
- LEFT JOIN public.tenants t ON t.id = s.tenant_id
- WHERE s.source = 'fix_seed'
- AND s.started_at >= now() - interval '5 seconds'
- ORDER BY s.plan_key, nome
- LOOP
- RAISE NOTICE ' ✅ % → % (%)', r.plan_key, r.nome, r.owner_id;
- total := total + 1;
- END LOOP;
-
- IF total = 0 THEN
- RAISE NOTICE ' (nenhuma nova assinatura criada — todos já tinham plano ativo)';
- ELSE
- RAISE NOTICE '';
- RAISE NOTICE ' Total: % assinatura(s) criada(s).', total;
- END IF;
-END;
-$$;
-
-COMMIT;
diff --git a/Novo-DB/fix_subscriptions_validate_scope.sql b/Novo-DB/fix_subscriptions_validate_scope.sql
deleted file mode 100644
index 8aa8b69..0000000
--- a/Novo-DB/fix_subscriptions_validate_scope.sql
+++ /dev/null
@@ -1,50 +0,0 @@
--- Fix: subscriptions_validate_scope — adiciona suporte a target='patient'
-
-CREATE OR REPLACE FUNCTION public.subscriptions_validate_scope()
-RETURNS trigger
-LANGUAGE plpgsql
-AS $$
-DECLARE
- v_target text;
-BEGIN
- SELECT lower(p.target) INTO v_target
- FROM public.plans p
- WHERE p.id = NEW.plan_id;
-
- IF v_target IS NULL THEN
- RAISE EXCEPTION 'Plano inválido (target nulo).';
- END IF;
-
- IF v_target = 'clinic' THEN
- IF NEW.tenant_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura clinic exige tenant_id.';
- END IF;
- IF NEW.user_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura clinic não pode ter user_id (XOR).';
- END IF;
-
- ELSIF v_target = 'therapist' THEN
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura therapist não deve ter tenant_id.';
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura therapist exige user_id.';
- END IF;
-
- ELSIF v_target = 'patient' THEN
- IF NEW.tenant_id IS NOT NULL THEN
- RAISE EXCEPTION 'Assinatura patient não deve ter tenant_id.';
- END IF;
- IF NEW.user_id IS NULL THEN
- RAISE EXCEPTION 'Assinatura patient exige user_id.';
- END IF;
-
- ELSE
- RAISE EXCEPTION 'Target de plano inválido: %', v_target;
- END IF;
-
- RETURN NEW;
-END;
-$$;
-
-ALTER FUNCTION public.subscriptions_validate_scope() OWNER TO supabase_admin;
diff --git a/Novo-DB/migration_001.sql b/Novo-DB/migration_001.sql
deleted file mode 100644
index 74c6764..0000000
--- a/Novo-DB/migration_001.sql
+++ /dev/null
@@ -1,296 +0,0 @@
--- =============================================================================
--- SEED 001 — Usuários fictícios para teste
--- =============================================================================
--- Execute APÓS migration_001.sql
---
--- Usuários criados:
--- paciente@agenciapsi.com.br senha: Teste@123 → patient
--- terapeuta@agenciapsi.com.br senha: Teste@123 → therapist
--- clinica1@agenciapsi.com.br senha: Teste@123 → clinic_coworking
--- clinica2@agenciapsi.com.br senha: Teste@123 → clinic_reception
--- clinica3@agenciapsi.com.br senha: Teste@123 → clinic_full
--- saas@agenciapsi.com.br senha: Teste@123 → saas_admin
--- =============================================================================
-
-
--- ============================================================
--- Limpeza de seeds anteriores
--- ============================================================
-
-ALTER TABLE public.patient_groups DISABLE TRIGGER ALL;
-
-DELETE FROM public.tenant_members
-WHERE user_id IN (
- SELECT id FROM auth.users
- WHERE email IN (
- 'paciente@agenciapsi.com.br',
- 'terapeuta@agenciapsi.com.br',
- 'clinica1@agenciapsi.com.br',
- 'clinica2@agenciapsi.com.br',
- 'clinica3@agenciapsi.com.br',
- 'saas@agenciapsi.com.br'
- )
-);
-
-DELETE FROM public.tenants WHERE id IN (
- 'bbbbbbbb-0002-0002-0002-000000000002',
- 'bbbbbbbb-0003-0003-0003-000000000003',
- 'bbbbbbbb-0004-0004-0004-000000000004',
- 'bbbbbbbb-0005-0005-0005-000000000005'
-);
-
-DELETE FROM auth.users WHERE email IN (
- 'paciente@agenciapsi.com.br',
- 'terapeuta@agenciapsi.com.br',
- 'clinica1@agenciapsi.com.br',
- 'clinica2@agenciapsi.com.br',
- 'clinica3@agenciapsi.com.br',
- 'saas@agenciapsi.com.br'
-);
-
-ALTER TABLE public.patient_groups ENABLE TRIGGER ALL;
-
-
--- ============================================================
--- 1. Usuários no auth.users
--- ============================================================
-
-INSERT INTO auth.users (
- id, email, encrypted_password, email_confirmed_at,
- created_at, updated_at, raw_user_meta_data, role, aud
-)
-VALUES
- (
- 'aaaaaaaa-0001-0001-0001-000000000001',
- 'paciente@agenciapsi.com.br',
- crypt('Teste@123', gen_salt('bf')),
- now(), now(), now(),
- '{"name": "Ana Paciente"}'::jsonb,
- 'authenticated', 'authenticated'
- ),
- (
- 'aaaaaaaa-0002-0002-0002-000000000002',
- 'terapeuta@agenciapsi.com.br',
- crypt('Teste@123', gen_salt('bf')),
- now(), now(), now(),
- '{"name": "Bruno Terapeuta"}'::jsonb,
- 'authenticated', 'authenticated'
- ),
- (
- 'aaaaaaaa-0003-0003-0003-000000000003',
- 'clinica1@agenciapsi.com.br',
- crypt('Teste@123', gen_salt('bf')),
- now(), now(), now(),
- '{"name": "Clinica Espaco Psi"}'::jsonb,
- 'authenticated', 'authenticated'
- ),
- (
- 'aaaaaaaa-0004-0004-0004-000000000004',
- 'clinica2@agenciapsi.com.br',
- crypt('Teste@123', gen_salt('bf')),
- now(), now(), now(),
- '{"name": "Clinica Mente Sa"}'::jsonb,
- 'authenticated', 'authenticated'
- ),
- (
- 'aaaaaaaa-0005-0005-0005-000000000005',
- 'clinica3@agenciapsi.com.br',
- crypt('Teste@123', gen_salt('bf')),
- now(), now(), now(),
- '{"name": "Clinica Bem Estar"}'::jsonb,
- 'authenticated', 'authenticated'
- ),
- (
- 'aaaaaaaa-0006-0006-0006-000000000006',
- 'saas@agenciapsi.com.br',
- crypt('Teste@123', gen_salt('bf')),
- now(), now(), now(),
- '{"name": "Admin Plataforma"}'::jsonb,
- 'authenticated', 'authenticated'
- );
-
-
--- ============================================================
--- 2. Profiles
--- ============================================================
-
-INSERT INTO public.profiles (id, role, account_type, full_name)
-VALUES
- ('aaaaaaaa-0001-0001-0001-000000000001', 'portal_user', 'patient', 'Ana Paciente'),
- ('aaaaaaaa-0002-0002-0002-000000000002', 'portal_user', 'therapist', 'Bruno Terapeuta'),
- ('aaaaaaaa-0003-0003-0003-000000000003', 'portal_user', 'clinic', 'Clinica Espaco Psi'),
- ('aaaaaaaa-0004-0004-0004-000000000004', 'portal_user', 'clinic', 'Clinica Mente Sa'),
- ('aaaaaaaa-0005-0005-0005-000000000005', 'portal_user', 'clinic', 'Clinica Bem Estar'),
- ('aaaaaaaa-0006-0006-0006-000000000006', 'saas_admin', 'free', 'Admin Plataforma')
-ON CONFLICT (id) DO UPDATE SET
- role = EXCLUDED.role,
- account_type = EXCLUDED.account_type,
- full_name = EXCLUDED.full_name;
-
-
--- ============================================================
--- 3. SaaS Admin
--- ============================================================
-
-INSERT INTO public.saas_admins (user_id, created_at)
-VALUES ('aaaaaaaa-0006-0006-0006-000000000006', now())
-ON CONFLICT (user_id) DO NOTHING;
-
-
--- ============================================================
--- 4. Tenant do terapeuta
--- ============================================================
-
-INSERT INTO public.tenants (id, name, kind, created_at)
-VALUES ('bbbbbbbb-0002-0002-0002-000000000002', 'Bruno Terapeuta', 'therapist', now())
-ON CONFLICT (id) DO NOTHING;
-
-INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
-VALUES ('bbbbbbbb-0002-0002-0002-000000000002', 'aaaaaaaa-0002-0002-0002-000000000002', 'tenant_admin', 'active', now())
-ON CONFLICT (tenant_id, user_id) DO NOTHING;
-
-DO $$ BEGIN
- PERFORM public.seed_determined_commitments('bbbbbbbb-0002-0002-0002-000000000002');
-END; $$;
-
-
--- ============================================================
--- 5. Tenant Clinica 1 — Coworking
--- ============================================================
-
-INSERT INTO public.tenants (id, name, kind, created_at)
-VALUES ('bbbbbbbb-0003-0003-0003-000000000003', 'Clinica Espaco Psi', 'clinic_coworking', now())
-ON CONFLICT (id) DO NOTHING;
-
-INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
-VALUES ('bbbbbbbb-0003-0003-0003-000000000003', 'aaaaaaaa-0003-0003-0003-000000000003', 'tenant_admin', 'active', now())
-ON CONFLICT (tenant_id, user_id) DO NOTHING;
-
-DO $$ BEGIN
- PERFORM public.seed_determined_commitments('bbbbbbbb-0003-0003-0003-000000000003');
-END; $$;
-
-
--- ============================================================
--- 6. Tenant Clinica 2 — Recepcao
--- ============================================================
-
-INSERT INTO public.tenants (id, name, kind, created_at)
-VALUES ('bbbbbbbb-0004-0004-0004-000000000004', 'Clinica Mente Sa', 'clinic_reception', now())
-ON CONFLICT (id) DO NOTHING;
-
-INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
-VALUES ('bbbbbbbb-0004-0004-0004-000000000004', 'aaaaaaaa-0004-0004-0004-000000000004', 'tenant_admin', 'active', now())
-ON CONFLICT (tenant_id, user_id) DO NOTHING;
-
-DO $$ BEGIN
- PERFORM public.seed_determined_commitments('bbbbbbbb-0004-0004-0004-000000000004');
-END; $$;
-
-
--- ============================================================
--- 7. Tenant Clinica 3 — Full
--- ============================================================
-
-INSERT INTO public.tenants (id, name, kind, created_at)
-VALUES ('bbbbbbbb-0005-0005-0005-000000000005', 'Clinica Bem Estar', 'clinic_full', now())
-ON CONFLICT (id) DO NOTHING;
-
-INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
-VALUES ('bbbbbbbb-0005-0005-0005-000000000005', 'aaaaaaaa-0005-0005-0005-000000000005', 'tenant_admin', 'active', now())
-ON CONFLICT (tenant_id, user_id) DO NOTHING;
-
-DO $$ BEGIN
- PERFORM public.seed_determined_commitments('bbbbbbbb-0005-0005-0005-000000000005');
-END; $$;
-
-
--- ============================================================
--- 8. Subscriptions ativas
--- ============================================================
-
--- Paciente → patient_free
-INSERT INTO public.subscriptions (
- user_id, plan_id, plan_key, status, interval,
- current_period_start, current_period_end, source, started_at, activated_at
-)
-SELECT
- 'aaaaaaaa-0001-0001-0001-000000000001',
- p.id, p.key, 'active', 'month',
- now(), now() + interval '30 days', 'seed', now(), now()
-FROM public.plans p WHERE p.key = 'patient_free';
-
--- Terapeuta → therapist_free
-INSERT INTO public.subscriptions (
- user_id, plan_id, plan_key, status, interval,
- current_period_start, current_period_end, source, started_at, activated_at
-)
-SELECT
- 'aaaaaaaa-0002-0002-0002-000000000002',
- p.id, p.key, 'active', 'month',
- now(), now() + interval '30 days', 'seed', now(), now()
-FROM public.plans p WHERE p.key = 'therapist_free';
-
--- Clinica 1 → clinic_free
-INSERT INTO public.subscriptions (
- tenant_id, plan_id, plan_key, status, interval,
- current_period_start, current_period_end, source, started_at, activated_at
-)
-SELECT
- 'bbbbbbbb-0003-0003-0003-000000000003',
- p.id, p.key, 'active', 'month',
- now(), now() + interval '30 days', 'seed', now(), now()
-FROM public.plans p WHERE p.key = 'clinic_free';
-
--- Clinica 2 → clinic_free
-INSERT INTO public.subscriptions (
- tenant_id, plan_id, plan_key, status, interval,
- current_period_start, current_period_end, source, started_at, activated_at
-)
-SELECT
- 'bbbbbbbb-0004-0004-0004-000000000004',
- p.id, p.key, 'active', 'month',
- now(), now() + interval '30 days', 'seed', now(), now()
-FROM public.plans p WHERE p.key = 'clinic_free';
-
--- Clinica 3 → clinic_free
-INSERT INTO public.subscriptions (
- tenant_id, plan_id, plan_key, status, interval,
- current_period_start, current_period_end, source, started_at, activated_at
-)
-SELECT
- 'bbbbbbbb-0005-0005-0005-000000000005',
- p.id, p.key, 'active', 'month',
- now(), now() + interval '30 days', 'seed', now(), now()
-FROM public.plans p WHERE p.key = 'clinic_free';
-
-
--- ============================================================
--- 9. Vincula terapeuta à Clinica 3 (exemplo de associacao)
--- ============================================================
-
-INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
-VALUES (
- 'bbbbbbbb-0005-0005-0005-000000000005',
- 'aaaaaaaa-0002-0002-0002-000000000002',
- 'therapist', 'active', now()
-)
-ON CONFLICT (tenant_id, user_id) DO NOTHING;
-
-
--- ============================================================
--- Confirmacao
--- ============================================================
-
-DO $$
-BEGIN
- RAISE NOTICE '✅ Seed aplicado com sucesso.';
- RAISE NOTICE ' paciente@agenciapsi.com.br → patient';
- RAISE NOTICE ' terapeuta@agenciapsi.com.br → therapist';
- RAISE NOTICE ' clinica1@agenciapsi.com.br → clinic_coworking';
- RAISE NOTICE ' clinica2@agenciapsi.com.br → clinic_reception';
- RAISE NOTICE ' clinica3@agenciapsi.com.br → clinic_full';
- RAISE NOTICE ' saas@agenciapsi.com.br → saas_admin';
- RAISE NOTICE ' Senha: Teste@123';
-END;
-$$;
diff --git a/Novo-DB/migration_002_layout_variant.sql b/Novo-DB/migration_002_layout_variant.sql
deleted file mode 100644
index 6a74e0c..0000000
--- a/Novo-DB/migration_002_layout_variant.sql
+++ /dev/null
@@ -1,13 +0,0 @@
--- =============================================================================
--- Migration 002 — Adiciona layout_variant em user_settings
--- =============================================================================
--- Execute no SQL Editor do Supabase (ou via Docker psql).
--- Tolerante: usa IF NOT EXISTS / DEFAULT para não quebrar dados existentes.
--- =============================================================================
-
-ALTER TABLE public.user_settings
- ADD COLUMN IF NOT EXISTS layout_variant TEXT NOT NULL DEFAULT 'classic';
-
--- =============================================================================
-RAISE NOTICE '✅ Coluna layout_variant adicionada a user_settings.';
--- =============================================================================
diff --git a/Novo-DB/seed_002.sql b/Novo-DB/seed_002.sql
deleted file mode 100644
index a9fc80f..0000000
--- a/Novo-DB/seed_002.sql
+++ /dev/null
@@ -1,199 +0,0 @@
--- =============================================================================
--- SEED 002 — Supervisor e Editor
--- =============================================================================
--- Execute APÓS seed_001.sql
--- Requer: pgcrypto (já ativo no Supabase)
---
--- Cria os seguintes usuários de teste:
---
--- supervisor@agenciapsi.com.br senha: Teste@123 → supervisor da Clínica 3
--- editor@agenciapsi.com.br senha: Teste@123 → editor de conteúdo (plataforma)
---
--- UUIDs reservados:
--- Supervisor → aaaaaaaa-0007-0007-0007-000000000007
--- Editor → aaaaaaaa-0008-0008-0008-000000000008
---
--- =============================================================================
-
-BEGIN;
-
--- ============================================================
--- 0. Migration: adiciona platform_roles em profiles (se não existir)
--- ============================================================
-
-ALTER TABLE public.profiles
- ADD COLUMN IF NOT EXISTS platform_roles text[] NOT NULL DEFAULT '{}';
-
-COMMENT ON COLUMN public.profiles.platform_roles IS
- 'Papéis globais de plataforma, independentes de tenant. Ex: editor de microlearning. Atribuído pelo saas_admin.';
-
-
--- ============================================================
--- 1. Remove seeds anteriores (idempotente)
--- ============================================================
-
-DELETE FROM auth.users
-WHERE email IN (
- 'supervisor@agenciapsi.com.br',
- 'editor@agenciapsi.com.br'
-);
-
-
--- ============================================================
--- 2. Cria usuários no auth.users
--- ============================================================
-
-INSERT INTO auth.users (
- instance_id,
- id,
- email,
- encrypted_password,
- email_confirmed_at,
- created_at,
- updated_at,
- raw_user_meta_data,
- raw_app_meta_data,
- role,
- aud,
- is_sso_user,
- is_anonymous,
- confirmation_token,
- recovery_token,
- email_change_token_new,
- email_change_token_current,
- email_change
-)
-VALUES
- -- Supervisor
- (
- '00000000-0000-0000-0000-000000000000',
- 'aaaaaaaa-0007-0007-0007-000000000007',
- 'supervisor@agenciapsi.com.br',
- crypt('Teste@123', gen_salt('bf')),
- now(), now(), now(),
- '{"name": "Carlos Supervisor"}'::jsonb,
- '{"provider": "email", "providers": ["email"]}'::jsonb,
- 'authenticated', 'authenticated', false, false, '', '', '', '', ''
- ),
- -- Editor de Conteúdo
- (
- '00000000-0000-0000-0000-000000000000',
- 'aaaaaaaa-0008-0008-0008-000000000008',
- 'editor@agenciapsi.com.br',
- crypt('Teste@123', gen_salt('bf')),
- now(), now(), now(),
- '{"name": "Diana Editora"}'::jsonb,
- '{"provider": "email", "providers": ["email"]}'::jsonb,
- 'authenticated', 'authenticated', false, false, '', '', '', '', ''
- );
-
-
--- ============================================================
--- 3. auth.identities (obrigatório para GoTrue reconhecer login)
--- ============================================================
-
-INSERT INTO auth.identities (id, user_id, provider_id, provider, identity_data, created_at, updated_at, last_sign_in_at)
-VALUES
- (
- gen_random_uuid(),
- 'aaaaaaaa-0007-0007-0007-000000000007',
- 'supervisor@agenciapsi.com.br',
- 'email',
- '{"sub": "aaaaaaaa-0007-0007-0007-000000000007", "email": "supervisor@agenciapsi.com.br", "email_verified": true}'::jsonb,
- now(), now(), now()
- ),
- (
- gen_random_uuid(),
- 'aaaaaaaa-0008-0008-0008-000000000008',
- 'editor@agenciapsi.com.br',
- 'email',
- '{"sub": "aaaaaaaa-0008-0008-0008-000000000008", "email": "editor@agenciapsi.com.br", "email_verified": true}'::jsonb,
- now(), now(), now()
- )
-ON CONFLICT (provider, provider_id) DO NOTHING;
-
-
--- ============================================================
--- 4. Profiles
--- Supervisor → tenant_member (papel no tenant via tenant_members.role)
--- Editor → tenant_member + platform_roles = '{editor}'
--- ============================================================
-
-INSERT INTO public.profiles (id, role, account_type, full_name, platform_roles)
-VALUES
- (
- 'aaaaaaaa-0007-0007-0007-000000000007',
- 'tenant_member',
- 'therapist',
- 'Carlos Supervisor',
- '{}'
- ),
- (
- 'aaaaaaaa-0008-0008-0008-000000000008',
- 'tenant_member',
- 'therapist',
- 'Diana Editora',
- '{editor}' -- permissão de plataforma: acesso à área do editor
- )
-ON CONFLICT (id) DO UPDATE SET
- role = EXCLUDED.role,
- account_type = EXCLUDED.account_type,
- full_name = EXCLUDED.full_name,
- platform_roles = EXCLUDED.platform_roles;
-
-
--- ============================================================
--- 5. Vincula Supervisor à Clínica 3 (Full) com role 'supervisor'
--- ============================================================
-
-INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
-VALUES (
- 'bbbbbbbb-0005-0005-0005-000000000005', -- Clínica Bem Estar (Full)
- 'aaaaaaaa-0007-0007-0007-000000000007', -- Carlos Supervisor
- 'supervisor',
- 'active',
- now()
-)
-ON CONFLICT (tenant_id, user_id) DO UPDATE SET
- role = EXCLUDED.role,
- status = EXCLUDED.status;
-
-
--- ============================================================
--- 6. Vincula Editor à Clínica 3 como terapeuta
--- (contexto de tenant para o editor poder usar /therapist também,
--- se necessário. O papel de editor vem de platform_roles.)
--- ============================================================
-
-INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
-VALUES (
- 'bbbbbbbb-0005-0005-0005-000000000005', -- Clínica Bem Estar (Full)
- 'aaaaaaaa-0008-0008-0008-000000000008', -- Diana Editora
- 'therapist',
- 'active',
- now()
-)
-ON CONFLICT (tenant_id, user_id) DO UPDATE SET
- role = EXCLUDED.role,
- status = EXCLUDED.status;
-
-
--- ============================================================
--- 7. Confirma
--- ============================================================
-
-DO $$
-BEGIN
- RAISE NOTICE '✅ Seed 002 aplicado com sucesso.';
- RAISE NOTICE '';
- RAISE NOTICE ' Migration aplicada:';
- RAISE NOTICE ' → profiles.platform_roles text[] adicionada (se não existia)';
- RAISE NOTICE '';
- RAISE NOTICE ' Usuários criados:';
- RAISE NOTICE ' supervisor@agenciapsi.com.br → supervisor da Clínica Bem Estar (Full)';
- RAISE NOTICE ' editor@agenciapsi.com.br → editor de conteúdo (platform_roles = {editor})';
- RAISE NOTICE ' Senha de todos: Teste@123';
-END;
-$$;
-
-COMMIT;
diff --git a/blueprints/DialogConfirmation-blueprint.md b/blueprints/DialogConfirmation-blueprint.md
new file mode 100644
index 0000000..9a2d7c7
--- /dev/null
+++ b/blueprints/DialogConfirmation-blueprint.md
@@ -0,0 +1,159 @@
+# DialogConfirmation — Padrão de Componente
+
+> **Stack**: Vue 3 + PrimeVue 4 + Tailwind CSS
+
+---
+
+## Regras gerais
+
+| Propriedade | Valor obrigatório |
+|---|---|
+| `group` | sempre `"headless"` — desacopla o template do trigger |
+| `ConfirmDialog` | declarado **uma única vez**, no componente pai (página) |
+| Filhos | disparam via `useConfirm()` com `group: 'headless'` — sem declarar `ConfirmDialog` próprio |
+| `icon` | passado em `confirm.require({ icon })` — classe PrimeIcons sem o prefixo `pi` (ex: `'pi-trash'`) |
+| `color` | passado em `confirm.require({ color })` — hex; define o fundo do círculo e a cor do botão Confirmar |
+| `ConfirmationService` | obrigatório em `main.js` — `app.use(ConfirmationService)` |
+
+---
+
+## Arquitetura pai / filho
+
+```
+Pai (página)
+ └── ← único, renderiza aqui
+ ├── Filho A (componente qualquer) → confirm.require({ group: 'headless', ... })
+ └── Filho B (Dialog interno) → confirm.require({ group: 'headless', ... })
+```
+
+> O `ConfirmDialog` **não** deve ser colocado dentro de um `