SPB Git

spb/autoscholar

Public
1.3 KB · 44 lines typescript
1import { type Db, platformSettings } from "@autoscholar/db";2import { eq } from "drizzle-orm";3import { audit } from "./audit.js";45export const SETTING_KEYS = {6  dispatchPaused: "dispatch.paused",7  publishingHalted: "publishing.halted",8  publishingHaltedModes: "publishing.haltedModes",9} as const;1011export async function getSetting<T>(db: Db, key: string, fallback: T): Promise<T> {12  const [row] = await db.select().from(platformSettings).where(eq(platformSettings.key, key)).limit(1);13  return row ? (row.value as T) : fallback;14}1516export async function setSetting(17  db: Db,18  key: string,19  value: unknown,20  actor: { id: string; ip?: string | null },21): Promise<void> {22  await db23    .insert(platformSettings)24    .values({ key, value, updatedBy: `admin:${actor.id}` })25    .onConflictDoUpdate({26      target: platformSettings.key,27      set: { value, updatedBy: `admin:${actor.id}`, updatedAt: new Date() },28    });29  await audit(30    db,31    { type: "admin", id: actor.id, ip: actor.ip },32    "settings.update",33    { type: "setting", id: key },34    { value },35  );36}3738export async function allSettings(db: Db) {39  const rows = await db.select().from(platformSettings);40  const out: Record<string, unknown> = {};41  for (const r of rows) out[r.key] = r.value;42  return out;43}44
Files · ad78891b6b969902dedc372df227e1adc3cd93ba
Menu

Theme