lomavuokraus/lib/settings.ts
Tero Halla-aho 0bb709d9c5
Some checks failed
CI / checks (push) Has been cancelled
chore: fix audit alerts and formatting
2026-02-04 12:43:03 +02:00

52 lines
1.3 KiB
TypeScript

import { prisma } from "./prisma";
export type SiteSettings = {
requireLoginForContactDetails: boolean;
};
const SETTINGS_ID = "default";
const DEFAULT_SETTINGS: SiteSettings = {
requireLoginForContactDetails: true,
};
function mergeSettings(
input: Partial<SiteSettings> | null | undefined,
): SiteSettings {
return {
requireLoginForContactDetails:
input?.requireLoginForContactDetails ??
DEFAULT_SETTINGS.requireLoginForContactDetails,
};
}
export async function getSiteSettings(): Promise<SiteSettings> {
try {
const existing = await prisma.siteSettings.findUnique({
where: { id: SETTINGS_ID },
});
if (!existing) {
return DEFAULT_SETTINGS;
}
return mergeSettings(existing);
} catch (error) {
console.error(
"Failed to load site settings, falling back to defaults",
error,
);
return DEFAULT_SETTINGS;
}
}
export async function updateSiteSettings(
input: Partial<SiteSettings>,
): Promise<SiteSettings> {
const current = await getSiteSettings();
const data = mergeSettings({ ...current, ...input });
const saved = await prisma.siteSettings.upsert({
where: { id: SETTINGS_ID },
update: data,
create: { id: SETTINGS_ID, ...data },
});
return mergeSettings(saved);
}