src/App/Controller/Application/Term/IndexController.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Application\Term;
  3. use App\Controller\AbstractController;
  4. use App\Entity\Company;
  5. use App\Handler\App\Term\SearchTerm\SearchTermHandler;
  6. use App\Handler\App\Term\SearchTerm\SearchTermOptions;
  7. use App\Utils\DTO\Pagination;
  8. use Aura\Payload_Interface\PayloadStatus;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\OptionsResolver\OptionsResolver;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. #[Route(
  15.     path'/terms',
  16.     methods: ['GET']
  17. )]
  18. class IndexController extends AbstractController
  19. {
  20.     public function __construct(
  21.         private SearchTermHandler $searchTermHandler,
  22.         private EntityManagerInterface $entityManager,
  23.     ) {
  24.     }
  25.     public function __invoke(Request $request): JsonResponse
  26.     {
  27.         $options $this->createOptionsResolver($request->query->all());
  28.         $format $options['format'] ?? null;
  29.         unset($options['format']);
  30.         if (== $this->getCompany()->getId() && isset($options['companyUid'])) {
  31.             $companySelected $this->entityManager->getRepository(Company::class)->findOneBy(['uid' => $options['companyUid']]);
  32.             if (!$companySelected) {
  33.                 $this->jsonResponse(
  34.                     statusPayloadStatus::ERROR,
  35.                     output: ['Company not found'],
  36.                 );
  37.             }
  38.             $options['company'] = $companySelected;
  39.         } else {
  40.             $options['company'] = $this->getCompany();
  41.         }
  42.         if (!isset($options['page'])) {
  43.             $options['page'] = 1;
  44.         }
  45.         $options['pagination'] = Pagination::fromArray(['page' => $options['page']]);
  46.         unset($options['page']);
  47.         $terms $this->searchTermHandler
  48.             ->handle(SearchTermOptions::fromArray($options));
  49.         /*
  50.         if ('keyVal' === $format) {
  51.             $terms = collect($terms)
  52.                 ->map(function ($term) {
  53.                     return ['value' => $term['id'], 'label' => $term['name'], 'taxonomy' => $term['taxonomy'] ,'isDeleted' => $term['isDeleted']];
  54.                 })
  55.                 ->toArray();
  56.         }
  57.         */
  58.         return $this->jsonResponse(
  59.             output$terms,
  60.             extras: [
  61.                 'totalPage' => $terms['totalPage'] ?? null,
  62.             ]
  63.         );
  64.     }
  65.     private function createOptionsResolver(array $options): array
  66.     {
  67.         $optionsResolver = new OptionsResolver();
  68.         $optionsResolver->setDefined([
  69.             'name',
  70.             'taxonomy',
  71.             'format',
  72.             'company',
  73.             'page',
  74.             'noPage',
  75.             'companyUid'
  76.         ]);
  77.         return $optionsResolver->resolve($options);
  78.     }
  79. }