src/Controller/ApiController.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Gender;
  4. use App\Entity\Report;
  5. use App\Repository\GenderRepository;
  6. use App\Repository\ReportRepository;
  7. use App\Service\GenderService;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Contracts\HttpClient\HttpClientInterface;
  14. /**
  15.  * @Route("/api/v1", name="app_api_")
  16.  */
  17. class ApiController extends AbstractController
  18. {
  19.     /**
  20.      * @Route("/guess-gender/{name}", name="guess_gender")
  21.      */
  22.     public function guessGender($nameGenderService $finder): Response
  23.     {
  24.         return new JsonResponse($finder->guess($name));
  25.     }
  26.     /**
  27.      * @Route("/update-gender/{name}", name="update_gender", methods={"POST","GET"})
  28.      */
  29.     public function updateGender(Request $requestString $nameGenderRepository $genderRepository): Response
  30.     {
  31.         $status false;
  32.         $name trim(strtolower($name));
  33.         $json json_decode($request->getContent(), true);
  34.         $value $json['gender'] ?? Gender::TYPE_UNKNOWN;
  35.         if (in_array($value, [
  36.             Gender::TYPE_FEMALE,
  37.             Gender::TYPE_MALE,
  38.             Gender::TYPE_UNKNOWN
  39.         ])) {
  40.             $gender $genderRepository->findOneBy(['name' => $name]);
  41.             if (!$gender) {
  42.                 $gender = new Gender();
  43.                 $gender->setName($name);
  44.             }
  45.             $status true;
  46.             $gender->setGender($value);
  47.             $entityManager $this->getDoctrine()->getManager();
  48.             $entityManager->persist($gender);
  49.             $entityManager->flush();
  50.         }
  51.         return new JsonResponse(compact('status'));
  52.     }
  53.     /**
  54.      * @Route("/report/{id}", name="report_data")
  55.      */
  56.     public function getReportData(String $idReportRepository $reportRepositoryRequest $request): Response
  57.     {
  58.         $user $this->getUser();
  59.         $hasAccess true;
  60.         if (!$user) {
  61.             $session $request->getSession();
  62.             $hasAccess intval($session->get('anonymous_report_id'null)) == $id;
  63.         }
  64.         if ($hasAccess) {
  65.             $report $reportRepository->findOneBy(['id' => $id]);
  66.             if ($report) {
  67.                 $article $report->getSource();
  68.                 $data = [
  69.                     'type' => $report->getType(),
  70.                     'overall' => $report->getOverallScore(),
  71.                     'raw' => $report->getRaw(),
  72.                     'status' => $report->getStatus(),
  73.                     'body' => $article $article->getBody() : "",
  74.                     'indicators' => []
  75.                 ];
  76.                 $indicators $report->getIndicators();
  77.                 foreach ($indicators as $indicator) {
  78.                     $data['indicators'][$indicator->getId()] = [
  79.                         'slug' => $indicator->getIndicator()->getSlug(),
  80.                         'value' => $indicator->getValue(),
  81.                         'meta' => $indicator->getMeta(),
  82.                         'status' => $indicator->getStatus()
  83.                     ];
  84.                 }
  85.                 return new JsonResponse($data);
  86.             }
  87.         }
  88.         return new JsonResponse(null);
  89.     }
  90. }