fifteen/apps/web/app/api/admin/ingest/[slug]/route.ts
2026-03-01 21:58:53 +01:00

36 lines
1 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import { sql } from "@/lib/db";
import { getPipelineQueue, JOB_OPTIONS } from "@/lib/queue";
export const runtime = "nodejs";
export async function POST(
_req: NextRequest,
{ params }: { params: Promise<{ slug: string }> },
) {
const { slug } = await params;
const rows = await Promise.resolve(sql<{ geofabrik_url: string }[]>`
SELECT geofabrik_url FROM cities WHERE slug = ${slug}
`);
if (rows.length === 0) {
return NextResponse.json({ error: "City not found" }, { status: 404 });
}
const { geofabrik_url: geofabrikUrl } = rows[0];
// Reset status
await Promise.resolve(sql`
UPDATE cities SET status = 'pending', error_message = NULL WHERE slug = ${slug}
`);
const queue = getPipelineQueue();
const job = await queue.add(
"refresh-city",
{ type: "refresh-city", citySlug: slug, geofabrikUrl },
JOB_OPTIONS["refresh-city"],
);
return NextResponse.json({ citySlug: slug, jobId: job.id }, { status: 202 });
}