Synchronization Engine
Version : 1.0
Statut : Architecture cible
Décision : MOBILE-007
1. Objectif
Le Synchronization Engine est responsable de maintenir une cohérence permanente entre le téléphone et la plateforme DMV.
Il constitue le lien entre :
- le Cache Engine ;
- les applications React ;
- l'API Laravel.
Contrairement au Cache Engine, il ne conserve aucune donnée.
Son rôle est uniquement d'orchestrer les échanges entre le téléphone et le serveur.
État actuel
Le code actuel ne présente pas encore un Synchronization Engine mobile centralisé. La synchronisation existe plutôt sous forme de comportements distribués :
- appels API ou Supabase depuis les applications web ;
- rafraîchissement des données par les couches front ;
- invalidation ou relecture ponctuelle après certaines actions ;
- cache serveur ou front selon les modules.
Cette situation est cohérente avec l'état actuel du projet, mais elle n'est pas encore la cible mobile.
Architecture cible
Le Synchronization Engine orchestre les échanges entre le téléphone, le Cache Engine et l'API Laravel. Il ne décide pas du métier et ne conserve pas la vérité.
Il garantit l'ordre, la reprise, l'idempotence, l'absence de perte de brouillon et la convergence vers l'état serveur.
Migration
La convergence consiste à :
- identifier les actions mobiles qui doivent être rejouables ;
- attribuer un identifiant stable aux brouillons et opérations locales ;
- rendre les endpoints Laravel compatibles avec les rejouements idempotents ;
- centraliser la file de synchronisation mobile ;
- connecter cette file au Cache Engine et aux événements réseau Capacitor.
2. Philosophie
Le Synchronization Engine ne décide jamais.
Il applique.
Toutes les décisions métier restent prises par le serveur.
Le moteur garantit uniquement que :
- les bonnes données sont envoyées ;
- dans le bon ordre ;
- au bon moment ;
- sans perte.
3. Principes fondamentaux
Le moteur repose sur six principes.
Le serveur reste prioritaire
Le téléphone ne peut jamais imposer une vérité au serveur.
Toutes les validations sont réalisées côté Laravel.
Les synchronisations sont silencieuses
L'utilisateur ne doit jamais avoir à lancer une synchronisation.
Elle est automatique.
Une seule synchronisation à la fois
Les synchronisations sont séquentielles.
Deux synchronisations concurrentes sont interdites.
Reprise automatique
Une coupure réseau ne doit jamais faire perdre un travail.
Le moteur reprend automatiquement lorsqu'une connexion revient.
Idempotence
Une synchronisation peut être rejouée plusieurs fois.
Elle ne doit jamais créer :
- deux publications ;
- deux favoris ;
- deux événements.
Chaque opération doit être idempotente.
Principe technique cible :
Client
↓
Draft UUID stable
↓
API Laravel
↓
UPSERT métier
↓
Contrainte UNIQUE
↓
Réponse unique et rejouable
Le client peut donc renvoyer la même opération après une coupure réseau. Laravel reconnaît l'identifiant fonctionnel, applique une création ou mise à jour contrôlée, puis retourne l'état serveur sans dupliquer la ressource.
Pas de conflit complexe
L'architecture DMV préfère empêcher les conflits.
Plutôt que les résoudre.
4. Déclencheurs
Une synchronisation peut être déclenchée par :
- retour du réseau ;
- ouverture de l'application ;
- reprise après veille ;
- reconnexion utilisateur ;
- action utilisateur.
5. Types de synchronisation
Toutes les données n'ont pas la même priorité.
Synchronisation critique
Exemples :
- authentification
- session
- permissions
- sécurité
Toujours exécutée immédiatement.
Synchronisation utilisateur
Exemples :
- favoris
- préférences
- paramètres
Synchronisation contextuelle
Exemples :
- commune active
- Mur
- agenda
- notifications
Synchronisation des brouillons
Les brouillons possèdent leur propre file d'attente.
Ils ne sont jamais mélangés aux autres données.
6. File d'attente
Toutes les opérations sont placées dans une queue.
Exemple :
Création brouillon
↓
Ajout file
↓
Connexion disponible
↓
Envoi API
↓
Validation Laravel
↓
Confirmation
↓
Suppression de la queue
Aucune opération n'est perdue.
7. Ordre des synchronisations
L'ordre suivant est imposé.
1. Session
↓
2. Permissions
↓
3. Préférences
↓
4. Brouillons
↓
5. Contexte
↓
6. Cache secondaire
Cet ordre garantit une plateforme toujours cohérente.
8. Brouillons
Les brouillons constituent le seul contenu métier pouvant être créé hors connexion.
Exemple :
Nouvelle publication
↓
Création locale
↓
Synchronisation
↓
Création brouillon serveur
↓
Publication manuelle
Aucune publication automatique.
9. Reprise après coupure
Exemple :
Utilisateur
↓
Rédige une publication
↓
Perte réseau
↓
Brouillon local
↓
Retour réseau
↓
Synchronisation automatique
↓
Le brouillon apparaît dans le Workspace
10. Détection réseau
Le moteur écoute en permanence :
- perte réseau ;
- retour réseau ;
- changement Wi-Fi / 4G / 5G.
Une simple variation de qualité réseau ne déclenche pas une synchronisation.
11. Gestion des erreurs
Une erreur n'interrompt jamais définitivement le moteur.
Exemple :
Erreur serveur
↓
Nouvelle tentative
↓
Succès
Les tentatives suivent une stratégie de backoff progressif.
12. Politique de Retry
Exemple :
Tentative 1
↓
5 secondes
↓
Tentative 2
↓
30 secondes
↓
Tentative 3
↓
2 minutes
↓
Tentative 4
↓
10 minutes
↓
Puis reprise normale lors du retour réseau.
13. Déconnexion
Lors d'une déconnexion :
Le moteur :
- termine les opérations critiques ;
- annule les synchronisations secondaires ;
- vide les files temporaires ;
- supprime les données utilisateur du cache.
14. Notifications Push
Les notifications peuvent provoquer une synchronisation partielle.
Exemple :
Nouvelle publication
↓
Notification
↓
Téléchargement de la publication uniquement
Pas du Mur complet.
15. Économie de batterie
Le moteur évite :
- les réveils inutiles ;
- les synchronisations permanentes ;
- les téléchargements redondants.
Il privilégie des synchronisations regroupées.
16. Sécurité
Toutes les communications utilisent :
HTTPS
JWT Supabase validé par Laravel
Token Sanctum pour les routes métier
API sécurisée
Aucune donnée sensible n'est synchronisée en clair.
17. Cas particuliers
Modification impossible hors connexion
Modification d'un acteur
↓
Connexion absente
↓
Action refusée
↓
Message utilisateur
Brouillon existant
Le téléphone détecte qu'un brouillon existe déjà.
↓
Il met à jour le brouillon.
Jamais création d'un second brouillon.
18. ADR
Alternatives étudiées
Synchronisation permanente
Rejetée.
Consommation excessive.
Synchronisation manuelle
Rejetée.
Mauvaise UX.
Synchronisation automatique intelligente
Retenue.
Simple.
Robuste.
Compatible avec Online First.
19. Décisions figées
✅ Synchronisation automatique.
✅ Une seule synchronisation à la fois.
✅ Reprise automatique.
✅ Brouillons synchronisés.
✅ Publication uniquement en ligne.
✅ File d'attente centralisée.
✅ Serveur prioritaire.
✅ Opérations idempotentes.
20. Conclusion
Le Synchronization Engine garantit que le téléphone reste synchronisé avec la plateforme DMV sans intervention de l'utilisateur.
Son objectif n'est pas de rendre le téléphone autonome.
Son objectif est de fournir une expérience fluide, fiable et robuste tout en conservant le serveur comme unique source de vérité.