Repository Public
1import { UserSettings } from '@cr/shared';2import type { Queryable } from '../../db.js';34/** Stored settings merged over the zod defaults; unknown/invalid stored values fall back to defaults. */5export async function getSettings(db: Queryable, userId: string): Promise<UserSettings> {6 const row = await db.one<{ settings: unknown }>('SELECT settings FROM application_settings WHERE user_id = $1', [userId]);7 const parsed = UserSettings.safeParse(row?.settings ?? {});8 return parsed.success ? parsed.data : UserSettings.parse({});9}10export async function putSettings(db: Queryable, userId: string, settings: UserSettings): Promise<void> {11 await db.q(12 `INSERT INTO application_settings (user_id, settings) VALUES ($1, $2)13 ON CONFLICT (user_id) DO UPDATE SET settings = excluded.settings, updated_at = now()`,14 [userId, JSON.stringify(settings)],15 );16}17