import { type Db, platformSettings } from "@autoscholar/db"; import { eq } from "drizzle-orm"; import { audit } from "./audit.js"; export const SETTING_KEYS = { dispatchPaused: "dispatch.paused", publishingHalted: "publishing.halted", publishingHaltedModes: "publishing.haltedModes", } as const; export async function getSetting(db: Db, key: string, fallback: T): Promise { const [row] = await db.select().from(platformSettings).where(eq(platformSettings.key, key)).limit(1); return row ? (row.value as T) : fallback; } export async function setSetting( db: Db, key: string, value: unknown, actor: { id: string; ip?: string | null }, ): Promise { await db .insert(platformSettings) .values({ key, value, updatedBy: `admin:${actor.id}` }) .onConflictDoUpdate({ target: platformSettings.key, set: { value, updatedBy: `admin:${actor.id}`, updatedAt: new Date() }, }); await audit( db, { type: "admin", id: actor.id, ip: actor.ip }, "settings.update", { type: "setting", id: key }, { value }, ); } export async function allSettings(db: Db) { const rows = await db.select().from(platformSettings); const out: Record = {}; for (const r of rows) out[r.key] = r.value; return out; }