Files
SLA_SEPARACAO/supabase/migrations/20260803181430_9973b16d-ccc8-4a27-ac49-bc821c7f8600.sql
T
2026-08-06 11:13:33 -03:00

46 lines
1.2 KiB
PL/PgSQL

ALTER TABLE public.perfis ADD COLUMN IF NOT EXISTS nome text;
UPDATE public.perfis SET nome = split_part(email, '@', 1) WHERE nome IS NULL;
ALTER TABLE public.perfis ALTER COLUMN nome SET NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS perfis_nome_unico ON public.perfis (lower(nome));
CREATE OR REPLACE FUNCTION public.registrar_perfil()
RETURNS perfis
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path TO 'public'
AS $function$
DECLARE
v_uid uuid := auth.uid();
v_email text;
v_nome text;
v_primeiro boolean;
v_perfil public.perfis;
BEGIN
IF v_uid IS NULL THEN
RAISE EXCEPTION 'Nao autenticado';
END IF;
SELECT * INTO v_perfil FROM public.perfis WHERE id = v_uid;
IF FOUND THEN
RETURN v_perfil;
END IF;
SELECT email INTO v_email FROM auth.users WHERE id = v_uid;
v_nome := split_part(coalesce(v_email, ''), '@', 1);
SELECT NOT EXISTS (SELECT 1 FROM public.perfis) INTO v_primeiro;
INSERT INTO public.perfis (id, email, nome, aprovado)
VALUES (v_uid, coalesce(v_email, ''), v_nome, v_primeiro)
RETURNING * INTO v_perfil;
IF v_primeiro THEN
INSERT INTO public.papeis_usuario (user_id, role) VALUES (v_uid, 'admin')
ON CONFLICT DO NOTHING;
END IF;
RETURN v_perfil;
END;
$function$;