src/EventSubscriber/OrderStatusPaymentSubscriber.php line 33
<?phpnamespace App\EventSubscriber;use ApiPlatform\Symfony\EventListener\EventPriorities;use App\Document\Parameters\OrderStatus;use Doctrine\ODM\MongoDB\DocumentManager;use Doctrine\ODM\MongoDB\MongoDBException;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpKernel\Event\ViewEvent;use Symfony\Component\HttpKernel\KernelEvents;class OrderStatusPaymentSubscriber implements EventSubscriberInterface{public function __construct(private readonly DocumentManager $manager){}/*** @return array<string, mixed>*/public static function getSubscribedEvents(): array{return [KernelEvents::VIEW => ['setHasPaymentOrderStatus', EventPriorities::PRE_WRITE],];}/*** @throws MongoDBException*/public function setHasPaymentOrderStatus(ViewEvent $event): void{$orderStatus = $event->getControllerResult();$method = $event->getRequest()->getMethod();if (!$orderStatus instanceof OrderStatus || !in_array($method, [Request::METHOD_POST, Request::METHOD_PUT])) {return;}$hasPayment = $orderStatus->isHasPayment();if ($hasPayment) {// Créer une requête pour mettre à jour les documents qui ne sont pas l'objet courant$queryBuilder = $this->manager->createQueryBuilder(OrderStatus::class)->updateMany()->field('id')->notEqual($orderStatus->getId())->field('hasPayment')->set(false);// Exécuter la requête$queryBuilder->getQuery()->execute();}}}