feat(search): Treffer ohne Recipe-JSON-LD rausfiltern
All checks were successful
Build & Publish Docker Image / build-and-push (push) Successful in 1m17s

Wir fetchen die Trefferseite sowieso schon fürs Thumbnail — prüfen
jetzt in der gleichen HTML-Parse-Runde, ob überhaupt ein
schema.org/Recipe JSON-LD vorhanden ist. Fehlt es, wird der Treffer
aus der Liste entfernt, weil der Importer auf dieser Seite später
sowieso mit „Diese Seite enthält kein Rezept" scheitern würde.

- Migration 007: thumbnail_cache.has_recipe (NULL=unbekannt, 0=nein, 1=ja).
- Fetch-Fehler hinterlassen NULL → Treffer bleibt konservativ sichtbar.
- Neue export `hasRecipeJsonLd(html)` in json-ld-recipe.ts.
- Alle Cache-Reads/Writes nehmen den neuen Wert mit.

Tests: +2 für Filter/Failover, bestehende Thumbnail-Tests mit
Recipe-JSON-LD-Stub ergänzt, damit sie nicht selber rausgefiltert
werden.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-17 22:20:22 +02:00
parent dbc9646caa
commit 342ea0efc8
4 changed files with 125 additions and 33 deletions

View File

@@ -0,0 +1,11 @@
-- Erweitert thumbnail_cache um ein has_recipe-Flag. Beim Thumbnail-
-- Enrichment checken wir, ob die Seite überhaupt ein schema.org/Recipe
-- JSON-LD enthält — sonst kann der Importer das Rezept später sowieso
-- nicht extrahieren, und der User sieht nur die „Diese Seite enthält
-- kein Rezept"-Fehlermeldung.
--
-- NULL = unbekannt (vor dieser Migration gecached oder Fetch schlug fehl,
-- dann behalten wir den Treffer konservativ);
-- 0 = gesicherter Nicht-Treffer (ausblenden);
-- 1 = Rezept vorhanden.
ALTER TABLE thumbnail_cache ADD COLUMN has_recipe INTEGER;