story-research-zapwall/docs/architecture-implementation-status.md
2026-01-07 01:51:26 +01:00

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