summaryrefslogtreecommitdiff
path: root/app/routes/api.scrape.ts
blob: f9daa5c0a75b78a9154fb7a16151050e4a5ada5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
 * Resource route: /api/scrape
 *
 * POST (form action) — バックグラウンドでスクレイプ開始、202 を即時返却
 * GET  ?venue_id=xxx — 特定会場のみバックグラウンド開始
 * GET  (パラメータなし) — 全会場をバックグラウンド開始
 *
 * ステータス確認は /api/scrape-status?run_id=xxx
 */
import { redirect } from "react-router";
import type { Route } from "./+types/api.scrape";
import { startAllScrapersAsync, startScraperAsync } from "~/lib/scraper-runner.server";

export async function action({ request }: Route.ActionArgs) {
  const formData = await request.formData();
  const venueId = formData.get("venue_id");

  const run_id = venueId
    ? startScraperAsync(String(venueId))
    : startAllScrapersAsync();

  const referer = request.headers.get("Referer");
  if (referer) return redirect(referer);

  return Response.json({ run_id, status: "started" }, { status: 202 });
}

export async function loader({ request }: Route.LoaderArgs) {
  const url = new URL(request.url);
  const venueId = url.searchParams.get("venue_id");

  const run_id = venueId
    ? startScraperAsync(venueId)
    : startAllScrapersAsync();

  return Response.json({ run_id, status: "started" }, { status: 202 });
}