SPB Git

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.4 KB · 33 lines typescript
Raw Blame History
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