Mode hors-ligne
Stockaj Kiosk est conçu pour fonctionner même en l'absence de connexion réseau. Les opérations d'écriture (emprunts et retours) sont automatiquement mises en file d'attente et synchronisées dès que la connexion est rétablie.
Comment ça marche
Enregistrement local
Lorsqu'une opération échoue (erreur réseau, timeout serveur, etc.), elle est automatiquement enregistrée dans une base SQLite locale sur la machine. L'utilisateur voit l'écran de confirmation comme si l'opération avait réussi — aucune action supplémentaire n'est requise.
Synchronisation automatique
Le kiosk vérifie l'état de la file d'attente toutes les 5 secondes. Quand la connexion est rétablie :
- Les opérations en attente sont envoyées une par une, de la plus ancienne à la plus récente
- Chaque opération réussie est supprimée de la file
- En cas d'échec, l'opération est réessayée plus tard
Politique de retry
Chaque opération en file d'attente dispose de 3 tentatives maximum :
| Tentative | Résultat |
|---|---|
| 1ère à 3ème | Réessayée lors du prochain cycle de synchronisation |
| Après 3 échecs | Marquée comme échouée (ne sera plus réessayée automatiquement) |
Indicateur de connexion
L'indicateur de connexion est affiché en permanence en bas à gauche de l'écran, sur toutes les pages (cockpit, configuration, mode kiosk).
| Indicateur | Signification |
|---|---|
| 🟢 En ligne | Connexion active, aucune opération en attente |
| 🟡 N opération(s) en attente | Connexion active, mais des opérations sont en cours de synchronisation |
| 🔴 Hors ligne | Aucune connexion au serveur |

screenshot-status-online.png — Pastille verte « En ligne »

screenshot-status-pending.png — Pastille jaune avec opérations en attente

screenshot-status-offline.png — Pastille rouge « Hors ligne »
Heartbeat
Le kiosk envoie un ping au serveur toutes les 30 secondes pour vérifier la connectivité. Ce mécanisme permet de détecter rapidement les coupures réseau et les reconnexions.
Limitations connues
- Les recherches (bénévoles, articles) nécessitent une connexion active — elles ne sont pas mises en cache
- Les scans de QR codes nécessitent une connexion pour identifier l'article
- Seules les opérations d'écriture (créer un emprunt, valider un retour) sont mises en file d'attente
Données stockées localement
La file d'attente hors-ligne stocke les informations suivantes pour chaque opération :
| Donnée | Description |
|---|---|
| URL | Endpoint API cible |
| Méthode | POST (emprunt) ou PATCH (retour) |
| Données | Corps de la requête (identifiants, quantités, notes) |
| Horodatage | Date et heure de l'opération |
| Compteur de tentatives | Nombre de tentatives déjà effectuées |
| Statut | pending, retrying, ou failed |
Ces données sont stockées dans un fichier SQLite local (offline_queue.db) et sont supprimées après synchronisation réussie.