Aller au contenu principal

ENG-001.5J1 — Fondation et lecture des informations municipales — Rapport d'implémentation

MissionENG-001.5J1 — Fondation et lecture des informations municipales
Rattaché àENG-001.5J — Migration des infos pratiques vers Municipal Management ; ENG-001.5J — Audit d'ownership des sections d'infos ; ENG-001.5 — Recalibrage roadmap
Dépôtdmv_api
Branchefeature/eng-001-5j1-municipal-infos-read
StatutImplémenté localement — aucun commit applicatif

1. Divergence initiale

  • MunicipalManagementReader exposait déjà getInfos(string $communeId): Collection, mais pas la lecture du référentiel global commune_info_sections.
  • MunicipalManagementReadService::getInfos() levait encore une LogicException.
  • AdminCommuneInfoController::indexSections() et la partie sections de fullCommune() lisaient encore commune_info_sections directement en DB::table().
  • MairieReadService::listInfos() lisait encore commune_infos via le modèle Territory CommuneInfo.

2. Arbitrage validé

  • La décision 13.C est résolue : commune_info_sections appartient à Municipal Management.
  • Le contrat public MunicipalManagementReader est étendu avec :
public function getInfoSections(): Collection;

3. Contrat étendu

Signature finale utilisée

MunicipalManagementReader::getInfos(string $communeId): Collection
MunicipalManagementReader::getInfoSections(): Collection

4. DTO créés ou modifiés

Créé

  • MunicipalInfoSectionDTO
    • id
    • slug
    • label
    • icone
    • description
    • ordre
    • active
    • createdAt

Modifié

  • MunicipalInfoDTO
    • ajout de createdAt pour préserver les formats déjà exposés par les façades historiques de lecture

5. Lectures migrées

  • MunicipalManagementReadService::getInfos() lit désormais commune_infos, trié par section puis ordre
  • MunicipalManagementReadService::getInfoSections() lit désormais commune_info_sections, trié par ordre
  • MairieReadService::listInfos() délègue désormais à MunicipalManagementReader::getInfos()
  • AdminCommuneInfoController::indexSections() délègue désormais à MunicipalManagementReader::getInfoSections()
  • AdminCommuneInfoController::fullCommune() délègue désormais :
    • les sections à getInfoSections()
    • les infos à getInfos()

6. Façades conservées

  • MairieCommuneController::indexInfos() reste inchangé comme façade HTTP
  • AdminCommuneInfoController::indexSections() reste inchangé comme route et comme format de réponse
  • AdminCommuneInfoController::fullCommune() conserve sa structure de réponse (commune, sections, infos_by_section, elus, collectes, ...)

7. Lectures laissées temporairement en place

  • TerritoryService::getCommuneInfos() reste en place, hors périmètre J1
  • la fusion publique Territory + Actor pour la section mairie reste inchangée
  • aucune lecture publique n’a été unifiée silencieusement

8. Compatibilité préservée

  • routes inchangées
  • URLs inchangées
  • méthodes HTTP inchangées
  • formats JSON historiques préservés
  • ordre des infos conservé
  • ordre des sections conservé
  • aucun frontend modifié

9. Tests ajoutés

  • lecture Mairie des infos, triée par section puis ordre
  • commune sans information
  • lecture Admin du référentiel des sections
  • section sans information associée
  • fullCommune() inchangé pour sections et infos_by_section
  • retour de DTO publics, pas de modèle Eloquent
  • délégation effective des lectures vers Municipal Management
  • garde-fou sur l’absence de déplacement des écritures
  • garde-fou sur les routes historiques inchangées
  • garde-fou sur l’unicité d’implémentation métier pour les lectures migrées

10. Garde-fous

  • pas de lecture directe commune_info_sections dans indexSections() ou fullCommune()
  • pas de lecture directe commune_infos dans fullCommune()
  • aucune écriture infos/sections déplacée hors de ses chemins historiques

11. Divergences restantes

  • TerritoryService::getCommuneInfos() reste propriétaire de sa lecture publique enrichie
  • les écritures commune_infos restent fragmentées entre Mairie, Admin et Territory/SIRENE
  • les écritures commune_info_sections restent dans Admin

12. Décisions restantes pour J2 et J3

J2

  • migration des écritures Mairie/Admin de commune_infos
  • migration des écritures Admin de commune_info_sections
  • conservation explicite des différences historiques de validation et de format entre façades

J3

  • délégation de CommuneMairieDataRefreshService::refreshInfos() vers un contrat métier Municipal Management
  • définition exacte d’un DTO de réconciliation externe pour la section identite