feat(directory) : type prestataire, validateurs front, autocomplete adresse BAN #23
Reference in New Issue
Block a user
Delete Branch "feat/directory-prestataire"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Résumé
Annuaire (répertoire) — 6 volets :
directory.providers.*, ownership prestataire sur contacts/adresses/comptes-rendus (CHECK XOR à 3), DTO/service/drawer/fiche détail + onglet dédié.name,companyrequis (migration de backfill), conversion prospect→client et tools MCP adaptés.0549200910) / URL — enregistrement bloqué si invalide.Migration & déploiement
Version20260624153709: table prestataire, colonnes website, FK prestataire + CHECK XOR à 3, backfill/drop prospect.name.app:sync-permissionsau déploiement (ajoutedirectory.providers.view/manage).Vérifications
doctrine:schema:validateOK, routes/api/prestatairesenregistrées.Revue — objections
Revue du diff complet (entités, services
owner, composables, migration, composants libMalioInputAutocomplete/MalioSelect). Le cœur de la MR est propre (mécanismeownergénérique, RBACdirectory.providers.*cohérent, migration réversible, MCP/Serializer/tests alignés). Restent les points suivants.🟠 Bloquant (corrigé dans
435c7fc)Champ Ville affiché vide pour toute adresse existante / pré-remplie —
DirectoryAddressBlock.vue. La ville est passée d'unMalioInputTextà unMalioSelectdont les options ne sont alimentées qu'à la frappe d'un code postal. OrSelect.vuen'affiche que les valeurs présentes dans sesoptions(options.find(...)?.label ?? '') : au chargement d'une fiche (et après remplissage par l'autocomplétion d'adresse), la ville enregistrée ne s'affichait pas. Régression sur toutes les fiches Client/Prospect existantes, pas seulement les prestataires.→ Fix poussé :
cityOptionsdevient uncomputedqui réinjecte toujours la ville courante dans les options. Idem matching de suggestion BAN parlabel(unique) plutôt que par rue.🟡 Objections ouvertes (non bloquantes)
MalioInputAutocompleteémetupdate:modelValue(null)dès le 1ᵉʳ caractère (pas deselectedOptioncar options vides), vidant la rue dans le modèle jusqu'au commit (blur/clic-dehors/Entrée). Mitigé par le clic « Enregistrer » qui déclenche le commit, mais fragile si une sauvegarde est lancée sans blur. Comportement interne de la lib — non corrigeable depuis le projet.onPostalCodeInputappelle la BAN directement à chaque frappe ≥ 5 chiffres (la recherche rue est debouncée par le composant, pas celle-ci). Coût faible, mode dégradé géré.DROP CONSTRAINT chk_*_ownersansIF EXISTS→ échoue durement si une contrainte d'ownership manque sur la cible. OK en prod (créées par la migration directory antérieure), maisIF EXISTSserait plus défensif.⚠️ À confirmer avant déploiement (produit, pas un bug)
La migration supprime définitivement
prospect.name(nom de la personne), sauf quandcompanyétait vide (recopie). Si des prospects en prod ont unnamedistinct decompanyqui compte, l'info est perdue. Confirmer que c'est l'intention (le contact passe par l'entitéContact).Rappel déploiement :
app:sync-permissionsenregistreradirectory.providers.view/manage(déjà dansdeploy.sh).