init
This commit is contained in:
commit
6250d23297
53 changed files with 6381 additions and 0 deletions
28
app/api/geocode/route.ts
Normal file
28
app/api/geocode/route.ts
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue