Fix: SW-Cache welcome-dashboard nach Foto-Upload löschen (SW by-v935)
Root cause: /api/dogs/{id}/welcome-dashboard ist SW-gecacht.
Nach Foto-Upload lieferte SW alten Response mit alter random_photo.url.
Fix: API.swCacheDelete() + localStorage-Key nach Upload invalidieren.
This commit is contained in:
parent
aa379d8e08
commit
fbb070032a
5 changed files with 17 additions and 8 deletions
|
|
@ -406,7 +406,7 @@ async def serve_media(path: str, request: _Request):
|
||||||
raise _HE(404, "Nicht gefunden.")
|
raise _HE(404, "Nicht gefunden.")
|
||||||
return _media_response(filepath)
|
return _media_response(filepath)
|
||||||
|
|
||||||
APP_VER = "934" # muss mit APP_VER in app.js übereinstimmen
|
APP_VER = "935" # muss mit APP_VER in app.js übereinstimmen
|
||||||
|
|
||||||
@app.get("/.well-known/assetlinks.json")
|
@app.get("/.well-known/assetlinks.json")
|
||||||
async def assetlinks():
|
async def assetlinks():
|
||||||
|
|
|
||||||
|
|
@ -800,9 +800,17 @@ const API = (() => {
|
||||||
get(`/osm/pois?type=${type}&south=${south}&west=${west}&north=${north}&east=${east}&fast=true`),
|
get(`/osm/pois?type=${type}&south=${south}&west=${west}&north=${north}&east=${east}&fast=true`),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// SW-Cache-Einträge für eine URL löschen (z.B. nach Foto-Upload)
|
||||||
|
async function swCacheDelete(path) {
|
||||||
|
try {
|
||||||
|
const c = await caches.open('ban-yaro-api-v1');
|
||||||
|
await c.delete(new Request(path));
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
// Öffentliche API
|
// Öffentliche API
|
||||||
return {
|
return {
|
||||||
get, post, put, patch, del, upload,
|
get, post, put, patch, del, upload, swCacheDelete,
|
||||||
auth, dogs, diary, health, tieraerzte, healthDocs, poison,
|
auth, dogs, diary, health, tieraerzte, healthDocs, poison,
|
||||||
places, routes, walks, events, sitting, forum, lost, knigge, weather, push,
|
places, routes, walks, events, sitting, forum, lost, knigge, weather, push,
|
||||||
friends, chat, webcal, importData, sharing, widget, notifications, services, ratings, sittingAccess, training, notes,
|
friends, chat, webcal, importData, sharing, widget, notifications, services, ratings, sittingAccess, training, notes,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Router, State-Management, Navigation, Initialisierung.
|
Router, State-Management, Navigation, Initialisierung.
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const APP_VER = '934'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
const APP_VER = '935'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||||
const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt
|
const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt
|
||||||
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
||||||
// Cache-Bust-Parameter nach Update-Reload sofort entfernen
|
// Cache-Bust-Parameter nach Update-Reload sofort entfernen
|
||||||
|
|
|
||||||
|
|
@ -769,9 +769,10 @@ window.Page_dog_profile = (() => {
|
||||||
await API.dogs.updatePhotoPosition(dog.id, 1.0, 0.0, 0.0);
|
await API.dogs.updatePhotoPosition(dog.id, 1.0, 0.0, 0.0);
|
||||||
_appState.activeDog = { ..._appState.activeDog, foto_url: result.foto_url, foto_zoom: 1, foto_offset_x: 0, foto_offset_y: 0 };
|
_appState.activeDog = { ..._appState.activeDog, foto_url: result.foto_url, foto_zoom: 1, foto_offset_x: 0, foto_offset_y: 0 };
|
||||||
_appState.dogs = _appState.dogs.map(d => d.id === dog.id ? _appState.activeDog : d);
|
_appState.dogs = _appState.dogs.map(d => d.id === dog.id ? _appState.activeDog : d);
|
||||||
// Hintergrund-Cache invalidieren
|
// localStorage + SW-Cache invalidieren
|
||||||
const userId2 = _appState.user?.id || 'anon';
|
const userId2 = _appState.user?.id || 'anon';
|
||||||
localStorage.removeItem(`w3_bg3_${userId2}_` + new Date().toISOString().slice(0, 10));
|
localStorage.removeItem(`w3_bg3_${userId2}_` + new Date().toISOString().slice(0, 10));
|
||||||
|
API.swCacheDelete(`/api/dogs/${dog.id}/welcome-dashboard`);
|
||||||
UI.modal.close();
|
UI.modal.close();
|
||||||
App.renderDogSwitcher?.();
|
App.renderDogSwitcher?.();
|
||||||
window.Worlds?.refresh(_appState);
|
window.Worlds?.refresh(_appState);
|
||||||
|
|
@ -1386,10 +1387,10 @@ window.Page_dog_profile = (() => {
|
||||||
saved.foto_url = result.foto_url;
|
saved.foto_url = result.foto_url;
|
||||||
_appState.activeDog = { ...saved };
|
_appState.activeDog = { ...saved };
|
||||||
_appState.dogs = _appState.dogs.map(d => d.id === saved.id ? _appState.activeDog : d);
|
_appState.dogs = _appState.dogs.map(d => d.id === saved.id ? _appState.activeDog : d);
|
||||||
// Hintergrund-Cache invalidieren damit Welten das neue Foto zeigen
|
// localStorage + SW-Cache invalidieren damit Welten das neue Foto zeigen
|
||||||
const userId = _appState.user?.id || 'anon';
|
const userId = _appState.user?.id || 'anon';
|
||||||
const todayKey = `w3_bg3_${userId}_` + new Date().toISOString().slice(0, 10);
|
localStorage.removeItem(`w3_bg3_${userId}_` + new Date().toISOString().slice(0, 10));
|
||||||
localStorage.removeItem(todayKey);
|
API.swCacheDelete(`/api/dogs/${saved.id}/welcome-dashboard`);
|
||||||
} catch {
|
} catch {
|
||||||
UI.toast.warning('Profil gespeichert, Foto konnte nicht hochgeladen werden.');
|
UI.toast.warning('Profil gespeichert, Foto konnte nicht hochgeladen werden.');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Offline-Cache + Push Notifications + Tile-Cache
|
Offline-Cache + Push Notifications + Tile-Cache
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const CACHE_VERSION = 'by-v934';
|
const CACHE_VERSION = 'by-v935';
|
||||||
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
||||||
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
||||||
const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache
|
const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue