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