Primeiro commit
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
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$;
|
||||
Reference in New Issue
Block a user