import { prisma } from "@/lib/prisma"; import type { Prisma } from "@prisma/client"; import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library"; export async function getSiteSettings() { return prisma.siteSettings.findUnique({ where: { id: 1 } }); } export async function getContentByKey(opts: { key: string; locale: string }) { const { key, locale } = opts; try { const page = await prisma.contentPage.findUnique({ where: { key }, include: { translations: { where: { locale }, take: 1, }, }, }); if (page?.translations?.[0]) return page.translations[0]; const settings = await getSiteSettings(); const fallbackLocale = settings?.defaultLocale || "en"; const fallback = await prisma.contentPageTranslation.findFirst({ where: { page: { key }, locale: fallbackLocale, }, }); return fallback; } catch (error) { // If migrations haven't been applied yet, don't crash the app. // Let callers fall back to static translations. if (error instanceof PrismaClientKnownRequestError && (error.code === "P2021" || error.code === "P2022")) { return null; } throw error; } } export async function upsertContentByKey(opts: { key: string; locale: string; title?: string | null; slug?: string | null; content: unknown; metaDescription?: string | null; keywords?: string | null; }) { const { key, locale, title, slug, content, metaDescription, keywords } = opts; const page = await prisma.contentPage.upsert({ where: { key }, create: { key, status: "PUBLISHED" }, update: {}, }); return prisma.contentPageTranslation.upsert({ where: { pageId_locale: { pageId: page.id, locale } }, create: { pageId: page.id, locale, title: title ?? undefined, slug: slug ?? undefined, content: content as Prisma.InputJsonValue, // JSON metaDescription: metaDescription ?? undefined, keywords: keywords ?? undefined, }, update: { title: title ?? undefined, slug: slug ?? undefined, content: content as Prisma.InputJsonValue, // JSON metaDescription: metaDescription ?? undefined, keywords: keywords ?? undefined, }, }); }