src/Controller/User/Privates/ListController.php line 29

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller\User\Privates;
  4. use App\Controller\Traits\ExceptionTrait;
  5. use App\Enum\GenderEnum;
  6. use App\Manager\PaginatorManager;
  7. use App\Normalizer\Enum\EnumStringNormalizer;
  8. use App\Normalizer\PriceNormalizer;
  9. use App\Repository\UserRepository;
  10. use App\Serializer\Serializer;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Serializer\Exception\ExceptionInterface;
  16. /**
  17.  * @Route(
  18.  *     "/users",
  19.  *     methods={"GET"}
  20.  * )
  21.  * @IsGranted("ROLE_CUSTOMER_READ")
  22.  * Class ListController
  23.  * @package App\Controller\User\Privates
  24.  */
  25. class ListController
  26. {
  27.     use ExceptionTrait;
  28.     private Serializer $serializer;
  29.     private PaginatorManager $paginator;
  30.     private UserRepository $userRepository;
  31.     /**
  32.      * ListController constructor.
  33.      * @param Serializer $serializer
  34.      * @param PaginatorManager $paginator
  35.      * @param UserRepository $userRepository
  36.      */
  37.     public function __construct(
  38.         Serializer $serializer,
  39.         PaginatorManager $paginator,
  40.         UserRepository $userRepository
  41.     ) {
  42.         $this->serializer $serializer;
  43.         $this->paginator $paginator;
  44.         $this->userRepository $userRepository;
  45.     }
  46.     public function __invoke(Request $request): JsonResponse
  47.     {
  48.         try {
  49.             $request->query->set('deletedAt', ['isnull' => true]);
  50.             return new JsonResponse(
  51.                 $this->serializer
  52.                     ->getSerializer(
  53.                         [
  54.                             new PriceNormalizer(),
  55.                             new EnumStringNormalizer(GenderEnum::class),
  56.                         ]
  57.                     )
  58.                     ->normalize(
  59.                         $this->paginator->addMetaPagination(
  60.                             $request,
  61.                             $this->userRepository->filter($request->query->all())
  62.                         ),
  63.                         null,
  64.                         [
  65.                             'groups' => [
  66.                                 'user:detail',
  67.                                 'user:edit',
  68.                                 'area:detail'
  69.                             ],
  70.                         ]
  71.                     )
  72.             );
  73.         } catch (ExceptionInterface $e) {
  74.             return $this->exceptionOutput($e);
  75.         }
  76.     }
  77. }