159 lines
6.8 KiB
Markdown
159 lines
6.8 KiB
Markdown
# É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
|
|
|
|
1. **`lib/websocketService.ts`** - Service de gestion des WebSockets
|
|
- Gère les connexions WebSocket
|
|
- Communique avec les Service Workers via `swClient`
|
|
- ✅ Conforme aux principes
|
|
|
|
2. **`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
|
|
|
|
3. **`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
|
|
|
|
4. **`public/writeWorker.js`** - Web Worker d'écriture
|
|
- Gère toutes les écritures dans IndexedDB
|
|
- Transactions multi-tables
|
|
- ✅ Conforme aux principes
|
|
|
|
5. **`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
|
|
|
|
6. **`lib/notificationService.ts`** - Service de gestion des notifications
|
|
- Stocke les notifications dans IndexedDB via `writeService`
|
|
- ✅ Conforme aux principes
|
|
|
|
7. **`lib/swClient.ts`** - Client Service Worker
|
|
- Communication entre main thread et Service Worker
|
|
- Gère les messages de synchronisation
|
|
- ✅ Conforme aux principes
|
|
|
|
8. **`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
|
|
|
|
9. **`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
|
|
|
|
1. **✅ Web Worker d'écriture**
|
|
- Le fichier `public/writeWorker.js` est fonctionnel
|
|
- Toutes les écritures passent par `writeService` qui route vers le Web Worker
|
|
|
|
2. **✅ Migrations des écritures vers `writeService`**
|
|
- `lib/platformSync.ts` - ✅ Utilise `writeService.writeObject()`
|
|
- `lib/userContentSync.ts` - ✅ Utilise `writeService.writeObject()`
|
|
- `lib/articlePublisher.ts` - ✅ Utilise `writeOrchestrator.writeAndPublish()`
|
|
- Tous les services de synchronisation utilisent maintenant `writeService`
|
|
|
|
3. **✅ Migrations des publications vers `writeOrchestrator`**
|
|
- `lib/articleMutations.ts` - ✅ Utilise `writeOrchestrator` (series, articles, reviews)
|
|
- `lib/articlePublisherPublish.ts` - ✅ Utilise `writeOrchestrator`
|
|
- `lib/paymentNotes.ts` - ✅ Utilise `writeOrchestrator` (purchases, review_tips, sponsoring)
|
|
- `lib/reviewRewardUpdate.ts` - ✅ Utilise `writeOrchestrator` pour les mises à jour
|
|
- Toutes les publications d'objets passent par `writeOrchestrator`
|
|
|
|
4. **✅ Migration des composants vers Service Worker**
|
|
- `components/KeyManagementManager.tsx` - ✅ Utilise `swClient.startUserSync()`
|
|
- `components/SyncProgressBar.tsx` - ✅ Utilise `swClient.startUserSync()`
|
|
- `components/CacheUpdateManager.tsx` - ✅ Utilise `swClient.startUserSync()`
|
|
- `lib/nostrAuth.ts` - ✅ Utilise `swClient.startUserSync()`
|
|
|
|
5. **✅ Migration de la langue vers IndexedDB**
|
|
- `lib/localeStorage.ts` - ✅ Service créé pour stocker la langue dans IndexedDB
|
|
- `components/LanguageSettingsManager.tsx` - ✅ Migré vers IndexedDB
|
|
- `components/LanguageSelector.tsx` - ✅ Migré vers IndexedDB
|
|
- `pages/_app.tsx` - ✅ Charge depuis IndexedDB
|
|
- `hooks/useI18n.ts` - ✅ Migré vers IndexedDB
|
|
- Migration automatique depuis localStorage
|
|
|
|
6. **✅ Suppressions et modifications**
|
|
- Suppressions : ✅ Utilisent `hidden: true` avec 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
|
|
|
|
7. **✅ Réseau via Service Worker**
|
|
- `lib/platformTracking.ts` - ✅ Utilise `websocketService.publishEvent()`
|
|
- `lib/publishWorker.ts` - ✅ Utilise `websocketService.publishEvent()`
|
|
- `lib/sponsoringTracking.ts` - ✅ Utilise `websocketService.publishEvent()`
|
|
- `lib/swSyncHandler.ts` - ✅ Utilise `websocketService.publishEvent()`
|
|
|
|
## Architecture implémentée
|
|
|
|
```text
|
|
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: true` sont 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.
|