syncova-policies/app/api/site-pages/route.ts
Weapie 265ca8ac38
All checks were successful
Container-Image bauen und veröffentlichen / build-and-push (push) Successful in 5m15s
Improve accessibility and access controls; verify production and database recovery
2026-09-14 11:44:41 +02:00

54 lines
1.8 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { requireAdmin } from '@/lib/require-admin'
import { EMPTY_SITE_PAGES, SITE_MEDIA, SITE_PAGES, validateSitePages } from '@/lib/site-pages'
import { readSitePages } from '@/lib/site-pages.server'
// Prisma client instance
import { prisma } from "@/lib/prisma"
// GET /api/site-pages - liefert die Inhalte der rechtlichen Seiten
export async function GET() {
try {
return NextResponse.json(await readSitePages())
} catch (error) {
console.error('Error fetching site pages:', error)
return NextResponse.json(
{ error: 'Fehler beim Abrufen der Seiteninhalte' },
{ status: 500 }
)
}
}
// PUT /api/site-pages - speichert die Inhalte der rechtlichen Seiten (Admin)
export async function PUT(request: NextRequest) {
try {
const denied = await requireAdmin()
if (denied) return denied
const data = await request.json()
const result = await prisma.$transaction(async (tx) => {
const previous = await tx.sitePages.findUnique({ where: { id: 1 } })
const errors = validateSitePages(data, previous ?? EMPTY_SITE_PAGES)
if (errors.length) return { errors }
const values = Object.fromEntries(
[...SITE_PAGES, ...SITE_MEDIA].map(key => [key, data[key].trim()])
)
const saved = await tx.sitePages.upsert({
where: { id: 1 }, update: values, create: { id: 1, ...values },
})
return { saved }
})
if (result.errors) return NextResponse.json({ error: "Bitte prüfen Sie die Seiteninhalte.", details: result.errors }, { status: 400 })
const saved = result.saved
return NextResponse.json(saved)
} catch (error) {
console.error('Error updating site pages:', error)
return NextResponse.json(
{ error: 'Fehler beim Speichern der Seiteninhalte' },
{ status: 500 }
)
}
}