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:
parent
f934560a12
commit
d23d696745
7 changed files with 42 additions and 16 deletions
|
|
@ -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 = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue