Repository Public
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2// Recherche dans les propriétés à vendre (copie Immo-Ka + estimations vp_eval).3import { NextRequest, NextResponse } from "next/server";4import { searchListings, type SortKey, type TypeGroupKey } from "@/lib/immoka";56export const dynamic = "force-dynamic";78const SORTS: SortKey[] = ["recent", "price_asc", "price_desc", "deal", "premium", "est_desc"];9const GROUPS: TypeGroupKey[] = ["maison", "condo", "plex", "terrain", "chalet", "fermette", "mobile", "commercial", "autre"];1011export function GET(req: NextRequest) {12 const q = req.nextUrl.searchParams;13 const num = (k: string) => {14 const v = Number(q.get(k));15 return Number.isFinite(v) && v > 0 ? v : undefined;16 };17 const sort = q.get("sort") as SortKey | null;18 const group = q.get("group") as TypeGroupKey | null;19 try {20 const res = searchListings({21 q: q.get("q") ?? undefined,22 muni: q.get("muni") ?? undefined,23 group: group && GROUPS.includes(group) ? group : "",24 min: num("min"),25 max: num("max"),26 beds: num("beds"),27 evalOnly: q.get("eval") === "1",28 sort: sort && SORTS.includes(sort) ? sort : "recent",29 page: num("page") ?? 1,30 per: num("per") ?? 24,31 });32 return NextResponse.json(res, {33 headers: { "Cache-Control": "public, max-age=120, stale-while-revalidate=600" },34 });35 } catch (e) {36 return NextResponse.json({ error: String(e) }, { status: 500 });37 }38}39