feat(cms): add storage based website content management
This commit is contained in:
parent
7d5689cfa4
commit
12d31f5468
31 changed files with 1347 additions and 158 deletions
27
app/api/admin/content/route.ts
Normal file
27
app/api/admin/content/route.ts
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import { NextResponse } from "next/server";
|
||||
import { requireAdminSession } from "@/lib/admin/auth";
|
||||
import { getAllContent, saveContent } from "@/lib/content/service";
|
||||
import type { ContentDocuments, ContentKey } from "@/lib/content/types";
|
||||
|
||||
const keys: ContentKey[] = ["home", "services", "radio-service", "about", "contact", "settings"];
|
||||
|
||||
function isContentKey(value: unknown): value is ContentKey {
|
||||
return typeof value === "string" && keys.includes(value as ContentKey);
|
||||
}
|
||||
|
||||
export async function GET() {
|
||||
if (!await requireAdminSession()) return NextResponse.json({ message: "Nicht autorisiert." }, { status: 401 });
|
||||
return NextResponse.json({ content: await getAllContent() });
|
||||
}
|
||||
|
||||
export async function PUT(request: Request) {
|
||||
if (!await requireAdminSession()) return NextResponse.json({ message: "Nicht autorisiert." }, { status: 401 });
|
||||
|
||||
const body = await request.json() as { key?: unknown; content?: unknown };
|
||||
if (!isContentKey(body.key) || !body.content) {
|
||||
return NextResponse.json({ message: "Ungültige Content-Anfrage." }, { status: 400 });
|
||||
}
|
||||
|
||||
const saved = await saveContent(body.key, body.content as ContentDocuments[typeof body.key]);
|
||||
return NextResponse.json({ message: "Inhalt gespeichert.", key: body.key, content: saved });
|
||||
}
|
||||
7
app/api/content/settings/route.ts
Normal file
7
app/api/content/settings/route.ts
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
import { NextResponse } from "next/server";
|
||||
import { getContent } from "@/lib/content/service";
|
||||
|
||||
export async function GET() {
|
||||
const settings = await getContent("settings");
|
||||
return NextResponse.json({ settings });
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue