syncova-policies/app/api/policy-defaults/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

64 lines
2.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { NextRequest, NextResponse } from 'next/server'
import { requireAdmin } from '@/lib/require-admin'
import { DEFAULTED_FIELDS, DEFAULTED_FIELD_LABELS, REQUIRED_DEFAULTED_FIELDS } from '@/lib/policy-defaults'
import { readPolicyDefaults } from '@/lib/policy-defaults.server'
// Prisma client instance
import { prisma } from "@/lib/prisma"
// GET /api/policy-defaults - liefert die zentralen Standardtexte
export async function GET() {
try {
const defaults = await readPolicyDefaults(prisma)
return NextResponse.json(defaults)
} catch (error) {
console.error('Error fetching policy defaults:', error)
return NextResponse.json(
{ error: 'Fehler beim Abrufen der Standardtexte' },
{ status: 500 }
)
}
}
// PUT /api/policy-defaults - speichert die zentralen Standardtexte (Admin)
export async function PUT(request: NextRequest) {
try {
const denied = await requireAdmin()
if (denied) return denied
const data = await request.json()
// Die Pflicht-Bausteine dürfen im Standard nicht leer bleiben – sonst
// fehlen sie in jeder Erklärung, die keinen eigenen Text hinterlegt hat.
const errors = REQUIRED_DEFAULTED_FIELDS.filter(
(field) => !String(data[field] ?? '').trim()
).map((field) => `${DEFAULTED_FIELD_LABELS[field]} ist erforderlich`)
if (errors.length > 0) {
return NextResponse.json(
{ error: 'Validierungsfehler', details: errors },
{ status: 400 }
)
}
// Nur die bekannten Felder übernehmen, jeweils getrimmt.
const values = Object.fromEntries(
DEFAULTED_FIELDS.map((field) => [field, String(data[field] ?? '').trim()])
)
const saved = await prisma.policyDefaults.upsert({
where: { id: 1 },
update: values,
create: { id: 1, ...values },
})
return NextResponse.json(saved)
} catch (error) {
console.error('Error updating policy defaults:', error)
return NextResponse.json(
{ error: 'Fehler beim Speichern der Standardtexte' },
{ status: 500 }
)
}
}