DROP TRIGGER IF EXISTS add_current_user_to_new_account ON medreport.accounts; create or replace function medreport.create_team_account ( account_name text, new_personal_code text ) returns medreport.accounts security definer set search_path = '' as $$ declare existing_account medreport.accounts; current_user uuid := (select auth.uid())::uuid; new_account medreport.accounts; begin if not medreport.is_set('enable_team_accounts') then raise exception 'Team accounts are not enabled'; end if; insert into medreport.accounts( name, is_personal_account) values ( account_name, false) returning * into new_account; -- Try to find existing account select * into existing_account from medreport.accounts where personal_code = new_personal_code limit 1; -- If not found, fail if not found then raise exception 'No account found with personal_code = %', new_personal_code; end if; -- Insert membership insert into medreport.accounts_memberships ( user_id, account_id, account_role, created_by, updated_by, created_at, updated_at, has_seen_confirmation ) values ( existing_account.id, new_account.id, 'owner', null, null, now(), now(), false ) on conflict do nothing; return new_account; end; $$ language plpgsql; grant execute on function medreport.create_team_account (text, text) to authenticated, service_role;