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.ai2// Recherche par carte : unités d'évaluation autour d'un point (boîte englobante).3// Le rayon est plafonné côté serveur — la carte doit être assez zoomée.4import { NextRequest, NextResponse } from "next/server";5import { unitsNear } from "@/lib/db";67const MAX_HALF_LAT = 0.02; // ~2,2 km8const MAX_HALF_LNG = 0.03;9const MAX_LIMIT = 400;1011export function GET(req: NextRequest) {12 const q = req.nextUrl.searchParams;13 const lat = Number(q.get("lat"));14 const lng = Number(q.get("lng"));15 if (!Number.isFinite(lat) || !Number.isFinite(lng)) {16 return NextResponse.json({ error: "lat et lng requis" }, { status: 400 });17 }18 const halfLat = Math.min(Math.abs(Number(q.get("halfLat")) || 0.008), MAX_HALF_LAT);19 const halfLng = Math.min(Math.abs(Number(q.get("halfLng")) || 0.012), MAX_HALF_LNG);20 const limit = Math.min(Math.abs(Number(q.get("limit")) || 300), MAX_LIMIT);21 try {22 const results = unitsNear(lat, lng, halfLat, halfLng, limit).map((u) => ({23 id: u.id_provinc,24 adresse: u.adresse,25 apt: u.apt,26 municipalite: u.municipalite,27 typeProp: u.type_prop,28 lat: u.lat,29 lng: u.lng,30 est2026: u.est_2026,31 }));32 return NextResponse.json({ results });33 } catch {34 return NextResponse.json({ results: [] });35 }36}37