ENG-001.5J1 — Fondation et lecture des informations municipales — Rapport d'implémentation
| Mission | ENG-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ôt | dmv_api |
| Branche | feature/eng-001-5j1-municipal-infos-read |
| Statut | Implémenté localement — aucun commit applicatif |
1. Divergence initiale
MunicipalManagementReaderexposait déjàgetInfos(string $communeId): Collection, mais pas la lecture du référentiel globalcommune_info_sections.MunicipalManagementReadService::getInfos()levait encore uneLogicException.AdminCommuneInfoController::indexSections()et la partie sections defullCommune()lisaient encorecommune_info_sectionsdirectement enDB::table().MairieReadService::listInfos()lisait encorecommune_infosvia le modèle TerritoryCommuneInfo.
2. Arbitrage validé
- La décision 13.C est résolue :
commune_info_sectionsappartient à Municipal Management. - Le contrat public
MunicipalManagementReaderest é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éé
MunicipalInfoSectionDTOidsluglabeliconedescriptionordreactivecreatedAt
Modifié
MunicipalInfoDTO- ajout de
createdAtpour préserver les formats déjà exposés par les façades historiques de lecture
- ajout de
5. Lectures migrées
MunicipalManagementReadService::getInfos()lit désormaiscommune_infos, trié parsectionpuisordreMunicipalManagementReadService::getInfoSections()lit désormaiscommune_info_sections, trié parordreMairieReadService::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()
- les sections à
6. Façades conservées
MairieCommuneController::indexInfos()reste inchangé comme façade HTTPAdminCommuneInfoController::indexSections()reste inchangé comme route et comme format de réponseAdminCommuneInfoController::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
mairiereste 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
sectionpuisordre - commune sans information
- lecture Admin du référentiel des sections
- section sans information associée
fullCommune()inchangé poursectionsetinfos_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_sectionsdansindexSections()oufullCommune() - pas de lecture directe
commune_infosdansfullCommune() - 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_infosrestent fragmentées entre Mairie, Admin et Territory/SIRENE - les écritures
commune_info_sectionsrestent 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