[Feature] Mode hors-ligne complet — IndexedDB pour les données utilisateur #32

Open
opened 2026-08-05 11:07:51 -04:00 by NixCyRy · 0 comments
NixCyRy commented 2026-08-05 11:07:51 -04:00 (Migrated from github.com)

Problème

Le Service Worker (sw.js) cache les assets statiques, mais les données utilisateur (sélections, tracking, liste d'épicerie) ne sont pas mises en cache. Les requêtes API sont network-only par design.

Si l'utilisateur perd connexion (en magasin, dans le métro), il ne peut plus :

  • Voir sa liste d'épicerie
  • Consulter son suivi de la journée
  • Ajouter des aliments

Solution

Étape 1 — Cache de lecture (offline read)

Utiliser IndexedDB pour stocker les dernières données fetchées :

  • /api/foods → cache à vie (change rarement)
  • /api/tracking/* → cache synchronisé au login
  • /api/selections/* → cache synchronisé au login
  • Liste d'épicerie → cache au moment de la génération

Étape 2 — Write en attente (offline write)

Quand offline, stocker les modifications dans IndexedDB et les synchroniser au retour de connexion via SyncManager (Background Sync API).

Étape 3 — UI indicative

  • Banner « Mode hors-ligne » quand pas de connexion
  • Indicateur « Modifs en attente de sync »
  • Auto-sync au retour de connexion

Librairies suggérées

  • Vanilla IndexedDB (pas de dépendance)
  • Ou idb (2KB, wrapper propre)

Sévérité

P2 — Cas d'usage réel (épicerie = lieu sans bonne connexion).

## Problème Le Service Worker (`sw.js`) cache les assets statiques, mais **les données utilisateur (sélections, tracking, liste d'épicerie) ne sont pas mises en cache**. Les requêtes API sont `network-only` par design. Si l'utilisateur perd connexion (en magasin, dans le métro), il ne peut plus : - Voir sa liste d'épicerie - Consulter son suivi de la journée - Ajouter des aliments ## Solution ### Étape 1 — Cache de lecture (offline read) Utiliser IndexedDB pour stocker les dernières données fetchées : - `/api/foods` → cache à vie (change rarement) - `/api/tracking/*` → cache synchronisé au login - `/api/selections/*` → cache synchronisé au login - Liste d'épicerie → cache au moment de la génération ### Étape 2 — Write en attente (offline write) Quand offline, stocker les modifications dans IndexedDB et les synchroniser au retour de connexion via `SyncManager` (Background Sync API). ### Étape 3 — UI indicative - Banner « Mode hors-ligne » quand pas de connexion - Indicateur « Modifs en attente de sync » - Auto-sync au retour de connexion ## Librairies suggérées - Vanilla IndexedDB (pas de dépendance) - Ou `idb` (2KB, wrapper propre) ## Sévérité P2 — Cas d'usage réel (épicerie = lieu sans bonne connexion).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
SlopVibe-org/nutri-food#32
No description provided.