refactor : simplification globale (vague 1 + 2) + fix visibilité ActorProfileResolver #2
Reference in New Issue
Block a user
Delete Branch "refactor/simplification-globale"
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é
Refactor de simplification du code Inventory (vagues 1 + 2) consolidé avec un fix de régression et des tests de couverture supplémentaires.
Backend — Extractions et déduplication
ActorProfileResolver(nouveau service) : unifie 3 implémentations dupliquées et divergentes du résolveur d'acteur (session → fallbackSecurity::getUser), réutilisé parAbstractAuditSubscriber,EntityVersionServiceetModelTypeCategoryConversionService.EntityVersionService::resolveActorProfileId()n'avait pas le fallbackSecurity::getUser, loggantactor=nullhors contexte session sur les restaurations de version.MachineStructureController: intégration du clonage descontextFieldValuesdirectement danscloneComponentLinks/clonePieceLinks; suppression decloneContextFieldValues()et de sonfind()en boucle.serializeProductSlots()(EntityVersionService),updateModelTypeCategory()(ModelTypeCategoryConversionService).AbstractAuditSubscriber: suppression decollectCollectionUpdate()(no-op) et de ses appels.Frontend — Nettoyage
useMachineDetailData.ts: suppression d'undebugref orphelin, descomponentTypeLabelMap/pieceTypeLabelMapnon consommés en aval, et d'une double assignationproductLinks.PieceItem.vue: suppression d'initspieceDataredondants dansonMounted(déjà couverts parreactive()initial + watch sur les props).Fix de régression (commit dédié)
AbstractAuditSubscriberdéclarait$actorProfileResolverenprivate readonlyvia promoted property.MachineAuditSubscribersurchargeonFlush()et y accède —privaten'est pas hérité, donc PHP voyaitnull→Call to a member function resolve() on nullsur chaque flush touchant des link entities. Le passage àprotectedsuit la convention déjà en place dans la classe (autres méthodes partagées parent/sous-classe sontprotected).Tests ajoutés
testCloneMachineCopiesPieceContextFieldValues— symétrique au test composant existant, comble le gap de couverture côté pièce.testCloneMachineLeavesSourceContextFieldValuesIntact— vérifie l'invariant que la machine source garde ses CFV context après clone.Vérification
make test→ 345/345 OK, 864 assertions, 1 deprecation pré-existante non liée.make php-cs-fixer-allow-risky→ clean.Test plan
MachineComponentLink,MachinePieceLink,MachineProductLink) ne lèvent plus l'erreur surActorProfileResolver::resolve().productIdpré-sélectionné mais sansproductchargé en cache, vérifier que le nom du produit s'affiche dès le rendu initial. Si le produit ne s'affiche qu'après une interaction, c'est une régression du retrait deensureProductLoaded(pieceData.productId)dansonMounteddePieceItem.vue— il faudra restaurer cette ligne.AuditLogcréé porte bien unactorProfileIdnon null.