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
| Module | Responsabilité |
|---|---|
Admin | Administration — utilisateurs, rôles, permissions, services, applications, alias, groupes |
Dashboard | Portail central — widgets, alias, points d'entrée des applications |
Alert | Notifications et alertes transversales |
Actualite | Actualités internes, génération IA texte + images |
Analyses | Données qualité eau INTECMAR — imports, visualisation, historique |
Elevage | Gestion du cycle d'élevage ostréicole — lots, opérations, tables |
EdiEngine | Traitement EDI — parsing, mapping, export |
ChrConnector | Connecteur système CHR — imports, parsing, mapping |
Infrastructure | Supervision Proxmox VE, Synology, TrueNAS, RustDesk, serveurs web |
Ai | Configuration 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