Aller au contenu principal

Architecture Backend

Le backend est construit sur AdonisJS, un framework web Node.js robuste qui suit le modèle MVC (Modèle-Vue-Contrôleur). Nous appliquons rigoureusement le modèle Service-Repository pour garder les contrôleurs légers et la logique testable.

Structure des Dossiers

app/
├── Controllers/ # Traitement des Requêtes (Validation des Entrées, Réponses HTTP)
├── Models/ # Définitions ORM Lucid (Schéma de Base de Données)
├── Services/ # Logique Métier (L'intelligence centrale)
├── Validators/ # Règles de validation des données
├── Websockets/ # Gestionnaires d'événements temps réel
└── Tasks/ # Tâches planifiées (Tâches Cron)

Modèles de Conception Principaux

1. Couche Service

Nous ne plaçons pas de logique métier dans les Contrôleurs. À la place, nous utilisons des Services dédiés.

  • CameraService : Gère l'approvisionnement des caméras, la vérification de l'état de connexion et les mises à jour de configuration.
  • AlertService : Gère le cycle de vie d'une alerte (Déclenchement -> Notification Utilisateurs -> Acquittement -> Archivage).
  • StatsService : Agrège les données temporelles pour les graphiques du tableau de bord (ex: "Activité au cours du temps").

2. Communication Temps Réel

Nous utilisons les Websockets pour obtenir une latence inférieure à la seconde pour les alertes critiques.

CanalÉvénementCharge UtileDescription
camerasstatus:update{ id, status }Caméra passant en Ligne/Hors-ligne
alertsnew:alert{ type, severity }Notification utilisateur critique
streamframeBlob BinairePrévisualisation en direct (MJPEG via socket)

Schéma de Base de Données (MySQL)

La base de données est normalisée pour garantir l'intégrité des données.

  • Utilisateurs 1:N Écuries
  • Écuries 1:N Box
  • Box 1:1 Caméras
  • Caméras 1:N Alertes

Note : Nous utilisons les migrations Lucid ORM pour gérer le versionnement des changements de schéma. Exécutez toujours node ace migration:run après avoir récupéré les mises à jour.