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