Aller au contenu principal

ENG-001.5K — Nettoyage final du module Mairie — Rapport d'implémentation

MissionENG-001.5K — Nettoyage final du module Mairie
Rattaché àENG-001.5 — Extraction de Municipal Management ; rapports ENG-001.5A à ENG-001.5J3
Dépôtdmv_api
Branchefeature/eng-001-5k-mairie-cleanup
StatutImplémenté localement — aucun commit applicatif

1. Objectif

Après migration d’Alertes, Services, Collectes, Élus, Infos et de la réconciliation Territory, le module Mairie doit redevenir un module d’adaptation :

  • routes workspace utiles ;
  • middlewares d’accès ;
  • façades HTTP ;
  • délégation vers Municipal Management, Territory et Publication ;
  • plus aucun métier municipal historique résiduel.

2. Inventaire du module app/Modules/Mairie

Controllers

  • MairieCommuneController
  • MairiePublicationController
  • MairieServiceController

Services

  • MairieReadService
  • MairieWriteService

Middleware

  • EnsureCommuneManager
  • EnsureMairieAccess

Requests

  • CreateServiceRequest
  • ReorderServicesRequest

Jobs

  • ExpireAlertes

Routes

  • Routes/api.php

Providers

  • MairieServiceProvider

Models / DTO / Exceptions

  • aucun modèle résiduel dans app/Modules/Mairie
  • aucun DTO résiduel dans app/Modules/Mairie
  • aucune exception dédiée dans app/Modules/Mairie

3. Classification détaillée

Controllers

MairieCommuneController

  • Statut : conservé
  • Rôle actuel : façade HTTP
  • Dépendances :
    • lecture commune / infos via MairieReadService
    • écriture commune / publications via MairieWriteService
    • lectures et écritures métier municipal via MunicipalManagementReader / MunicipalManagementWriter
  • Justification :
    • porte encore les routes workspace /mairie/communes/...
    • aucune logique métier lourde restante
    • aucune écriture directe vers commune_elus, commune_collectes, commune_infos
  • Dette restante :
    • garde locale d’existence de commune sur certaines créations pour préserver les codes HTTP historiques

MairiePublicationController

  • Statut : conservé
  • Rôle actuel : façade HTTP
  • Justification :
    • porte les routes publication mairie encore consommées
    • délègue à MairieReadService / MairieWriteService, eux-mêmes orientés Publication

MairieServiceController

  • Statut : conservé
  • Rôle actuel : façade HTTP
  • Justification :
    • porte les routes services mairie encore actives
    • délégation complète à Municipal Management
    • validation HTTP encore fournie par les FormRequest

Services

MairieReadService

  • Statut : conservé, allégé
  • Méthodes encore utilisées :
    • getCommune()
    • listInfos()
    • listPublications()
  • Méthodes supprimées comme mortes :
    • listElus()
  • Justification de suppression :
    • aucune référence runtime ni test métier ne l’utilise
    • MairieCommuneController::indexElus() délègue déjà directement à MunicipalManagementReader
  • Rôle futur :
    • adaptateur lecture commune / infos / publications uniquement

MairieWriteService

  • Statut : conservé, allégé
  • Méthodes encore utilisées :
    • createPublication()
    • modererPublicationLocale()
    • updateCommune()
  • Méthodes supprimées comme mortes :
    • createElu()
    • updateElu()
    • deleteElu()
  • Justification de suppression :
    • aucune référence runtime ni test métier ne les appelle encore
    • MairieCommuneController délègue déjà directement les élus à MunicipalManagementWriter
  • Effet secondaire bénéfique :
    • suppression de la dépendance inutile à MunicipalManagementWriter

Middleware

EnsureCommuneManager

  • Statut : conservé
  • Rôle actuel :
    • contrôle d’accès workspace par commune
    • résolution des permissions et modules via ActorAccessService
  • Utilisation indirecte :
    • alias middleware commune.manager
    • routes Mairie
  • Dette restante :
    • accès directs DB::table() encore présents
    • dette explicitement hors périmètre de cette mission

