All checks were successful
Container-Image bauen und veröffentlichen / build-and-push (push) Successful in 5m15s
54 lines
1.8 KiB
TypeScript
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 }
|
|
)
|
|
}
|
|
}
|