import prisma, { nowIso } from "./db"; export type SettingValue = T | null; export type CloudflareSettings = { apiToken: string; zoneId?: string; accountId?: string; }; export type GeneralSettings = { primaryDomain: string; acmeEmail?: string; }; export async function getSetting(key: string): Promise> { const setting = await prisma.setting.findUnique({ where: { key } }); if (!setting) { return null; } try { return JSON.parse(setting.value) as T; } catch (error) { console.warn(`Failed to parse setting ${key}`, error); return null; } } export async function setSetting(key: string, value: T): Promise { const payload = JSON.stringify(value); const now = new Date(nowIso()); await prisma.setting.upsert({ where: { key }, update: { value: payload, updatedAt: now }, create: { key, value: payload, updatedAt: now } }); } export async function getCloudflareSettings(): Promise { return await getSetting("cloudflare"); } export async function saveCloudflareSettings(settings: CloudflareSettings): Promise { await setSetting("cloudflare", settings); } export async function getGeneralSettings(): Promise { return await getSetting("general"); } export async function saveGeneralSettings(settings: GeneralSettings): Promise { await setSetting("general", settings); }