6.8 KiB
État d'implémentation de l'architecture
Auteur : Équipe 4NK Date : 2025-01-27 Dernière mise à jour : 2025-01-27
Vue d'ensemble
Ce document décrit l'état actuel de l'implémentation des principes d'architecture. Toutes les migrations majeures sont terminées et le code est conforme à l'architecture définie.
Services créés
✅ Services conformes aux principes
-
lib/websocketService.ts- Service de gestion des WebSockets- Gère les connexions WebSocket
- Communique avec les Service Workers via
swClient - ✅ Conforme aux principes
-
lib/writeOrchestrator.ts- Service de gestion des écritures- Orchestre les écritures vers WebSockets/API et Web Worker d'écriture
- Écritures réseau et locales en parallèle
- ✅ Conforme aux principes
-
lib/writeService.ts- Service de gestion du Web Worker d'écriture- Route les écritures vers le Web Worker (
writeWorker.js) - Fallback vers écriture directe si Web Worker indisponible
- ✅ Conforme aux principes
- Route les écritures vers le Web Worker (
-
public/writeWorker.js- Web Worker d'écriture- Gère toutes les écritures dans IndexedDB
- Transactions multi-tables
- ✅ Conforme aux principes
-
lib/notificationReader.ts- Service de lecture des notifications- Détecte les nouvelles notifications dans IndexedDB
- Séparé du Service Worker qui alimente les notifications
- ✅ Conforme aux principes
-
lib/notificationService.ts- Service de gestion des notifications- Stocke les notifications dans IndexedDB via
writeService - ✅ Conforme aux principes
- Stocke les notifications dans IndexedDB via
-
lib/swClient.ts- Client Service Worker- Communication entre main thread et Service Worker
- Gère les messages de synchronisation
- ✅ Conforme aux principes
-
lib/swSyncHandler.ts- Handler de synchronisation- Exécute les opérations de synchronisation dans le main thread
- Répond aux requêtes du Service Worker
- ✅ Conforme aux principes
-
lib/localeStorage.ts- Stockage de la langue- Stocke la préférence de langue dans IndexedDB
- Migration automatique depuis localStorage
- ✅ Conforme aux principes
Migrations terminées
✅ Migrations complétées
-
✅ Web Worker d'écriture
- Le fichier
public/writeWorker.jsest fonctionnel - Toutes les écritures passent par
writeServicequi route vers le Web Worker
- Le fichier
-
✅ Migrations des écritures vers
writeServicelib/platformSync.ts- ✅ UtilisewriteService.writeObject()lib/userContentSync.ts- ✅ UtilisewriteService.writeObject()lib/articlePublisher.ts- ✅ UtilisewriteOrchestrator.writeAndPublish()- Tous les services de synchronisation utilisent maintenant
writeService
-
✅ Migrations des publications vers
writeOrchestratorlib/articleMutations.ts- ✅ UtilisewriteOrchestrator(series, articles, reviews)lib/articlePublisherPublish.ts- ✅ UtilisewriteOrchestratorlib/paymentNotes.ts- ✅ UtilisewriteOrchestrator(purchases, review_tips, sponsoring)lib/reviewRewardUpdate.ts- ✅ UtilisewriteOrchestratorpour les mises à jour- Toutes les publications d'objets passent par
writeOrchestrator
-
✅ Migration des composants vers Service Worker
components/KeyManagementManager.tsx- ✅ UtiliseswClient.startUserSync()components/SyncProgressBar.tsx- ✅ UtiliseswClient.startUserSync()components/CacheUpdateManager.tsx- ✅ UtiliseswClient.startUserSync()lib/nostrAuth.ts- ✅ UtiliseswClient.startUserSync()
-
✅ Migration de la langue vers IndexedDB
lib/localeStorage.ts- ✅ Service créé pour stocker la langue dans IndexedDBcomponents/LanguageSettingsManager.tsx- ✅ Migré vers IndexedDBcomponents/LanguageSelector.tsx- ✅ Migré vers IndexedDBpages/_app.tsx- ✅ Charge depuis IndexedDBhooks/useI18n.ts- ✅ Migré vers IndexedDB- Migration automatique depuis localStorage
-
✅ Suppressions et modifications
- Suppressions : ✅ Utilisent
hidden: trueavec nouvelle version (plus de kind 5) - Modifications : ✅ Utilisent nouvelles versions incrémentées
- Filtrage : ✅ Tous les objets cachés sont filtrés lors des lectures
- Suppressions : ✅ Utilisent
-
✅ Réseau via Service Worker
lib/platformTracking.ts- ✅ UtilisewebsocketService.publishEvent()lib/publishWorker.ts- ✅ UtilisewebsocketService.publishEvent()lib/sponsoringTracking.ts- ✅ UtilisewebsocketService.publishEvent()lib/swSyncHandler.ts- ✅ UtilisewebsocketService.publishEvent()
Architecture implémentée
Interface Utilisateur (React)
↓ (lecture uniquement depuis IndexedDB)
IndexedDB
↑ (écriture via Web Worker)
Web Worker d'écriture (writeWorker.js)
↑ (orchestration)
Service de gestion des écritures (writeOrchestrator)
├─→ (réseau) WebSocket Service (websocketService)
│ ↓ (communication via postMessage)
│ Service Worker (sw.js)
│ ↓ (requêtes de synchronisation)
│ Main Thread (swSyncHandler)
│ ↓ (synchronisation)
│ platformSync / userContentSync
│ ↓ (écriture via writeService)
│ Web Worker d'écriture
│ ↓
│ IndexedDB
└─→ (local) Web Worker d'écriture
↓
IndexedDB
Principes respectés
✅ Architecture de données
- Interface : Lecture uniquement depuis IndexedDB
- Écritures : Toutes via
writeService→ Web Worker → IndexedDB - Publications : Via
writeOrchestrator(réseau + local en parallèle) - Réseau : Via
websocketService→ Service Worker - Synchronisation : Via Service Worker → Main Thread →
writeService
✅ Gestion des versions
- Suppressions : Nouvelle version avec
hidden: true(publiée en base, filtrée à la lecture) - Modifications : Nouvelles versions incrémentées (même hash, version+1)
- Filtrage : Tous les objets
hidden: truesont filtrés automatiquement
✅ Services de configuration
- Les services de configuration (
configStorage,settingsCache) peuvent continuer à écrire directement dans IndexedDB car ils ne sont pas des données métier - Les services de log (
publishLog) peuvent continuer à écrire directement car ce sont des logs - La langue est maintenant dans IndexedDB (via
localeStorage)
✅ Cas particuliers légitimes
- Messages privés (kind 4) : Utilisent
nostrService.publishEvent()(événements simples, pas des objets) - Événements de suppression (kind 5) : Plus utilisés, remplacés par
hidden: true
État de conformité
Statut global : ✅ 100% conforme
Toutes les migrations sont terminées et le code respecte intégralement l'architecture définie.