Fix: Anniversary-Job + RASFF 404, SW by-v1120

Aus Container-Log gefundene Backend-Errors:

1. _job_anniversary_reminders: 'no such column: d.user_id'
   diary-Tabelle hat keine user_id — User-Bezug geht über dogs.user_id.
   → JOIN dogs ON dogs.id = d.dog_id ergänzt + SELECT dogs.user_id.
   Job läuft täglich 09:00 — war seit Tag X kaputt, kein Push für
   Jahrestage gesendet.

2. RASFF API 404 (EU Rapid Alert System for Food and Feed):
   webgate.ec.europa.eu/rasff-window/backend/public/... ist umgezogen.
   → HTTPStatusError mit 404/410/503 wird jetzt nur als WARNING geloggt
   (vorher ERROR → Error-Digest spammte täglich). Fallback ist eh schon
   ein leeres Array, App läuft weiter. EU-Endpoint-URL muss nochmal
   recherchiert werden, dann RASFF_URL aktualisieren — Folge-Sprint.
This commit is contained in:
rene 2026-05-27 14:51:34 +02:00
parent c7a84438d1
commit 26b515cede
7 changed files with 35 additions and 18 deletions

View file

@ -49,12 +49,27 @@ async def list_recalls(q: str = ""):
# Interne Hilfsfunktion: RASFF API abfragen
# ------------------------------------------------------------------
async def fetch_rasff_recalls() -> list[dict]:
"""Fragt die RASFF API ab und gibt eine Liste normalisierter Einträge zurück."""
"""Fragt die RASFF API ab und gibt eine Liste normalisierter Einträge zurück.
Hinweis: Die EU hat die API mehrfach umgezogen wenn der Endpoint
404 oder andere persistent fehler liefert, geben wir [] zurück und
loggen nur als Warning (nicht Error), damit das Error-Digest nicht
täglich spammt.
"""
try:
async with httpx.AsyncClient(timeout=10.0) as client:
resp = await client.get(RASFF_URL, params=RASFF_PARAMS)
resp.raise_for_status()
data = resp.json()
except httpx.HTTPStatusError as e:
if e.response.status_code in (404, 410, 503):
# API umgezogen oder temporär unten — Warning, kein Error
logger.warning(
f"RASFF API liefert {e.response.status_code} (Endpoint vermutlich umgezogen) — überspringe."
)
else:
logger.error(f"RASFF API-HTTP-Fehler: {e}")
return []
except Exception as e:
logger.error(f"RASFF API-Fehler: {e}")
return []