- <?php
- declare(strict_types=1);
- namespace Slivki\Controller\WorkExample;
- use Slivki\Dao\WorkExample\WorkExampleDaoInterface;
- use Slivki\Dto\WorkExample\WorkExampleWithAddressesDto;
- use Slivki\Factory\Dto\WorkExample\WorkExampleWithAddressesDtoFactory;
- use Slivki\Message\Query\WorkExample\Factory\GetWorkExamplesQueryFactory;
- use Slivki\Message\Query\WorkExample\GetWorkExamplesQuery;
- use Slivki\Paginator\WorkExample\WorkExamplePaginatorInterface;
- use Slivki\Services\DeviceTypeService;
- use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\Routing\Annotation\Route;
- final class GetWorkExamplesAction extends AbstractController
- {
-     private DeviceTypeService $deviceTypeService;
-     private WorkExamplePaginatorInterface $workExamplePaginator;
-     private WorkExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory;
-     private WorkExampleDaoInterface $workExampleDao;
-     public function __construct(
-         DeviceTypeService $deviceTypeService,
-         WorkExamplePaginatorInterface $workExamplePaginator,
-         WorkExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory,
-         WorkExampleDaoInterface $workExampleDao
-     ) {
-         $this->deviceTypeService = $deviceTypeService;
-         $this->workExamplePaginator = $workExamplePaginator;
-         $this->workExampleWithAddressesDtoFactory = $workExampleWithAddressesDtoFactory;
-         $this->workExampleDao = $workExampleDao;
-     }
-     /**
-      * @Route(
-      *     "/foto-rabot",
-      *     name="work_examples_get",
-      *     methods={"GET"},
-      * ),
-      */
-     public function __invoke(Request $request): Response
-     {
-         $view = $this->deviceTypeService->isMobileDevice($request)
-             ? 'Slivki/mobile/works-examples/index.html.twig'
-             : 'Slivki/works-examples/index.html.twig';
-         $query = new GetWorkExamplesQuery(
-             GetWorkExamplesQueryFactory::DEFAULT_PAGE,
-             GetWorkExamplesQueryFactory::DEFAULT_PAGE,
-             WorkExamplePaginatorInterface::DEFAULT_SORT_FIELD,
-             WorkExamplePaginatorInterface::DEFAULT_SORT_DIRECTION,
-             null,
-             null,
-             null,
-             null,
-             null,
-         );
-         $workExamplesPaginator = $this->workExamplePaginator->findAllByQuery($query);
-         return $this->render($view, [
-             'workExamples' => array_map(
-                 fn (array $item): WorkExampleWithAddressesDto => $this->workExampleWithAddressesDtoFactory->create(
-                     $item[0],
-                     $query->getCurrentUserPosition(),
-                 ),
-                 (array) $workExamplesPaginator->getItems(),
-             ),
-             'sorts' => WorkExamplePaginatorInterface::SORT,
-             'defaultSort' => WorkExamplePaginatorInterface::DEFAULT_SORT_FIELD,
-             'priceSettings' => $this->workExampleDao->getMinAndMaxPrice(),
-         ]);
-     }
- }
-