Aller au contenu principal

Stratégie de Cache & Clés

L'application utilise TanStack Query (React Query) pour la gestion d'état. Ce document recense toutes les clés de cache utilisées côté frontend ainsi que les événements déclenchant leur invalidation.

Stratégie Globale

Les arguments tels que les options de filtrage (limite, offset, filtres) font souvent partie de la clé de requête (ex: ['cameras', { limit: 10 }]). La logique d'invalidation cible généralement la clé racine (ex: ['cameras']) afin de rafraîchir toutes les variantes de la liste.

Référence des Clés de Cache

1. Clés du Dashboard

Ces clés alimentent les analyses en temps réel sur le tableau de bord principal. Elles sont critiques pour garantir une vue d'ensemble ("single pane of glass") précise.

Clé de RequêteDescriptionDéclencheurs Invalidation
['dashboard-summary']Compteurs totaux (Caméras, Utilisateurs, Sites, Entreprises).CRUD sur toute entité (Création/Suppression).
['dashboard-detailed-metrics']Répartition détaillée des statuts (Actif/Inactif, En ligne/Hors ligne).CRUD sur toute entité ; Changement statut caméra.
['dashboard-cameras-status']Données du Pie Chart des statuts caméras.Création/Suppression/Modif caméra ; Start/Stop Stream ou Script.
['dashboard-recent-activity']Flux d'activité récente.Toute opération CRUD sur toute entité ; Changements de statut.
['dashboard-notifications']Notifications système affichées dans le widget dashboard.Notification WebSocket entrante.
['dashboard-trends', days]Courbes de tendance historiques.Rafraîchissement auto (30s) ; pas d'invalidation manuelle habituelle.
['dashboard-system-metrics']Charge système temps réel, mémoire, uptime.Rafraîchissement auto (30s).

2. Clés Entités Métier

Caméras (features/cameras)

Clé de RequêteDescriptionDéclencheurs Invalidation
['cameras']Liste des caméras.Création/Modif/Suppression ; Start/Stop Stream ou Script.
['camera', id]Détail d'une caméra.Modif Caméra ; Start/Stop Stream ou Script.
['camera-agitation-trends', id]Historique métriques agitation.Rafraîchissement auto ; Actualisation page.
['camera-agitation-distribution', id]Graphiques de distribution.Rafraîchissement auto.

Utilisateurs (features/users)

Clé de RequêteDescriptionDéclencheurs Invalidation
['users']Liste des utilisateurs.Création/Modif/Suppression ; Désactivation 2FA.
['user', id]Détail d'un utilisateur.Modif Utilisateur ; Désactivation 2FA ; Envoi Reset Mdp.

Sites (features/sites)

Clé de RequêteDescriptionDéclencheurs Invalidation
['sites']Liste des sites.Création/Modif/Suppression ; Ajout/Suppression User du Site.
['site', id]Détail d'un site.Modif Site.

Entreprises (features/companies)

Clé de RequêteDescriptionDéclencheurs Invalidation
['companies']Liste des entreprises.Création/Modif/Suppression ; Ajout/Suppression User de l'Entreprise.
['company', id]Détail d'une entreprise.Modif Entreprise.

3. Clés de Notification

Clé de RequêteDescriptionDéclencheurs Invalidation
['notifications']Historique personnel des notifications.Notification WebSocket entrante.
['notifications', 'unread-count']Compteur de badge non-lu.Notification WebSocket entrante.

Règles d'Invalidation

Pour garantir la cohérence des données, nous suivons ces règles dans nos hooks personnalisés :

  1. Toujours invalider la liste : Créez/Supprimez un item => ['entity-list'] invalidé.
  2. Toujours invalider le détail : Modifiez un item => ['entity', id] invalidé.
  3. Invalidation Transverse Dashboard : Les widgets dépendent de données agrégées. Toute opération CRUD doit invalider :
    • ['dashboard-summary'] (si le total change)
    • ['dashboard-detailed-metrics'] (si les statuts changent)
    • ['dashboard-recent-activity'] (pour afficher l'action dans le flux)

Liens Utiles