EnsureMairieAccess

  • Statut : conservé, non modifié
  • Rôle actuel :
    • vérification kind='mairie'
    • contrôle d’accès / permission / module
    • résolution d’acteurId depuis la route ou depuis certaines ressources liées
  • Dette restante documentée :
    • dépendances SQL directes à acteurs, mairie_services, publications
    • sujet reporté vers Authorization Platform Service

Requests

CreateServiceRequest

  • Statut : conservé
  • Utilisation : MairieServiceController::store()

ReorderServicesRequest

  • Statut : conservé
  • Utilisation : MairieServiceController::reorder()

Jobs

ExpireAlertes

  • Statut : conservé
  • Rôle actuel :
    • point d’entrée scheduler historique
    • délègue à MunicipalManagementWriter::expireAlertes()
  • Justification :
    • aucune logique métier résiduelle
    • maintien volontaire pour ne pas déplacer la déclaration du scheduler

Routes

Routes/api.php

  • Statut : conservé
  • Routes encore utiles :
    • services publics mairie
    • services protégés mairie
    • publications mairie
    • commune / élus / collectes / infos côté workspace mairie
  • Aucune route supprimée
  • Justification :
    • consommateurs toujours présents
    • hors périmètre de supprimer une route publique ou workspace sans preuve d’absence de consommateur

Provider

MairieServiceProvider

  • Statut : conservé
  • Rôle actuel :
    • enregistrement des routes
    • binding des deux services façade restants

4. Code supprimé

  • MairieReadService::listElus()
  • MairieWriteService::createElu()
  • MairieWriteService::updateElu()
  • MairieWriteService::deleteElu()
  • dépendance inutile MunicipalManagementWriter dans MairieWriteService

5. Code conservé

Conservé car encore utilisé ou structurellement requis :

  • les trois controllers Mairie
  • MairieReadService
  • MairieWriteService
  • EnsureCommuneManager
  • EnsureMairieAccess
  • CreateServiceRequest
  • ReorderServicesRequest
  • ExpireAlertes
  • Routes/api.php
  • MairieServiceProvider
  • tests/Feature/Mairie/MairieTest.php

6. Preuves de non-utilisation avant suppression

Les suppressions ci-dessus ont été précédées d’une recherche exhaustive sur :

  • références PHP directes ;
  • contrôleurs ;
  • routes ;
  • tests ;
  • provider ;
  • bindings container ;
  • scheduler ;
  • commandes ;
  • middleware ;
  • imports.

Résultat observé :

  • aucune référence à MairieReadService::listElus()
  • aucune référence à MairieWriteService::createElu()
  • aucune référence à MairieWriteService::updateElu()
  • aucune référence à MairieWriteService::deleteElu()

7. Tests et garde-fous

  • garde-fou ajouté sur l’absence des méthodes élus supprimées dans MunicipalEluDelegationTest
  • garde-fous architecturaux existants conservés
  • tests Feature Mairie conservés car ils valident encore les routes utiles services/publications

8. Rôle futur du module Mairie

Le module Mairie reste un module d’adaptation :

  • façade HTTP workspace ;
  • validation HTTP dédiée ;
  • middlewares d’accès ;
  • scheduler historique ;
  • délégation vers :
    • Municipal Management ;
    • Publication ;
    • Territory ;
    • ActorAccessService.

Il n’est plus owner du métier municipal migré.

9. Dette restante

  • EnsureMairieAccess reste à traiter plus tard dans Authorization Platform Service
  • EnsureCommuneManager conserve aussi des accès SQL d’adaptation
  • updateCommune() reste dans MairieWriteService car communes.description / image_url ne font pas partie de cette mission
  • aucune suppression de route n’est justifiée à ce stade

10. Recommandations

  • ne supprimer d’autres éléments du module Mairie qu’après audit des consommateurs réels des routes workspace
  • traiter la dette middleware dans le chantier Authorization Platform Service, pas dans ENG-001.5K
  • garder séparée la synchronisation documentaire globale du README backend