grant execute on function medreport.accept_invitation (text, uuid) to service_role; CREATE OR REPLACE FUNCTION medreport.accept_invitation(token text, user_id uuid) RETURNS uuid LANGUAGE plpgsql SET search_path TO '' AS $function$declare target_account_id uuid; target_role varchar(50); begin select account_id, role into target_account_id, target_role from medreport.invitations where invite_token = token and expires_at > now(); if not found then raise exception 'Invalid or expired invitation token'; end if; insert into medreport.accounts_memberships( user_id, account_id, account_role) values ( accept_invitation.user_id, target_account_id, target_role); delete from medreport.invitations where invite_token = token; update medreport.notifications set dismissed = true where link ilike '%' || token || '%'; return target_account_id; end;$function$ ;