CREATE OR REPLACE FUNCTION public.handle_new_user()
RETURNS trigger
LANGUAGE plpgsql
SECURITY DEFINER
AS $function$
declare
raw_user_meta_data json;
raw_app_meta_data json;
company_id uuid;
role text;
begin
raw_user_meta_data := new.raw_user_meta_data;
raw_app_meta_data := new.raw_app_meta_data;
company_id := coalesce(
(raw_user_meta_data ->> 'company_id')::uuid,
(raw_app_meta_data ->> 'serial_company_id')::uuid,
'51bbe6c0-c335-4e45-92bd-5d6ed99de5b6'::uuid
);
role := coalesce(
raw_user_meta_data ->> 'role',
raw_app_meta_data ->> 'serial_role',
'MEMBER'
);
raw_app_meta_data := raw_app_meta_data ||
json_build_object('serial_company_id', company_id, 'serial_role', role);
raw_user_meta_data := raw_user_meta_data - 'company_id' - 'role';
new.raw_app_meta_data = raw_app_meta_data;
new.raw_user_meta_data = raw_user_meta_data;
insert into public.users (supabase_uid, company_id, email, first_name, last_name, role, title)
values (
new.id,
company_id,
new.email,
raw_user_meta_data ->> 'first_name',
raw_user_meta_data ->> 'last_name',
role,
raw_user_meta_data ->> 'title'
);
return new;
end;
$function$