Fix: PDF-Bericht -- CJS-Interop, Leerseiten und sichtbare Fehler
Deploy App / deploy (push) Successful in 1m10s
Deploy App / deploy (push) Successful in 1m10s
1) pdfkit wird als externes CJS-Modul geladen. Je nach Interop kommt der Konstruktor direkt oder unter .default an -- trifft man die falsche Form, gelingt der Import, aber `new PDFDocument()` scheitert erst zur Laufzeit (passt zum gemeldeten 500: unauth. Aufruf gab 401, die Erzeugung 500). Beide Formen werden jetzt akzeptiert. 2) Die Fusszeile stand unterhalb des Satzspiegels -- pdfkit haengt dafuer automatisch Seiten an. Ein Bericht mit 6 Inhaltsseiten wurde so auf 18 aufgeblaeht. Unterer Rand wird fuers Schreiben auf 0 gesetzt; ein Test prueft jetzt die Seitenzahl im FERTIGEN PDF, nicht davor. 3) Rendern und Speichern melden ihre Ursache statt eines nackten 500. Spezifikation unveraendert, 1 Test ergaenzt (221 -> 222). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -131,20 +131,40 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
|
||||
analyses: analyses.map((a) => ({ name: a.name, type: a.type, result: a.result })),
|
||||
});
|
||||
|
||||
const pdf = await renderReportPdf(model);
|
||||
// Rendern und Ablegen sind die beiden Schritte, die zur Laufzeit scheitern können
|
||||
// (Schriftdaten, Grösse des Datensatzes). Ein nacktes 500 wäre hier nicht diagnostizierbar,
|
||||
// deshalb wird die Ursache protokolliert UND zurückgegeben -- es ist ein Ein-Personen-
|
||||
// Werkzeug, und der Nutzer ist der Einzige, der den Fehler melden kann.
|
||||
let pdf: Buffer;
|
||||
try {
|
||||
pdf = await renderReportPdf(model);
|
||||
} catch (err) {
|
||||
console.error("[reports] PDF-Erzeugung fehlgeschlagen", err);
|
||||
return NextResponse.json(
|
||||
{ error: `PDF-Erzeugung fehlgeschlagen: ${err instanceof Error ? err.message : String(err)}` },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
|
||||
const created = await prisma.report.create({
|
||||
data: {
|
||||
planId,
|
||||
title: cfg.title,
|
||||
config: config as unknown as object,
|
||||
model: model as unknown as object,
|
||||
pdf: new Uint8Array(pdf),
|
||||
pdfBytes: pdf.length,
|
||||
createdById: userId,
|
||||
},
|
||||
select: { id: true },
|
||||
});
|
||||
|
||||
return NextResponse.json({ report: { id: created.id, bytes: pdf.length } }, { status: 201 });
|
||||
try {
|
||||
const created = await prisma.report.create({
|
||||
data: {
|
||||
planId,
|
||||
title: cfg.title,
|
||||
config: config as unknown as object,
|
||||
model: JSON.parse(JSON.stringify(model)) as object,
|
||||
pdf: new Uint8Array(pdf),
|
||||
pdfBytes: pdf.length,
|
||||
createdById: userId,
|
||||
},
|
||||
select: { id: true },
|
||||
});
|
||||
return NextResponse.json({ report: { id: created.id, bytes: pdf.length } }, { status: 201 });
|
||||
} catch (err) {
|
||||
console.error("[reports] Speichern fehlgeschlagen", err);
|
||||
return NextResponse.json(
|
||||
{ error: `Bericht konnte nicht gespeichert werden: ${err instanceof Error ? err.message : String(err)}` },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user