From c85b29910ce65846d5aec8e8e0836ebd7ad2bc29 Mon Sep 17 00:00:00 2001 From: Dicken Date: Sun, 12 Jul 2026 14:49:08 +0200 Subject: [PATCH] fix: KoePi expliziter REWE-Dortmund-Ausschluss + Diagnose-Logging fuer Adress-Filter --- backend/src/tools/koepi/routes.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/backend/src/tools/koepi/routes.js b/backend/src/tools/koepi/routes.js index 22e8b24..e9995ca 100644 --- a/backend/src/tools/koepi/routes.js +++ b/backend/src/tools/koepi/routes.js @@ -50,6 +50,16 @@ function normalizeAddress(s) { .replace(/[^a-zäöüß0-9]/g, ''); } +// Explizit unerwünschte Marken/Franchise-Label, unabhängig von der Adresse — +// "REWE Dortmund" ist auf marktguru ein eigener Franchise-Betreiber-Name, der +// auch dann raus soll, wenn seine Adresse zufällig mit einer lokalen Filiale +// übereinstimmt +const EXCLUDED_RETAILER_NAMES = ['rewe dortmund']; +function isExcludedRetailer(retailer) { + const n = (retailer || '').toLowerCase(); + return EXCLUDED_RETAILER_NAMES.some(x => n.includes(x)); +} + // Prüft, ob die tatsächlich gescrapte Adresse zu einer der bekannten LOKALEN // Filialen für diesen Händler passt. Ohne erkannten Händler oder ohne gescrapte // Adresse wird NICHT gefiltert (lieber ein Angebot zuviel zeigen als eins zu @@ -168,7 +178,13 @@ async function scrapeMarktguru(forceRefresh = false) { // zeigt teils auch weiter entfernte Filialen derselben Kette, z.B. "REWE Dortmund" // oder einen anderen Netto/Kaufland-Standort — anhand der echten gescrapten // Adresse rausfiltern statt sie fälschlich mit der lokalen Adresse zu überschreiben) - const localOnly = filtered.filter(o => isLocalBranch(o.retailer, o.realAddress)); + console.log('🍺 KöPi Adress-Diagnose:', filtered.map(o => + `${o.retailer} | realAddress="${o.realAddress}" | excluded=${isExcludedRetailer(o.retailer)} | local=${isLocalBranch(o.retailer, o.realAddress)}` + ).join('\n ')); + + const localOnly = filtered + .filter(o => !isExcludedRetailer(o.retailer)) + .filter(o => isLocalBranch(o.retailer, o.realAddress)); // Händler normalisieren: E center = EDEKA for (const o of localOnly) {