Organisation des modules
Statut
Document de cadrage architecture — v1.0 — relu le 2026-05-10.
Structure générale
Le backend Laravel DMV est organisé en modules fonctionnels sous app/Modules/. Chaque module est autonome et regroupe ses propres modèles, contrôleurs, services, DTOs, policies, requêtes et routes.
Modules existants
| Module | Rôle |
|---|---|
Identity | Authentification, profils, tokens Supabase/Sanctum |
Actor | Acteurs, documents, tags, abonnements, XP |
Territory | Communes, élus, informations territoriales |
Publication | Publications, modération, périmètre de scope |
Community | Fonctionnalités communautaires |
Monetization | Abonnements acteurs, boosts, plans, Stripe Connect |
Settings | Feature flags, paramètres globaux de l'app |
Analytics | Traçage, événements, agrégation |
Chat | Messagerie |
PlayLoop | Affichage dynamique, devices, playlists, médias, campagnes |
AssoSuite | Outils associatifs, membres, cotisations |
Mairie | Alertes citoyennes, services municipaux, publications mairie |
Admin | Administration interne, supervision |
Structure interne d'un module
Chaque module suit une structure cohérente :
app/Modules/{Module}/
├── Controllers/ Contrôleurs HTTP minces
├── DTOs/ Objets de transfert de données
├── Models/ Modèles Eloquent
├── Policies/ Règles d'autorisation
├── Providers/ ServiceProvider du module
├── Requests/ Validation des entrées
├── Routes/ Fichiers de routes
└── Services/ Logique métier
Certains modules ajoutent :
├── Auth/ Authentification spécifique (ex: PlayLoop DeviceToken)
├── Context/ Exceptions et contexte (ex: Publication ScopeViolation)
├── Jobs/ Jobs et tâches planifiées
└── Middleware/ Middlewares spécifiques au module
Middlewares par module
Les middlewares spécifiques aux modules sont enregistrés globalement dans bootstrap/app.php :
| Alias | Classe | Module |
|---|---|---|
identify.app | IdentifyApp | HTTP global |
ensure.admin | EnsureUserIsAdmin | Admin |
device.token | DeviceTokenMiddleware | PlayLoop |
asso.access | EnsureAssoAccess | AssoSuite |
mairie.access | EnsureMairieAccess | Mairie |
Providers
Chaque module déclare un ServiceProvider pour enregistrer ses bindings, routes et services. Les providers sont déclarés dans la configuration Laravel.
Règles d'organisation
- Un module ne doit pas importer directement les modèles d'un autre module sans passer par un service ou une interface.
- La logique métier reste dans les services, pas dans les contrôleurs.
- Les contrôleurs se limitent à : valider → déléguer → répondre.
- Les DTOs servent de contrat de sortie des services.
Points à clarifier
- Contrats formels entre modules (interfaces ou services transverses).
- Dépendances croisées à documenter et limiter.
- Modules à extraire en micro-services si la charge l'exige.