Tagesfoto-Cache validieren + bei Diary/Media-Löschung mit-bereinigen

Bug: daily_photo_cache zeigte auf gelöschte Tagebuch-Foto-URLs, weil
Löschen eines Eintrags oder einzelnen Medien-Items den Cache nicht
mit-bereinigte. Heim-Tab in der iOS-App lud dann 404 → kein Tagesbild.

Fix in dogs.py /welcome-dashboard:
- Bevor das Cache-Foto zurückgegeben wird, prüfen ob die URL noch in
  diary_media existiert. Wenn nicht: Cache-Eintrag löschen und neu
  wählen → selbstheilend für alte verwaiste Einträge.

Fix in diary.py:
- delete_diary: vor dem CASCADE-Delete von diary_media die URLs
  sammeln und alle daily_photo_cache-Zeilen darauf löschen.
- delete_media_item: gleicher Cleanup für die eine URL.

Cache ist klein (max 1 Eintrag pro Hund pro Tag) — Hygiene-Cleanup
ist günstig und macht das System defensiv.
This commit is contained in:
rene 2026-05-30 19:00:56 +02:00
parent f934560a12
commit d23d696745
7 changed files with 42 additions and 16 deletions

View file

@ -251,6 +251,21 @@ async def get_welcome_dashboard(dog_id: int, user=Depends(get_current_user)):
(dog_id, today_iso)
).fetchone()
# Cache validieren: zeigt der Eintrag auf eine noch existierende
# Tagebuch-Foto-URL? Wenn der User das Bild gelöscht hat, bliebe
# sonst eine tote URL im Cache → Client lädt 404 → kein Hintergrund.
if cached and cached["photo_url"]:
still_there = conn.execute(
"SELECT 1 FROM diary_media WHERE url=? AND media_type='image' LIMIT 1",
(cached["photo_url"],)
).fetchone()
if not still_there:
conn.execute(
"DELETE FROM daily_photo_cache WHERE dog_id=? AND datum=?",
(dog_id, today_iso)
)
cached = None
random_photo = None
if cached and cached["photo_url"]:
random_photo = {