Aller au contenu principal

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

ModuleRôle
IdentityAuthentification, profils, tokens Supabase/Sanctum
ActorActeurs, documents, tags, abonnements, XP
TerritoryCommunes, élus, informations territoriales
PublicationPublications, modération, périmètre de scope
CommunityFonctionnalités communautaires
MonetizationAbonnements acteurs, boosts, plans, Stripe Connect
SettingsFeature flags, paramètres globaux de l'app
AnalyticsTraçage, événements, agrégation
ChatMessagerie
PlayLoopAffichage dynamique, devices, playlists, médias, campagnes
AssoSuiteOutils associatifs, membres, cotisations
MairieAlertes citoyennes, services municipaux, publications mairie
AdminAdministration 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 :

AliasClasseModule
identify.appIdentifyAppHTTP global
ensure.adminEnsureUserIsAdminAdmin
device.tokenDeviceTokenMiddlewarePlayLoop
asso.accessEnsureAssoAccessAssoSuite
mairie.accessEnsureMairieAccessMairie

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.