src/Ui/Http/Rest/Controller/Employee/GetEmployeesAction.php line 17

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Ui\Http\Rest\Controller\Employee;
  4. use App\Shared\Application\Query\QueryBusInterface;
  5. use App\Employee\Application\Query\GetTeam\GetEmployeesQuery;
  6. use FOS\RestBundle\View\View;
  7. use FOS\RestBundle\View\ViewHandlerInterface;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  11. use Symfony\Contracts\Cache\ItemInterface;
  12. use Symfony\Contracts\Cache\TagAwareCacheInterface;
  13. final class GetEmployeesAction
  14. {
  15.     public function __construct(
  16.         private QueryBusInterface $queryBus,
  17.         private ViewHandlerInterface $viewHandler,
  18.         private TagAwareCacheInterface $cache
  19.     ) {
  20.     }
  21.     public function __invoke(Request $request) : Response
  22.     {
  23.         try {
  24.             return $this->cache->get(
  25.                 'get-employees-action',
  26.                 function (ItemInterface $item) {
  27.                     $item->tag(['employees']);
  28.                     return $this->viewHandler->handle(View::create(
  29.                         $this->queryBus->ask(
  30.                             new GetEmployeesQuery()
  31.                         ),
  32.                         Response::HTTP_OK
  33.                     ));
  34.                 });
  35.         } catch (\InvalidArgumentException $exception) {
  36.             throw new BadRequestHttpException($exception->getMessage());
  37.         }
  38.     }
  39. }