<?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(),
]);
}
}