// server/services/appSettings.ts import { db, schema } from "../db/client.js"; import type { AptProxyMode } from "@shared/types.js"; export const SETTING_KEYS = { defaultAptProxyUrl: "default_apt_proxy_url", defaultAptProxyMode: "default_apt_proxy_mode", } as const; export function getAllSettings(): Record { return Object.fromEntries( db.select().from(schema.appSettings).all().map((r) => [r.key, r.value ?? ""]), ); } export function setSettings(patch: Record): void { const now = new Date().toISOString(); for (const [key, value] of Object.entries(patch)) { db.insert(schema.appSettings) .values({ key, value, updatedAt: now }) .onConflictDoUpdate({ target: schema.appSettings.key, set: { value, updatedAt: now } }) .run(); } } export interface DefaultAptProxy { mode: AptProxyMode; url: string | null; } export function getDefaultAptProxy(): DefaultAptProxy { const s = getAllSettings(); const mode = (s[SETTING_KEYS.defaultAptProxyMode] as AptProxyMode) || "direct"; return { mode, url: s[SETTING_KEYS.defaultAptProxyUrl] || null }; } export function setDefaultAptProxy(input: DefaultAptProxy): DefaultAptProxy { setSettings({ [SETTING_KEYS.defaultAptProxyMode]: input.mode, [SETTING_KEYS.defaultAptProxyUrl]: input.url ?? "", }); return getDefaultAptProxy(); }