src/Controller/Api/HelpCenterController.php line 100

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Entity\HelpCenterCategory;
  4. use App\Entity\HelpCenterArticle;
  5. use App\Service\Rsa;
  6. use App\Service\Tools;
  7. use App\Service\SerializeService;
  8. use App\Service\TranslationService;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Doctrine\Common\Collections\Criteria;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. /**
  17.  * Class HelpCenterController
  18.  * @package App\Controller\Api
  19.  * @Route(path="/api/help/center", name="api_help_center")
  20.  */
  21. class HelpCenterController extends AbstractController
  22. {
  23.     private EntityManagerInterface $em;
  24.     private Rsa $rsa;
  25.     private TranslatorInterface $translator;
  26.     private SerializeService $serializeService;
  27.     public function __construct(
  28.         EntityManagerInterface $em,
  29.         Rsa $rsa,
  30.         TranslatorInterface $translator,
  31.         SerializeService $serializeService
  32.     ) {
  33.         $this->em $em;
  34.         $this->rsa $rsa;
  35.         $this->translator $translator;
  36.         $this->serializeService $serializeService;
  37.     }
  38.     /**
  39.      * Find all main categories (the root ones that are not linked to a parent)
  40.      * @param Request $request
  41.      * @return JsonResponse
  42.      * @Route("/category/main", name="category_find_main")
  43.      */
  44.     public function categoryFindMain(Request $request): JsonResponse
  45.     {
  46.         if (!$this->rsa->isValidToken($request->request->get('apiKey'))) {
  47.             return new JsonResponse([
  48.                 'success' => false,
  49.                 'message' => $this->translator->trans('global.invalidToken'),
  50.             ]);
  51.         }
  52.         $criteria Criteria::create()
  53.             ->where(Criteria::expr()->eq('parent'null));
  54.         $categories $this->em->getRepository(HelpCenterCategory::class)->matching($criteria);
  55.         $data = [];
  56.         foreach ($categories as $category) {
  57.             $data[] = $this->serializeService->serializeHelpCenterCategory($category);
  58.         }
  59.         return new JsonResponse([
  60.             'success' => true,
  61.             'categories' => $data,
  62.         ]);
  63.     }
  64.     /**
  65.      * @param HelpCenterCategory $category
  66.      * @param Request $request
  67.      * @return JsonResponse
  68.      * @Route("/category/{category}", name="category_find", requirements={"category"="\d+"})
  69.      */
  70.     public function categoryFind(HelpCenterCategory $categoryRequest $request): JsonResponse
  71.     {
  72.         if (!$this->rsa->isValidToken($request->request->get('apiKey'))) {
  73.             return new JsonResponse([
  74.                 'success' => false,
  75.                 'message' => $this->translator->trans('global.invalidToken'),
  76.             ]);
  77.         }
  78.         return new JsonResponse([
  79.             'success' => true,
  80.             'category' => $this->serializeService->serializeHelpCenterCategory($category),
  81.         ]);
  82.     }
  83.     /**
  84.      * @param Request $request
  85.      * @return JsonResponse
  86.      * @Route("/article", name="article_find_all")
  87.      */
  88.     public function articleFindAll(Request $request): JsonResponse
  89.     {
  90.         if (!$this->rsa->isValidToken($request->request->get('apiKey'))) {
  91.             return new JsonResponse([
  92.                 'success' => false,
  93.                 'message' => $this->translator->trans('global.invalidToken'),
  94.             ]);
  95.         }
  96.         $articles $this->em->getRepository(HelpCenterArticle::class)->findBy([], ['id' => 'ASC']);
  97.         $data = [];
  98.         foreach ($articles as $article) {
  99.             $data[] = $this->serializeService->serializeHelpCenterArticle($article);
  100.         }
  101.         return new JsonResponse([
  102.             'success' => true,
  103.             'articles' => $data,
  104.         ]);
  105.     }
  106.     /**
  107.      * @param HelpCenterArticle $article
  108.      * @param Request $request
  109.      * @return JsonResponse
  110.      * @Route("/article/{article}", name="article_find", requirements={"article"="\d+"})
  111.      */
  112.     public function articleFind(HelpCenterArticle $articleRequest $request): JsonResponse
  113.     {
  114.         if (!$this->rsa->isValidToken($request->request->get('apiKey'))) {
  115.             return new JsonResponse([
  116.                 'success' => false,
  117.                 'message' => $this->translator->trans('global.invalidToken'),
  118.             ]);
  119.         }
  120.         $article->setNumberOfViews($article->getNumberOfViews() + 1);
  121.         $this->em->persist($article);
  122.         $this->em->flush();
  123.         return new JsonResponse([
  124.             'success' => true,
  125.             'article' => $this->serializeService->serializeHelpCenterArticle($article),
  126.         ]);
  127.     }
  128.     /**
  129.      * @param HelpCenterArticle $article
  130.      * @param Request $request
  131.      * @return JsonResponse
  132.      * @Route("/article/{article}/feedback", name="article_feedback", requirements={"article"="\d+"})
  133.      */
  134.     public function articleFeedback(HelpCenterArticle $articleRequest $request): JsonResponse
  135.     {
  136.         if (!$this->rsa->isValidToken($request->request->get('apiKey'))) {
  137.             return new JsonResponse([
  138.                 'success' => false,
  139.                 'message' => $this->translator->trans('global.invalidToken'),
  140.             ]);
  141.         }
  142.         $data Tools::getRequestData($request);
  143.         $helpful $data['helpful'];
  144.         if ($helpful) {
  145.             $article->setHelpful($article->getHelpful() + 1);
  146.         } else {
  147.             $article->setNotHelpful($article->getNotHelpful() + 1);
  148.         }
  149.         $this->em->persist($article);
  150.         $this->em->flush();
  151.         return new JsonResponse([
  152.             'success' => true,
  153.         ]);
  154.     }
  155. }