src/Controller/WorkExample/GetWorkExamplesAction.php line 72

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\Controller\WorkExample;
  4. use Slivki\Dao\WorkExample\WorkExampleDaoInterface;
  5. use Slivki\Dto\WorkExample\WorkExampleWithAddressesDto;
  6. use Slivki\Factory\Dto\WorkExample\WorkExampleWithAddressesDtoFactory;
  7. use Slivki\Message\Query\WorkExample\Factory\GetWorkExamplesQueryFactory;
  8. use Slivki\Message\Query\WorkExample\GetWorkExamplesQuery;
  9. use Slivki\Paginator\WorkExample\WorkExamplePaginatorInterface;
  10. use Slivki\Services\DeviceTypeService;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. final class GetWorkExamplesAction extends AbstractController
  16. {
  17.     private DeviceTypeService $deviceTypeService;
  18.     private WorkExamplePaginatorInterface $workExamplePaginator;
  19.     private WorkExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory;
  20.     private WorkExampleDaoInterface $workExampleDao;
  21.     public function __construct(
  22.         DeviceTypeService $deviceTypeService,
  23.         WorkExamplePaginatorInterface $workExamplePaginator,
  24.         WorkExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory,
  25.         WorkExampleDaoInterface $workExampleDao
  26.     ) {
  27.         $this->deviceTypeService $deviceTypeService;
  28.         $this->workExamplePaginator $workExamplePaginator;
  29.         $this->workExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory;
  30.         $this->workExampleDao $workExampleDao;
  31.     }
  32.     /**
  33.      * @Route(
  34.      *     "/foto-rabot",
  35.      *     name="work_examples_get",
  36.      *     methods={"GET"},
  37.      * ),
  38.      */
  39.     public function __invoke(Request $request): Response
  40.     {
  41.         $view $this->deviceTypeService->isMobileDevice($request)
  42.             ? 'Slivki/mobile/works-examples/index.html.twig'
  43.             'Slivki/works-examples/index.html.twig';
  44.         $query = new GetWorkExamplesQuery(
  45.             GetWorkExamplesQueryFactory::DEFAULT_PAGE,
  46.             GetWorkExamplesQueryFactory::DEFAULT_PAGE,
  47.             WorkExamplePaginatorInterface::DEFAULT_SORT_FIELD,
  48.             WorkExamplePaginatorInterface::DEFAULT_SORT_DIRECTION,
  49.             null,
  50.             null,
  51.             null,
  52.             null,
  53.             null,
  54.         );
  55.         $workExamplesPaginator $this->workExamplePaginator->findAllByQuery($query);
  56.         return $this->render($view, [
  57.             'workExamples' => array_map(
  58.                 fn (array $item): WorkExampleWithAddressesDto => $this->workExampleWithAddressesDtoFactory->create(
  59.                     $item[0],
  60.                     $query->getCurrentUserPosition(),
  61.                 ),
  62.                 (array) $workExamplesPaginator->getItems(),
  63.             ),
  64.             'sorts' => WorkExamplePaginatorInterface::SORT,
  65.             'defaultSort' => WorkExamplePaginatorInterface::DEFAULT_SORT_FIELD,
  66.             'priceSettings' => $this->workExampleDao->getMinAndMaxPrice(),
  67.         ]);
  68.     }
  69. }