src/EventSubscriber/AreaSubscriber.php line 35
<?phpnamespace App\EventSubscriber;use ApiPlatform\Symfony\EventListener\EventPriorities;use App\Document\Area\Area;use App\Document\Area\Table;use App\Document\Area\TablePosition;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;/*** @author Roméo Razafindrakoto <romeorazaf@myagency.mg>*/class AreaSubscriber implements EventSubscriberInterface{public function __construct(private readonly DocumentManager $manager){}public static function getSubscribedEvents(): array{return [KernelEvents::VIEW => ['createTables', EventPriorities::POST_WRITE],];}/*** @throws MongoDBException*/public function createTables(ViewEvent $event): void{$area = $event->getControllerResult();$method = $event->getRequest()->getMethod();if (!$area instanceof Area || Request::METHOD_POST !== $method) {return;}$numberOfTables = $area->getCapacity();$areaName = $area->getName();for ($i = 1; $i <= $numberOfTables; ++$i) {$table = (new Table())->setCapacity(0)->setName("$areaName - $i")->setArea($area);$this->manager->persist($table);$tablePosition = (new TablePosition())->setArea($area)->setPosition($i)->setTable($table);$this->manager->persist($tablePosition);}$this->manager->flush();}}