-- =============================================================================
-- Migration: 20260419000005_restrict_intake_rpc
-- A#20 — Restringe create_patient_intake_request_v2 a service_role.
--
-- Antes: anon (e PUBLIC) podia chamar direto. Bot bypassava qualquer
-- proteção do front (Turnstile etc).
-- Agora: edge function `submit-patient-intake` valida CAPTCHA e chama
-- a RPC com service_role. Anon não chama mais a RPC direto.
-- =============================================================================

-- Revoga PUBLIC (DEFAULT) e anon
REVOKE EXECUTE ON FUNCTION public.create_patient_intake_request_v2(text, jsonb)        FROM PUBLIC, anon;
REVOKE EXECUTE ON FUNCTION public.create_patient_intake_request_v2(text, jsonb, text)  FROM PUBLIC, anon;

-- Mantém grants explícitos pra authenticated (uso interno futuro) e service_role (edge function)
GRANT  EXECUTE ON FUNCTION public.create_patient_intake_request_v2(text, jsonb)        TO authenticated, service_role;
GRANT  EXECUTE ON FUNCTION public.create_patient_intake_request_v2(text, jsonb, text)  TO authenticated, service_role;

-- Mesma proteção para RPC v1 legada (caso ainda exista)
DO $$
BEGIN
  IF EXISTS (
    SELECT 1 FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace
    WHERE n.nspname = 'public' AND p.proname = 'create_patient_intake_request'
  ) THEN
    EXECUTE 'REVOKE EXECUTE ON FUNCTION public.create_patient_intake_request(text, text, text, text, text, boolean) FROM PUBLIC, anon';
    EXECUTE 'GRANT  EXECUTE ON FUNCTION public.create_patient_intake_request(text, text, text, text, text, boolean) TO authenticated, service_role';
  END IF;
END$$;
