import { requireAuth } from "@/lib/jwt"; import { sql } from "@/lib/db"; // GET — online drivers of `service` near (lat,lng), for the rider map and the // "nearest driver ETA" estimate on confirm-ride. Only real, logged-in drivers // (user_id IS NOT NULL) with a fresh location ping are returned; legacy seed // rows have no position and are never shown to riders. // // Query: ?service=car&lat=33.89&lng=35.50&radius=8000 export async function GET(req: Request) { const auth = requireAuth(req); if ("error" in auth) return auth.error; try { const url = new URL(req.url); const service = url.searchParams.get("service") ?? "car"; const lat = Number(url.searchParams.get("lat")); const lng = Number(url.searchParams.get("lng")); if (Number.isNaN(lat) || Number.isNaN(lng)) { return Response.json( { error: "lat and lng query params are required numbers." }, { status: 400 }, ); } const rows = await sql` SELECT id, first_name, last_name, profile_image_url, car_image_url, car_seats, rating, service, car_model, latitude, longitude, last_seen FROM drivers WHERE service = ${service} AND online = TRUE AND user_id IS NOT NULL AND last_seen > CURRENT_TIMESTAMP - INTERVAL '60 seconds' AND latitude IS NOT NULL AND longitude IS NOT NULL `; return Response.json({ data: rows }); } catch (error) { console.error("[DRIVER_NEARBY]: ", error); return Response.json({ error: "Internal Server Error" }, { status: 500 }); } }