30 lines
905 B
TypeScript
30 lines
905 B
TypeScript
import { NextResponse } from "next/server";
|
|
import { gerarBriefingPdfBuffer } from "@/lib/briefing-pdf";
|
|
import { getBriefingPdfData } from "@/lib/pdf-data";
|
|
|
|
export const runtime = "nodejs";
|
|
|
|
function safeFileName(value: string) {
|
|
return value
|
|
.normalize("NFD")
|
|
.replace(/[\u0300-\u036f]/g, "")
|
|
.replace(/[^a-zA-Z0-9-_]+/g, "-")
|
|
.replace(/-+/g, "-")
|
|
.replace(/^-|-$/g, "")
|
|
.toLowerCase();
|
|
}
|
|
|
|
export async function GET(_request: Request, { params }: { params: { id: string } }) {
|
|
const data = await getBriefingPdfData(params.id);
|
|
const buffer = await gerarBriefingPdfBuffer(data);
|
|
const fileName = `${safeFileName(data.briefing.titulo || "briefing")}.pdf`;
|
|
|
|
return new NextResponse(buffer, {
|
|
headers: {
|
|
"Content-Type": "application/pdf",
|
|
"Content-Disposition": `attachment; filename="${fileName}"`,
|
|
"X-Content-Type-Options": "nosniff"
|
|
}
|
|
});
|
|
}
|