first commit
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { revalidatePath } from 'next/cache';
|
||||
import { setSection, resetSection, getSection } from '@/lib/db/store';
|
||||
import { isEditableKey } from '@/lib/content/sections';
|
||||
|
||||
export const runtime = 'nodejs';
|
||||
|
||||
// GET ?key=hero -> current stored override (or null)
|
||||
export async function GET(req: Request) {
|
||||
const key = new URL(req.url).searchParams.get('key') ?? '';
|
||||
if (!isEditableKey(key)) {
|
||||
return NextResponse.json({ error: 'unknown section' }, { status: 400 });
|
||||
}
|
||||
return NextResponse.json({ key, override: getSection(key) });
|
||||
}
|
||||
|
||||
// POST { key, data: { fa, en } } -> save override
|
||||
export async function POST(req: Request) {
|
||||
let body: { key?: string; data?: { fa?: unknown; en?: unknown } };
|
||||
try {
|
||||
body = await req.json();
|
||||
} catch {
|
||||
return NextResponse.json({ error: 'bad json' }, { status: 400 });
|
||||
}
|
||||
|
||||
const key = body.key ?? '';
|
||||
if (!isEditableKey(key)) {
|
||||
return NextResponse.json({ error: 'unknown section' }, { status: 400 });
|
||||
}
|
||||
if (!body.data || typeof body.data !== 'object' || !('fa' in body.data) || !('en' in body.data)) {
|
||||
return NextResponse.json({ error: 'expected { fa, en } payload' }, { status: 400 });
|
||||
}
|
||||
|
||||
setSection(key, { fa: body.data.fa, en: body.data.en });
|
||||
// (site) layout is force-dynamic, but revalidate keeps any cached routes fresh.
|
||||
revalidatePath('/', 'layout');
|
||||
return NextResponse.json({ ok: true });
|
||||
}
|
||||
|
||||
// DELETE ?key=hero -> revert to in-code default
|
||||
export async function DELETE(req: Request) {
|
||||
const key = new URL(req.url).searchParams.get('key') ?? '';
|
||||
if (!isEditableKey(key)) {
|
||||
return NextResponse.json({ error: 'unknown section' }, { status: 400 });
|
||||
}
|
||||
resetSection(key);
|
||||
revalidatePath('/', 'layout');
|
||||
return NextResponse.json({ ok: true });
|
||||
}
|
||||
Reference in New Issue
Block a user