-- 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;