src/Controller/Api/ArticleController.php line 99

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Entity\Article;
  4. use App\Service\Rsa;
  5. use App\Service\SerializeService;
  6. use App\Service\Tools;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Contracts\Translation\TranslatorInterface;
  13. /**
  14.  * Class ArticleController
  15.  * @package App\Controller\Api
  16.  * @Route(path="/api/article", name="api_article_")
  17.  */
  18. class ArticleController extends AbstractController
  19. {
  20.     private EntityManagerInterface $em;
  21.     private SerializeService $serializeService;
  22.     private Rsa $rsa;
  23.     private TranslatorInterface $translator;
  24.     public function __construct(
  25.         EntityManagerInterface $em,
  26.         SerializeService $serializeService,
  27.         Rsa $rsa,
  28.         TranslatorInterface $translator
  29.     ) {
  30.         $this->em $em;
  31.         $this->serializeService $serializeService;
  32.         $this->rsa $rsa;
  33.         $this->translator $translator;
  34.     }
  35.     /**
  36.      * Find the 12 most recent articles and the others after that (paginated, by batch)
  37.      * @param Request $request
  38.      * @return JsonResponse
  39.      * @Route("", name="find_all_with_pagination")
  40.      */
  41.     public function findAllWithPagination(Request $request): JsonResponse
  42.     {
  43.         if (!$this->rsa->isValidToken($request->request->get('apiKey'))) {
  44.             return new JsonResponse([
  45.                 'success' => false,
  46.                 'message' => $this->translator->trans('global.invalidToken'),
  47.             ]);
  48.         }
  49.         $data Tools::getRequestData($request);
  50.         $page $data['page'];
  51.         $serializedArticles = [];
  52.         /** @var Article[] $articles */
  53.         $articles $this->em->getRepository(Article::class)->findAllWithPagination($page);
  54.         foreach ($articles as $article) {
  55.             $serializedArticles[] = $this->serializeService->serializeArticleOverview($article);
  56.         }
  57.         return new JsonResponse([
  58.             'success' => true,
  59.             'articles' => $serializedArticles,
  60.         ]);
  61.     }
  62.     /**
  63.      * @param Article $article
  64.      * @param Request $request
  65.      * @return JsonResponse
  66.      * @Route("/{article}", name="find", requirements={"article"="\d+"})
  67.      */
  68.     public function find(Article $articleRequest $request): JsonResponse
  69.     {
  70.         if (!$this->rsa->isValidToken($request->request->get('apiKey'))) {
  71.             return new JsonResponse([
  72.                 'success' => false,
  73.                 'message' => $this->translator->trans('global.invalidToken'),
  74.             ]);
  75.         }
  76.         return new JsonResponse([
  77.             'success' => true,
  78.             'article' => $this->serializeService->serializeArticle($article),
  79.         ]);
  80.     }
  81.     /**
  82.      * @param Request $request
  83.      * @return JsonResponse
  84.      * @Route("/last", name="find_two_last")
  85.      */
  86.     public function findTwoLast(Request $request): JsonResponse
  87.     {
  88.         if (!$this->rsa->isValidToken($request->request->get('apiKey'))) {
  89.             return new JsonResponse([
  90.                 'success' => false,
  91.                 'message' => $this->translator->trans('global.invalidToken'),
  92.             ]);
  93.         }
  94.         $data = [];
  95.         /** @var Article[] $articles */
  96.         $articles $this->em->getRepository(Article::class)->findBy(['active' => true], ['date' => 'DESC'], 20);
  97.         foreach ($articles as $article) {
  98.             $data[] = $this->serializeService->serializeArticleOverview($article);
  99.         }
  100.         return new JsonResponse([
  101.             'success' => true,
  102.             'articles' => $data,
  103.         ]);
  104.     }
  105. }