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
|
|
@ -626,6 +626,14 @@ async def delete_diary(dog_id: int, entry_id: int, user=Depends(get_current_user
|
|||
_own_dog(dog_id, user["id"], conn)
|
||||
except HTTPException:
|
||||
raise HTTPException(403, "Nur der Besitzer darf Einträge löschen.")
|
||||
# daily_photo_cache aufräumen für alle URLs dieses Eintrags, bevor
|
||||
# diary_media via CASCADE wegfällt. Sonst zeigt der Cache auf nicht
|
||||
# mehr existierende Bilder und Heim hat kein Tagesfoto.
|
||||
media_urls = [r["url"] for r in conn.execute(
|
||||
"SELECT url FROM diary_media WHERE diary_id=?", (entry_id,)
|
||||
).fetchall()]
|
||||
for u in media_urls:
|
||||
conn.execute("DELETE FROM daily_photo_cache WHERE photo_url=?", (u,))
|
||||
conn.execute(
|
||||
"DELETE FROM diary WHERE id=? AND dog_id=?", (entry_id, dog_id)
|
||||
)
|
||||
|
|
@ -784,6 +792,9 @@ async def delete_media_item(dog_id: int, entry_id: int, media_id: int,
|
|||
if file_path:
|
||||
try: os.remove(file_path)
|
||||
except OSError: pass
|
||||
# daily_photo_cache mit-bereinigen falls das Bild als Tagesfoto
|
||||
# gewählt war (sonst lädt der Client 404).
|
||||
conn.execute("DELETE FROM daily_photo_cache WHERE photo_url=?", (row["url"],))
|
||||
conn.execute("DELETE FROM diary_media WHERE id=?", (media_id,))
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue