src/EventSubscriber/OrderStatusDefaultSubscriber.php line 33

  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Symfony\EventListener\EventPriorities;
  4. use App\Document\Parameters\OrderStatus;
  5. use Doctrine\ODM\MongoDB\DocumentManager;
  6. use Doctrine\ODM\MongoDB\MongoDBException;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpKernel\Event\ViewEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. class OrderStatusDefaultSubscriber implements EventSubscriberInterface
  12. {
  13.     public function __construct(private readonly DocumentManager $manager)
  14.     {
  15.     }
  16.     /**
  17.      * @return array<string, mixed>
  18.      */
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             KernelEvents::VIEW => ['setDefaultOrderStatus'EventPriorities::PRE_WRITE],
  23.         ];
  24.     }
  25.     /**
  26.      * @throws MongoDBException
  27.      */
  28.     public function setDefaultOrderStatus(ViewEvent $event): void
  29.     {
  30.         $orderStatus $event->getControllerResult();
  31.         $method $event->getRequest()->getMethod();
  32.         if (!$orderStatus instanceof OrderStatus || !in_array($method, [Request::METHOD_POSTRequest::METHOD_PUT])) {
  33.             return;
  34.         }
  35.         $isDefault $orderStatus->isDefault();
  36.         if ($isDefault) {
  37.             // Créer une requête pour mettre à jour les documents qui ne sont pas l'objet courant
  38.             $queryBuilder $this->manager->createQueryBuilder(OrderStatus::class)
  39.                 ->updateMany()
  40.                 ->field('id')->notEqual($orderStatus->getId())
  41.                 ->field('isDefault')->set(false);
  42.             // Exécuter la requête
  43.             $queryBuilder->getQuery()->execute();
  44.         }
  45.     }
  46. }