f17e9ee786
Fluxos anon identificam tenant por token/slug e nao resolvem o schema fisico. Decisao (opcao C): manter em public com RLS por token. Volta a global: patient_intake_requests, patient_invites, patient_invite_attempts, document_share_links, agendador_configuracoes, agendador_solicitacoes. - migration 20260613000001_f1b: remove as 6 do _tenant_template (template v2, 78 tabelas). Smoke: clone gera 78, zero tabelas anon no schema, drop limpo - frontend: 38 cadeias em 14 arquivos revertidas tenantDb().from() -> supabase.from() com tenant_id/owner_id restaurado (via comparacao com main) - edge: convert-abandoned-intakes restaurada do main (SELECT global) - save-intake-progress: ja usava public, sem mudanca - doc F0 atualizado: 78 tenant + 59 global Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
50 lines
2.3 KiB
PL/PgSQL
50 lines
2.3 KiB
PL/PgSQL
-- =============================================================================
|
|
-- F1b — Decisão de roteamento anon: 6 tabelas anon-facing FICAM em public
|
|
--
|
|
-- Fluxos anônimos identificam o tenant por TOKEN/SLUG (não por login), então
|
|
-- não conseguem resolver o schema físico. Decisão (2026-06-13, opção C):
|
|
-- manter essas tabelas em public com tenant_id + RLS por token, como hoje.
|
|
--
|
|
-- patient_intake_requests — intake de paciente por convite (token)
|
|
-- patient_invites — tokens de convite
|
|
-- patient_invite_attempts — rate-limit anon dos convites
|
|
-- document_share_links — assinatura pública de documento (token)
|
|
-- agendador_configuracoes — agendador público (link_slug)
|
|
-- agendador_solicitacoes — solicitação criada por visitante anon
|
|
--
|
|
-- Logo, REMOVE essas 6 do _tenant_template (não viram schema do tenant).
|
|
-- O clone_tenant_template itera as tabelas do template dinamicamente, então
|
|
-- novos clones nascem sem elas automaticamente. Classificação final:
|
|
-- 78 tenant-scoped + 59 globais (era 84 + 53).
|
|
--
|
|
-- Nota F6: public.document_share_links.documento_id tem FK -> documents, que
|
|
-- VAI pro schema do tenant. No drop de public.documents (F6), essa FK precisa
|
|
-- virar coluna solta (uuid sem constraint) — o RPC valida via token. Idem
|
|
-- qualquer FK public->tenant dessas 6 (registrar no lote de FKs da F6).
|
|
-- =============================================================================
|
|
|
|
BEGIN;
|
|
|
|
DO $$
|
|
DECLARE
|
|
anon_tabs text[] := ARRAY[
|
|
'patient_intake_requests','patient_invites','patient_invite_attempts',
|
|
'document_share_links','agendador_configuracoes','agendador_solicitacoes'
|
|
];
|
|
t text;
|
|
BEGIN
|
|
FOREACH t IN ARRAY anon_tabs LOOP
|
|
IF EXISTS (SELECT 1 FROM information_schema.tables
|
|
WHERE table_schema = '_tenant_template' AND table_name = t) THEN
|
|
EXECUTE format('DROP TABLE _tenant_template.%I CASCADE', t);
|
|
RAISE NOTICE 'F1b: _tenant_template.% removida (fica em public)', t;
|
|
END IF;
|
|
-- defensivo: tira do registro de realtime do template, se estiver lá
|
|
DELETE FROM _tenant_template._realtime_tables WHERE table_name = t;
|
|
END LOOP;
|
|
END $$;
|
|
|
|
UPDATE _tenant_template._meta SET value = '2'::jsonb WHERE key = 'template_version';
|
|
|
|
COMMIT;
|