85 lines
4.3 KiB
Markdown
85 lines
4.3 KiB
Markdown
# Principes d'architecture logicielle
|
|
|
|
**Auteur** : Équipe 4NK
|
|
|
|
## Vue d'ensemble
|
|
|
|
Ce document décrit les principes d'architecture logicielle du projet. Toute modification doit respecter ces principes.
|
|
|
|
## Principes fondamentaux
|
|
|
|
### Persistance des données
|
|
|
|
* **IndexedDB comme source de vérité locale** : Toutes les données sont persistées dans IndexedDB côté utilisateur. IndexedDB constitue la source de vérité locale pour toutes les données de l'application.
|
|
|
|
* **IndexedDB en lecture uniquement pour l'interface** : L'interface utilisateur (composants React, pages) utilise uniquement IndexedDB en lecture. Aucune écriture directe dans IndexedDB ne doit être effectuée depuis l'interface utilisateur.
|
|
|
|
* **Écritures via le réseau Nostr** : Toutes les écritures et mises à jour de données passent par le réseau Nostr. L'interface ne doit jamais écrire directement dans IndexedDB.
|
|
|
|
* **Statut de publication** : Toute écriture en base de données (IndexedDB) doit inclure un statut `published` qui permet de gérer ultérieurement la publication (ok/ko). Ce statut permet de suivre l'état de synchronisation et de publication des données.
|
|
|
|
### Service Workers et tâches de fond
|
|
|
|
* **Service Workers pour les tâches de fond** : Toutes les tâches de fond sur les données sont effectuées avec des Service Workers. Les Service Workers gèrent la synchronisation, la mise à jour et le traitement asynchrone des données.
|
|
|
|
* **Service Worker pour les notifications** : Un Service Worker alimente la table des notifications. Il surveille les événements et met à jour IndexedDB avec les nouvelles notifications.
|
|
|
|
* **Service de lecture des notifications** : Les notifications sont lues par un service dédié qui détecte les nouvelles notifications dans la base de données (IndexedDB). Ce service est séparé du Service Worker qui alimente les notifications.
|
|
|
|
### Web Workers et écritures
|
|
|
|
* **Web Worker d'écriture** : Un Web Worker dédié gère toutes les écritures et modifications dans IndexedDB. L'interface utilisateur ne doit jamais écrire directement dans IndexedDB, mais doit passer par ce Web Worker.
|
|
|
|
* **Service de gestion des écritures** : Un service gère les écritures/mises à jour vers les WebSockets/API et vers le Web Worker d'écriture. Ce service orchestre la communication entre l'interface, le réseau (Nostr/WebSockets) et le Web Worker d'écriture.
|
|
|
|
### WebSockets et communication
|
|
|
|
* **Service de gestion des WebSockets** : Les WebSockets sont gérés par un service dédié qui communique avec les Service Workers. Ce service isole la logique de communication WebSocket et permet une gestion centralisée des connexions.
|
|
|
|
* **Séparation des responsabilités** : Le service WebSocket ne doit pas écrire directement dans IndexedDB. Il communique avec les Service Workers qui gèrent la persistance.
|
|
|
|
## Architecture des composants
|
|
|
|
```
|
|
Interface Utilisateur (React)
|
|
↓ (lecture uniquement)
|
|
IndexedDB
|
|
↑ (écriture via Web Worker)
|
|
Web Worker d'écriture
|
|
↑ (orchestration)
|
|
Service de gestion des écritures
|
|
↓ (réseau)
|
|
Service WebSocket
|
|
↓ (communication)
|
|
Service Workers
|
|
↓ (persistance)
|
|
IndexedDB
|
|
```
|
|
|
|
## Flux d'écriture
|
|
|
|
1. **Interface utilisateur** : Demande une écriture/mise à jour
|
|
2. **Service de gestion des écritures** : Reçoit la demande
|
|
3. **Service WebSocket** : Publie sur le réseau Nostr
|
|
4. **Service de gestion des écritures** : Envoie les données au Web Worker d'écriture
|
|
5. **Web Worker d'écriture** : Écrit dans IndexedDB avec statut `published`
|
|
|
|
## Flux de synchronisation
|
|
|
|
1. **Service Worker** : Déclenche la synchronisation périodique
|
|
2. **Service WebSocket** : Se connecte aux relais Nostr
|
|
3. **Service Worker** : Reçoit les événements
|
|
4. **Web Worker d'écriture** : Écrit les nouveaux événements dans IndexedDB
|
|
|
|
## Flux de notifications
|
|
|
|
1. **Service Worker** : Surveille les événements dans IndexedDB
|
|
2. **Service Worker** : Détecte les nouveaux événements concernant l'utilisateur
|
|
3. **Web Worker d'écriture** : Écrit les notifications dans IndexedDB
|
|
4. **Service de lecture des notifications** : Détecte les nouvelles notifications
|
|
5. **Interface utilisateur** : Affiche les notifications
|
|
|
|
## Respect des principes
|
|
|
|
Toute modification du code doit respecter ces principes. En cas de doute, consulter ce document et les règles de qualité dans `.cursor/rules/quality.mdc`.
|