import { one } from '../db.js'; export type AppRole = 'admin' | 'moderator' | 'user'; /** Reimplements public.has_role(uuid, app_role). */ export async function hasRole(userId: string, role: AppRole): Promise { const row = await one<{ exists: boolean }>( `SELECT EXISTS (SELECT 1 FROM public.user_roles WHERE user_id = $1 AND role = $2) AS exists`, [userId, role] ); return !!row?.exists; } /** Reimplements public.get_user_role(uuid). Returns null if none. */ export async function getUserRole(userId: string): Promise { const row = await one<{ role: AppRole }>( `SELECT role FROM public.user_roles WHERE user_id = $1 LIMIT 1`, [userId] ); return row?.role ?? null; } /** Reimplements public.no_admin_exists(). */ export async function noAdminExists(): Promise { const row = await one<{ exists: boolean }>( `SELECT NOT EXISTS (SELECT 1 FROM public.user_roles WHERE role = 'admin') AS exists` ); return !!row?.exists; }