<?php
declare(strict_types=1);
namespace Ui\Http\Rest\Controller\Employee;
use App\Shared\Application\Query\QueryBusInterface;
use App\Employee\Application\Query\GetTeam\GetEmployeesQuery;
use FOS\RestBundle\View\View;
use FOS\RestBundle\View\ViewHandlerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Contracts\Cache\ItemInterface;
use Symfony\Contracts\Cache\TagAwareCacheInterface;
final class GetEmployeesAction
{
public function __construct(
private QueryBusInterface $queryBus,
private ViewHandlerInterface $viewHandler,
private TagAwareCacheInterface $cache
) {
}
public function __invoke(Request $request) : Response
{
try {
return $this->cache->get(
'get-employees-action',
function (ItemInterface $item) {
$item->tag(['employees']);
return $this->viewHandler->handle(View::create(
$this->queryBus->ask(
new GetEmployeesQuery()
),
Response::HTTP_OK
));
});
} catch (\InvalidArgumentException $exception) {
throw new BadRequestHttpException($exception->getMessage());
}
}
}