wayfarer-weather/app/api/geocode/route.ts
Cayden Schwechten 6250d23297 init
2026-10-31 21:20:16 -05:00

28 lines
990 B
TypeScript

import { NextResponse, type NextRequest } from "next/server";
import { reversePlace, searchPlaces } from "@/lib/weather/geocode";
import { badRequest, errorResponse, forbidCrossSite, parseCoords } from "@/lib/weather/respond";
/**
* GET /api/geocode?q=Burnsville → Place[] (search by name)
* GET /api/geocode?lat=44.7&lon=-93.2 → Place (name for coordinates)
*/
export async function GET(request: NextRequest) {
const blocked = forbidCrossSite(request);
if (blocked) return blocked;
const params = request.nextUrl.searchParams;
const query = params.get("q")?.trim();
try {
if (query) {
if (query.length < 2) return NextResponse.json([]);
return NextResponse.json(await searchPlaces(query));
}
const coords = parseCoords(params);
if (!coords) return badRequest("Pass either q, or lat and lon");
return NextResponse.json(await reversePlace(coords.lat, coords.lon));
} catch (error) {
return errorResponse(error);
}
}