spb/vrai-prix Public
Vrai-Prix — l'évaluation du vrai prix des propriétés résidentielles au Québec.
TypeScript 96.7%
CSS 3.2%
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2import { NextRequest, NextResponse } from "next/server";3import { estimateByUnitId } from "@/lib/estimator";4import { buildReport } from "@/lib/report";56export async function GET(req: NextRequest) {7 const rawId = req.nextUrl.searchParams.get("id");8 if (!rawId) return NextResponse.json({ error: "id requis" }, { status: 400 });9 const id = rawId.replace(/\D/g, "") || rawId; // tolère un id décoré (espaces, tirets)10 // tolère les liens du type ?format=professionnel générés par des agents11 const format = (req.nextUrl.searchParams.get("format") ?? "").toLowerCase();12 if (format.startsWith("pro")) {13 return NextResponse.redirect(new URL(`/api/report/pro?id=${encodeURIComponent(id)}`, req.url));14 }15 const data = estimateByUnitId(id);16 if (!data || !data.unit)17 return NextResponse.json({ error: "unité introuvable" }, { status: 404 });18 const pdf = await buildReport(data);19 const slug = (data.unit.adresse ?? "propriete")20 .toLowerCase()21 .normalize("NFD")22 .replace(/[̀-ͯ]/g, "")23 .replace(/[^a-z0-9]+/g, "-")24 .replace(/^-+|-+$/g, "");25 return new NextResponse(new Uint8Array(pdf), {26 headers: {27 "Content-Type": "application/pdf",28 "Content-Disposition": `attachment; filename="vrai-prix-${slug}.pdf"`,29 "Cache-Control": "private, max-age=300",30 },31 });32}33