/** * Resource route: POST /api/scrape * Triggers scraping for all venues (or a specific one via ?venue_id=xxx). * Returns JSON results and redirects back if called from a form. */ import { redirect } from "react-router"; import type { Route } from "./+types/api.scrape"; import { runAllScrapers, runScraper } from "~/lib/scraper-runner.server"; export async function action({ request }: Route.ActionArgs) { const formData = await request.formData(); const venueId = formData.get("venue_id"); const results = venueId ? [await runScraper(String(venueId))] : await runAllScrapers(); // If called from a browser form, redirect back const referer = request.headers.get("Referer"); if (referer) { return redirect(referer); } return Response.json({ results }); } // Allow GET for quick testing in the browser export async function loader({ request }: Route.LoaderArgs) { const url = new URL(request.url); const venueId = url.searchParams.get("venue_id"); const results = venueId ? [await runScraper(venueId)] : await runAllScrapers(); return Response.json({ results }); }