106 lines
4.4 KiB
Markdown
106 lines
4.4 KiB
Markdown
# État d'implémentation de l'architecture
|
|
|
|
**Auteur** : Équipe 4NK
|
|
**Date** : 2025-01-27
|
|
|
|
## Vue d'ensemble
|
|
|
|
Ce document décrit l'état actuel de l'implémentation des principes d'architecture et les migrations nécessaires.
|
|
|
|
## 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
|
|
- ✅ Conforme aux principes
|
|
|
|
3. **`lib/writeService.ts`** - Service de gestion du Web Worker d'écriture
|
|
- Existe déjà et route les écritures vers le Web Worker
|
|
- ⚠️ Le fichier `writeWorker.js` doit être créé et adapté pour Next.js
|
|
|
|
4. **`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
|
|
|
|
5. **`lib/notificationService.ts`** - Service de gestion des notifications
|
|
- Stocke les notifications dans IndexedDB
|
|
- ✅ Conforme aux principes
|
|
|
|
6. **`lib/notificationDetector.ts`** - Détecteur de notifications
|
|
- Scanne IndexedDB pour détecter les nouveaux événements
|
|
- ⚠️ Doit être intégré dans le Service Worker pour alimenter les notifications
|
|
|
|
## Migrations nécessaires
|
|
|
|
### 🔄 Migrations prioritaires
|
|
|
|
1. **Créer et adapter `writeWorker.js`**
|
|
- Le fichier `public/writeWorker.js` existe mais doit être adapté pour Next.js
|
|
- Les Web Workers dans Next.js nécessitent une configuration spéciale
|
|
- **Action** : Adapter le worker pour fonctionner avec Next.js ou utiliser une approche alternative
|
|
|
|
2. **Migrer les écritures directes vers `writeService`**
|
|
- Plusieurs services appellent directement `objectCache.set` et `objectCache.updatePublished`
|
|
- **Fichiers concernés** :
|
|
- `lib/platformSync.ts` - Synchronisation plateforme
|
|
- `lib/userContentSync.ts` - Synchronisation contenu utilisateur
|
|
- `lib/articlePublisher.ts` - Publication d'articles
|
|
- `lib/purchaseQueries.ts` - Requêtes d'achats
|
|
- `lib/reviewTipQueries.ts` - Requêtes de tips
|
|
- `lib/sponsoringQueries.ts` - Requêtes de sponsoring
|
|
- **Action** : Remplacer tous les appels directs par `writeService.writeObject()` et `writeService.updatePublished()`
|
|
|
|
3. **Intégrer le Service Worker pour les notifications**
|
|
- Le Service Worker doit alimenter directement la table des notifications via le Web Worker d'écriture
|
|
- Actuellement, le détecteur s'exécute dans le thread principal
|
|
- **Action** : Modifier `public/sw.js` pour que le Service Worker alimente les notifications via `writeService.createNotification()`
|
|
|
|
4. **Utiliser `websocketService` au lieu de `nostrService.pool`**
|
|
- `nostrService` utilise directement `SimplePool` pour les WebSockets
|
|
- **Action** : Migrer vers `websocketService` qui communique avec les Service Workers
|
|
|
|
5. **Utiliser `writeOrchestrator` pour les publications**
|
|
- Les publications doivent passer par `writeOrchestrator` qui orchestre WebSocket + Web Worker
|
|
- **Action** : Modifier `nostrService.publishEvent()` pour utiliser `writeOrchestrator`
|
|
|
|
## Architecture cible
|
|
|
|
```
|
|
Interface Utilisateur (React)
|
|
↓ (lecture uniquement)
|
|
IndexedDB
|
|
↑ (écriture via Web Worker)
|
|
Web Worker d'écriture (writeWorker.js)
|
|
↑ (orchestration)
|
|
Service de gestion des écritures (writeOrchestrator)
|
|
↓ (réseau)
|
|
Service WebSocket (websocketService)
|
|
↓ (communication)
|
|
Service Workers (sw.js)
|
|
↓ (persistance via Web Worker)
|
|
Web Worker d'écriture
|
|
↓
|
|
IndexedDB
|
|
```
|
|
|
|
## Priorités
|
|
|
|
1. **Haute priorité** : Créer et adapter `writeWorker.js` pour Next.js
|
|
2. **Haute priorité** : Migrer les écritures de synchronisation vers `writeService`
|
|
3. **Moyenne priorité** : Intégrer le Service Worker pour alimenter les notifications
|
|
4. **Moyenne priorité** : Migrer vers `websocketService`
|
|
5. **Basse priorité** : Utiliser `writeOrchestrator` pour les publications
|
|
|
|
## Notes
|
|
|
|
- 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 migration doit être progressive pour éviter de casser l'application
|