Aller au contenu principal

Architecture modulaire

Les modules représentent des domaines fonctionnels ou des zones de plateforme partagées. Chaque module est un package Laravel autonome géré par nwidart/laravel-modules.

Modules actifs

ModuleResponsabilité
AdminAdministration — utilisateurs, rôles, permissions, services, applications, alias, groupes
DashboardPortail central — widgets, alias, points d'entrée des applications
AlertNotifications et alertes transversales
ActualiteActualités internes, génération IA texte + images
AnalysesDonnées qualité eau INTECMAR — imports, visualisation, historique
ElevageGestion du cycle d'élevage ostréicole — lots, opérations, tables
EdiEngineTraitement EDI — parsing, mapping, export
ChrConnectorConnecteur système CHR — imports, parsing, mapping
InfrastructureSupervision Proxmox VE, Synology, TrueNAS, RustDesk, serveurs web
AiConfiguration centralisée des providers IA (texte et image)

:::info Mise à jour obligatoire Ce tableau doit être mis à jour quand un module est ajouté, renommé ou déprécié. :::


Routage par sous-domaine

Les applications sont séparées par routage de sous-domaine :

Route::domain('dashboard.' . config('app.domain'))->group(...);
Route::domain('admin.' . config('app.domain'))->group(...);
Route::domain('elevage.' . config('app.domain'))->group(...);

Variable d'environnement :

APP_DOMAIN=tarbouriech.tech

Règles de frontières entre modules

✅ Garder le code module dans Modules/<ModuleName>/
✅ Exposer les services partagés via un contrat explicite
✅ Utiliser les conventions Laravel avant les abstractions custom

❌ Requêter les tables d'un autre module directement depuis un contrôleur
❌ Contourner les policies avec des vérifications de rôle brutes dans les vues
❌ Créer des helpers dupliqués par module
❌ Créer des migrations pour la même table dans plusieurs modules

Paramètres d'application (pattern central)

La configuration de chaque module est stockée en JSON dans core_applications.settings.

// Lire un paramètre
$app = Application::where('code', 'my_module')->first();
$value = $app->getSetting('my_key'); // null si absent
$value = $app->getSetting('my_key', 'default'); // avec valeur par défaut

Les paramètres sont écrits depuis le module Admin (ApplicationSettingsController).

Ne jamais hardcoder la configuration d'un module — toujours lire depuis Application->settings.


Page de paramètres Admin

:::warning Règle obligatoire Toute page de paramètres d'une application dans Admin doit inclure un bouton "Logs d'exécution" qui ouvre une modale affichant les logs du module. :::

Pattern de référence : section analyses dans Modules/Admin/resources/views/applications/settings.blade.php.

  • Bouton → modal Bootstrap avec <pre> sur fond sombre
  • <select> pour choisir le fichier de log
  • Contenu chargé en AJAX
  • 300 dernières lignes, scroll vers le bas automatique
  • Route : GET admin/applications/{code}/log