-- Fix type mismatch in get_users_with_emails function CREATE OR REPLACE FUNCTION public.get_users_with_emails() RETURNS TABLE ( id uuid, user_id uuid, username text, email text, display_name text, avatar_url text, banned boolean, created_at timestamptz ) LANGUAGE plpgsql SECURITY DEFINER SET search_path TO 'public', 'auth' AS $$ BEGIN -- Check if caller is superuser or admin IF NOT EXISTS ( SELECT 1 FROM public.user_roles WHERE user_roles.user_id = auth.uid() AND role IN ('superuser', 'admin') ) THEN RAISE EXCEPTION 'Access denied: requires admin or superuser role' USING ERRCODE = '42501'; END IF; -- Return profiles with emails from auth.users RETURN QUERY SELECT p.id, p.user_id, p.username, COALESCE(au.email, 'unknown@email.com')::text as email, p.display_name, p.avatar_url, p.banned, p.created_at FROM public.profiles p LEFT JOIN auth.users au ON au.id = p.user_id ORDER BY p.created_at DESC; END; $$;