import { NextResponse } from 'next/server' import { erfordereZugang, ZugriffVerweigert } from '@/lib/auth/sitzung' import { emailFassung, siehtAusWieEmail } from '@/lib/schreiben/email' import { emlErzeugen } from '@/lib/schreiben/eml' import { dateinameFuerSchreiben, istSchreibenArt } from '@/lib/schreiben/arten' import { heuteAlsTag } from '@/lib/fristen/datum' /** * Das Schreiben als .eml-Entwurf herunterladen. * * Gleicher Aufbau wie der Word-Download (../docx/route.ts): POST, weil der * Text mitkommt und nicht in die Adresszeile gehoert; Zugriff wird hier * geprueft, weil sich eine Route unmittelbar aufrufen laesst. */ export const dynamic = 'force-dynamic' export async function POST(anfrage: Request): Promise { let formular: FormData try { formular = await anfrage.formData() } catch { return NextResponse.json({ fehler: 'Ungültige Anfrage.' }, { status: 400 }) } const betreuteId = String(formular.get('betreuteId') ?? '') const rohArt = String(formular.get('art') ?? '') const text = String(formular.get('text') ?? '') const betreff = String(formular.get('betreff') ?? '').trim() const adresse = String(formular.get('empfaengerEmail') ?? '').trim() const empfaenger = String(formular.get('empfaengerName') ?? '').trim() if (!betreuteId || !istSchreibenArt(rohArt) || text.trim().length < 30) { return NextResponse.json({ fehler: 'Unvollständige Angaben.' }, { status: 400 }) } if (!siehtAusWieEmail(adresse)) { return NextResponse.json( { fehler: 'Für diesen Empfänger ist keine E-Mail-Adresse hinterlegt.' }, { status: 400 }, ) } try { await erfordereZugang(betreuteId, 'DOKUMENTE', 'lesen') } catch (ausnahme) { if (ausnahme instanceof ZugriffVerweigert) { return NextResponse.json({ fehler: ausnahme.message }, { status: 403 }) } throw ausnahme } const fassung = emailFassung(text, betreff) const datei = emlErzeugen({ an: adresse, betreff: fassung.betreff, text: fassung.text }) const dateiname = dateinameFuerSchreiben(rohArt, empfaenger || null, heuteAlsTag(), 'eml') return new NextResponse(new Uint8Array(datei), { headers: { 'Content-Type': 'message/rfc822', 'Content-Disposition': `attachment; filename="${dateiname}"`, 'Content-Length': String(datei.length), 'Cache-Control': 'no-store, must-revalidate', }, }) }