import { NextRequest, NextResponse } from "next/server"; import { getContentByKey } from "@/lib/content"; import { getContentPage } from "@/lib/directus"; const CACHE_TTL = 300; // 5 minutes export async function GET(request: NextRequest) { const { searchParams } = new URL(request.url); const key = searchParams.get("key"); const locale = searchParams.get("locale") || "en"; if (!key) { return NextResponse.json({ error: "key is required" }, { status: 400 }); } try { // 1) Try Directus first const directusPage = await getContentPage(key, locale); if (directusPage) { return NextResponse.json( { content: { title: directusPage.title, slug: directusPage.slug, locale: directusPage.locale || locale, content: directusPage.content, }, source: "directus", }, { headers: { "Cache-Control": `public, s-maxage=${CACHE_TTL}, stale-while-revalidate=${CACHE_TTL * 2}` } } ); } // 2) Fallback: PostgreSQL const translation = await getContentByKey({ key, locale }); if (!translation) { return NextResponse.json( { content: null }, { headers: { "Cache-Control": `public, s-maxage=${CACHE_TTL}, stale-while-revalidate=${CACHE_TTL * 2}` } } ); } return NextResponse.json( { content: translation, source: "postgresql" }, { headers: { "Cache-Control": `public, s-maxage=${CACHE_TTL}, stale-while-revalidate=${CACHE_TTL * 2}` } } ); } catch (error) { // If DB isn't migrated/available, fail soft so the UI can fall back to next-intl strings. if (process.env.NODE_ENV === "development") { console.warn("Content API failed; returning null content:", error); } return NextResponse.json({ content: null }); } }