From a729412478ba969bd8607843e741bf943fc2d9f6 Mon Sep 17 00:00:00 2001 From: vikingowl Date: Sat, 18 Apr 2026 17:29:05 +0200 Subject: [PATCH 1/3] feat(admin): add Run crawl button and CrawlSummary rendering to discovery page --- .../routes/admin/discovery/+page.server.ts | 35 ++++++ web/src/routes/admin/discovery/+page.svelte | 111 +++++++++++++++++- 2 files changed, 145 insertions(+), 1 deletion(-) diff --git a/web/src/routes/admin/discovery/+page.server.ts b/web/src/routes/admin/discovery/+page.server.ts index 7d1b11b..f91d161 100644 --- a/web/src/routes/admin/discovery/+page.server.ts +++ b/web/src/routes/admin/discovery/+page.server.ts @@ -1,6 +1,23 @@ import type { PageServerLoad, Actions } from './$types.js'; import { redirect, fail } from '@sveltejs/kit'; import { serverFetch } from '$lib/api/client.server.js'; +import { ApiClientError } from '$lib/api/client.js'; + +type CrawlSummary = { + started_at: string; + duration_ms: number; + per_source: Record; + merged: number; + merged_across_sites: number; + discovered: number; + deduped_existing: number; + deduped_rejected: number; + deduped_queue: number; + link_check_failed: number; + validation_failed: number; + date_conflicts: number; + source_errors: Array<{ source: string; error: string }>; +}; type DiscoveredMarket = { id: string; @@ -94,6 +111,24 @@ export const actions: Actions = { } }, + crawl: async ({ cookies, fetch }) => { + try { + const res = await serverFetch(`/admin/discovery/crawl-manual`, cookies, { + method: 'POST', + fetch + }); + return { crawlSummary: res.data }; + } catch (err) { + if (err instanceof ApiClientError && err.status === 429) { + return fail(429, { + crawlError: `Rate limit erreicht. Bitte kurz warten und erneut versuchen. (${err.message})` + }); + } + const message = err instanceof Error ? err.message : 'Crawl fehlgeschlagen.'; + return fail(500, { crawlError: message }); + } + }, + update: async ({ request, cookies, fetch }) => { const form = await request.formData(); const id = String(form.get('id') ?? ''); diff --git a/web/src/routes/admin/discovery/+page.svelte b/web/src/routes/admin/discovery/+page.svelte index 775cc9a..70fc31b 100644 --- a/web/src/routes/admin/discovery/+page.svelte +++ b/web/src/routes/admin/discovery/+page.svelte @@ -1,6 +1,8 @@