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

4.3 KiB

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.