feat: add geo points endpoint
This commit is contained in:
29
apps/web/app/api/geo/route.ts
Normal file
29
apps/web/app/api/geo/route.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import { getDb } from "@tline/db";
|
||||||
|
|
||||||
|
import { shapeGeoRows } from "./shape";
|
||||||
|
|
||||||
|
export const runtime = "nodejs";
|
||||||
|
|
||||||
|
export async function GET(): Promise<Response> {
|
||||||
|
const db = getDb();
|
||||||
|
|
||||||
|
const rows = await db<
|
||||||
|
{
|
||||||
|
id: string;
|
||||||
|
gps_lat: number | null;
|
||||||
|
gps_lon: number | null;
|
||||||
|
}[]
|
||||||
|
>`
|
||||||
|
select
|
||||||
|
a.id,
|
||||||
|
a.gps_lat,
|
||||||
|
a.gps_lon
|
||||||
|
from assets a
|
||||||
|
where a.gps_lat is not null
|
||||||
|
and a.gps_lon is not null
|
||||||
|
order by a.capture_ts_utc asc nulls last, a.id asc
|
||||||
|
limit 1000
|
||||||
|
`;
|
||||||
|
|
||||||
|
return Response.json(shapeGeoRows(rows));
|
||||||
|
}
|
||||||
19
apps/web/app/api/geo/shape.ts
Normal file
19
apps/web/app/api/geo/shape.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
type GeoRow = {
|
||||||
|
id: string;
|
||||||
|
gps_lat: number | null;
|
||||||
|
gps_lon: number | null;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GeoPoint = {
|
||||||
|
id: string;
|
||||||
|
gps_lat: number | null;
|
||||||
|
gps_lon: number | null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export function shapeGeoRows(rows: GeoRow[]): GeoPoint[] {
|
||||||
|
return rows.map((row) => ({
|
||||||
|
id: row.id,
|
||||||
|
gps_lat: row.gps_lat,
|
||||||
|
gps_lon: row.gps_lon,
|
||||||
|
}));
|
||||||
|
}
|
||||||
17
apps/web/src/__tests__/geo-route.test.ts
Normal file
17
apps/web/src/__tests__/geo-route.test.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { test, expect } from "bun:test";
|
||||||
|
|
||||||
|
test("shapeGeoRows returns id/lat/lon only", async () => {
|
||||||
|
const { shapeGeoRows } = await import("../../app/api/geo/shape");
|
||||||
|
const rows = [
|
||||||
|
{
|
||||||
|
id: "a",
|
||||||
|
gps_lat: 40.1,
|
||||||
|
gps_lon: -73.9,
|
||||||
|
capture_ts_utc: "2026-02-01T00:00:00.000Z",
|
||||||
|
media_type: "image",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
expect(shapeGeoRows(rows)).toEqual([
|
||||||
|
{ id: "a", gps_lat: 40.1, gps_lon: -73.9 },
|
||||||
|
]);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user