From aa401f48f9645459bc59018c17184983d6fc7f26 Mon Sep 17 00:00:00 2001 From: tristan Date: Mon, 27 Apr 2026 17:10:37 +0200 Subject: [PATCH] refactor : remplacement du SQL brut par du DQL UPDATE dans les hooks PostPersist MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Reception et Shipment utilisent createQuery au lieu de executeStatement - Bypass toujours l'unit of work, même comportement, mais via Doctrine - Mise à jour de la règle CLAUDE.md : repository custom autorisé, SQL brut interdit Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 2 +- src/Entity/Reception.php | 12 ++++-------- src/Entity/Shipment.php | 12 ++++-------- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 902346a..a61e7ff 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -82,7 +82,7 @@ frontend/ - Code en anglais ; "pont-bascule" est un terme métier conservé tel quel. - Les opérations API Platform sont définies directement sur les entités Doctrine. -- Pas de classes Repository custom : utiliser `EntityManagerInterface` avec les repos par défaut. +- Repository custom autorisé dès qu'on a une requête métier non-triviale (agrégations, jointures spécifiques, filtres multiples). Toujours via DQL/QueryBuilder, **jamais de SQL brut** (pas de `Connection::executeQuery`, `fetchAssociative`, etc.). Les CRUD basiques restent sur le repo Doctrine par défaut via `EntityManagerInterface`. - `config/reference.php` est auto-généré — ne pas modifier à la main. - Endpoints toujours au pluriel (convention API Platform). - Ne jamais créer de GET qui crée des ressources : utiliser POST + PATCH. diff --git a/src/Entity/Reception.php b/src/Entity/Reception.php index 640c0cb..82d5afc 100644 --- a/src/Entity/Reception.php +++ b/src/Entity/Reception.php @@ -511,14 +511,10 @@ class Reception $this->identificationNumber = $number; $args->getObjectManager() - ->getConnection() - ->executeStatement( - 'UPDATE reception SET identification_number = :number WHERE id = :id', - [ - 'number' => $number, - 'id' => $this->id, - ] - ) + ->createQuery(sprintf('UPDATE %s r SET r.identificationNumber = :number WHERE r.id = :id', self::class)) + ->setParameter('number', $number) + ->setParameter('id', $this->id) + ->execute() ; } diff --git a/src/Entity/Shipment.php b/src/Entity/Shipment.php index f198c6b..d9f9a36 100644 --- a/src/Entity/Shipment.php +++ b/src/Entity/Shipment.php @@ -358,14 +358,10 @@ class Shipment $this->identificationNumber = $number; $args->getObjectManager() - ->getConnection() - ->executeStatement( - 'UPDATE shipment SET identification_number = :number WHERE id = :id', - [ - 'number' => $number, - 'id' => $this->id, - ] - ) + ->createQuery(sprintf('UPDATE %s s SET s.identificationNumber = :number WHERE s.id = :id', self::class)) + ->setParameter('number', $number) + ->setParameter('id', $this->id) + ->execute() ; }