From 9aefd71db5b60d867b17eedbd5742545cf55d32c Mon Sep 17 00:00:00 2001
From: pfleu <fleutotp@gmail.com>
Date: Tue, 24 Jan 2023 17:16:39 +0100
Subject: [PATCH] =?UTF-8?q?API=20:=20les=20requ=C3=AAtes=20qui=20ne=20modi?=
 =?UTF-8?q?fient=20pas=20de=20donn=C3=A9es=20passent=20en=20GET?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/Controller/ApiEntryController.php      | 41 ++++++--------
 src/Controller/ApiLogController.php        | 64 +++++++++++-----------
 src/Controller/ApiMetaInfoController.php   | 31 +++++------
 src/Controller/ApiTraceController.php      | 54 +++++++++---------
 src/Controller/ApiWiktionaryController.php | 26 ++++-----
 5 files changed, 99 insertions(+), 117 deletions(-)

diff --git a/src/Controller/ApiEntryController.php b/src/Controller/ApiEntryController.php
index ca6d838..689dded 100644
--- a/src/Controller/ApiEntryController.php
+++ b/src/Controller/ApiEntryController.php
@@ -60,9 +60,9 @@ class ApiEntryController extends ApiBaseController
 //    }
 
     /**
-     * Recherche d'une entrée par graphie et par langue, dans un ensemble de lexiques
+     * Recherche d'une entrée par graphie et par langue dans un ensemble de lexiques
      *
-     * @Route("/search", name="api_entry_search", methods={"POST"})
+     * @Route("/search", name="api_entry_search", methods={"GET"})
      *
      * @OA\Response(response=200, description="success",
      *      @OA\JsonContent(type="array",
@@ -71,38 +71,33 @@ class ApiEntryController extends ApiBaseController
      * @OA\Response(response=401, description="error", @OA\JsonContent(type="string"))
      * @OA\Response(response=403, description="error", @OA\JsonContent(type="string"))
      * @OA\Response(response=500, description="error", @OA\JsonContent(type="string"))
-     * @OA\RequestBody(
-     *     required=true,
-     *     @OA\JsonContent(
-     *         required={"graphy", "language"},
-     *         @OA\Property(property="graphy", type="string", example="souris"),
-     *         @OA\Property(property="language", type="string", example="fr"),
-     *         @OA\Property(property="target_lex", type="array", description="Tableau des ids des lexiques où créer l'entrée",
-     *             example={3, 4},
-     *             @OA\Items(
-     *                 type="integer"
-     *             )
-     *         )
-     *     )
-     * )
+     *
+     * @OA\Parameter(name="graphy", required=true, in="query", @OA\Schema(type="string"))
+     * @OA\Parameter(name="language", required=true, in="query", @OA\Schema(type="string", example="en"))
+     * @OA\Parameter(name="target_lex", in="query", @OA\Schema(type="array", description="Tableau des ids des lexiques où créer l'entrée",
+     *     example={3, 4},
+     *     @OA\Items(type="integer")
+     * ))
+     *
      * @OA\Tag(name="Entries")
      * @Security(name="OAuth2")
      */
     public function search(Request $request, SerializerInterface $serializer): Response
     {
-        $data = json_decode($request->getContent(), true);
-        if (!$data) {
-            return $this->createJsonResponse(401, ['error' => sprintf("Json non valide")]);
+        $language = $request->get('language');
+        $graphy = $request->get('graphy');
+        if (!$language) {
+            return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour « language »")]);
         }
-        if ($missingFields = $this->getMissingFields($data, ['graphy', 'language'])) {
-            return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour: %s", implode(', ', $missingFields))]);
+        if (!$graphy) {
+            return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour « graphy »")]);
         }
 
         $lexicons = isset($data['target_lex']) ? $this->getLexicons($data['target_lex']) : [];
 
         $filter = [
-            'graphy'     => $data['graphy'],
-            'language'   => $data['language'],
+            'graphy'     => $graphy,
+            'language'   => $language,
             'lexicons'   => $lexicons,
         ];
 
diff --git a/src/Controller/ApiLogController.php b/src/Controller/ApiLogController.php
index 63be464..7cef640 100644
--- a/src/Controller/ApiLogController.php
+++ b/src/Controller/ApiLogController.php
@@ -77,67 +77,65 @@ class ApiLogController extends ApiBaseController
     /**
      * Recherche de logs par date ou user
      *
-     * @Route("/search", name="api_log_search", methods={"POST"})
+     * @Route("/search", name="api_log_search", methods={"GET"})
      *
      * @OA\Response(response=200, description="success", @OA\JsonContent(type="string"))
      * @OA\Response(response=401, description="error", @OA\JsonContent(type="string"))
      * @OA\Response(response=403, description="error", @OA\JsonContent(type="string"))
      * @OA\Response(response=500, description="error", @OA\JsonContent(type="string"))
-     * @OA\RequestBody(
-     *     required=true,
-     *     @OA\JsonContent(
-     *         @OA\Property(property="date", type="date"),
-     *         @OA\Property(property="category", type="string", example="update_comment OU update_discussion"),
-     *         @OA\Property(property="user_id", type="integer", example="4"),
-     *         @OA\Property(property="lexicon_id", type="integer", example="4"),
-     *         @OA\Property(property="entry_id", type="integer", example="4"),
-     *     )
-     * )
+     *
+     * @OA\Parameter(name="date", in="query", @OA\Schema(type="date", example="2023-01-09"))
+     * @OA\Parameter(name="category", in="query", @OA\Schema(type="string", example="update_comment OU update_discussion"))
+     * @OA\Parameter(name="user_id", in="query", @OA\Schema(type="integer"))
+     * @OA\Parameter(name="lexicon_id", in="query", @OA\Schema(type="integer"))
+     * @OA\Parameter(name="entry_id", in="query", @OA\Schema(type="integer"))
+     *
      * @OA\Tag(name="Logs")
      * @Security(name="OAuth2")
      */
     public function search(Request $request, SerializerInterface $serializer): Response
     {
-        $data = json_decode($request->getContent(), true);
-        if (!$data) {
-            return $this->createJsonResponse(401, ['error' => sprintf("Json non valide")]);
-        }
-        if (!isset($data['date']) && !isset($data['user_id']) && !isset($data['lexicon_id']) && !isset($data['entry_id'])) {
+        $date = $request->get('date');
+        $category = $request->get('category');
+        $userId = $request->get('user_id');
+        $lexiconId = $request->get('lexicon_id');
+        $entryId = $request->get('entry_id');
+        if (!$date && !$userId && !$lexiconId && !$entryId) {
             return $this->createJsonResponse(401, ['error' => sprintf("Veuillez spécifier au moins un paramètre de recherche parmi: date, user_id, lexicon_id, entry_id")]);
         }
-        if (($data['category'] ?? null) && !in_array($data['category'], Log::LOG_LIST_CATEGORIES)) {
-            return $this->createJsonResponse(401, ['error' => sprintf("La catégorie de log %s n'existe pas", $data['category'])]);
+        if (($category ?? null) && !in_array($category, Log::LOG_LIST_CATEGORIES)) {
+            return $this->createJsonResponse(401, ['error' => sprintf("La catégorie de log %s n'existe pas", $category)]);
         }
 
         $filter = [];
-        if ($data["lexicon_id"] ?? null) {
-            $lexicon = $this->doctrine->getRepository(Lexicon::class)->find($data['lexicon_id']);
+        if ($lexiconId ?? null) {
+            $lexicon = $this->doctrine->getRepository(Lexicon::class)->find($lexiconId);
             if (!$lexicon) {
-                return $this->createJsonResponse(401, ['error' => sprintf("Pas de lexique trouvé pour l'id %s", $data['lexicon_id'])]);
+                return $this->createJsonResponse(401, ['error' => sprintf("Pas de lexique trouvé pour l'id %s", $lexiconId)]);
             } else {
                 $filter['lexicon'] = $lexicon;
             }
         }
-        if ($data["entry_id"] ?? null) {
-            $entry = $this->doctrine->getRepository(Entry::class)->find($data['entry_id']);
+        if ($entryId ?? null) {
+            $entry = $this->doctrine->getRepository(Entry::class)->find($entryId);
             if (!$entry) {
-                return $this->createJsonResponse(401, ['error' => sprintf("Pas d'entrée trouvée pour l'id %s", $data['entry_id'])]);
+                return $this->createJsonResponse(401, ['error' => sprintf("Pas d'entrée trouvée pour l'id %s", $entryId)]);
             } else {
                 $filter['entry'] = $entry;
             }
         }
-        if ($data['date'] ?? null) {
-            $date = date_create_from_format('Y-m-d', $data['date']);
-            if ($date === false) {
-                return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une date au format aaaa-mm-jj pour le paramètre «date»")]);
+        if ($date ?? null) {
+            $dateFilter = date_create_from_format('Y-m-d', $date);
+            if ($dateFilter === false) {
+                return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une date au format aaaa-mm-jj pour le paramètre « date »")]);
             } else {
-                $filter['date'] = $date;
+                $filter['date'] = $dateFilter;
             }
         }
-        if ($data["user_id"] ?? null) {
-            $user = $this->doctrine->getRepository(User::class)->find($data['user_id']);
+        if ($userId ?? null) {
+            $user = $this->doctrine->getRepository(User::class)->find($userId);
             if (!$user) {
-                return $this->createJsonResponse(401, ['error' => sprintf("Pas d'utilisateur trouvé pour l'id %s", $data['user_id'])]);
+                return $this->createJsonResponse(401, ['error' => sprintf("Pas d'utilisateur trouvé pour l'id %s", $userId)]);
             } else {
                 $filter['user'] = $user;
             }
@@ -148,7 +146,7 @@ class ApiLogController extends ApiBaseController
 
         $logs = $this->doctrine->getRepository(Log::class)->search($filter);
 
-        $content = $serializer->serialize($logs, 'json', ['groups' => ["log:read"]]);
+        $content = $serializer->serialize($logs, 'json', ['groups' => ["log:read", "user:read"]]);
 
         return new JsonResponse($content, 200, [], true);
     }
diff --git a/src/Controller/ApiMetaInfoController.php b/src/Controller/ApiMetaInfoController.php
index 009a0b3..85a4019 100644
--- a/src/Controller/ApiMetaInfoController.php
+++ b/src/Controller/ApiMetaInfoController.php
@@ -102,7 +102,7 @@ class ApiMetaInfoController extends ApiBaseController
     /**
      * Recherche de metaInfos id graphie ou id de modèle méta information
      *
-     * @Route("/search", name="api_meta_info_search", methods={"POST"})
+     * @Route("/search", name="api_meta_info_search", methods={"GET"})
      *
      * @OA\Response(response=200, description="success",
      *      @OA\JsonContent(type="array",
@@ -111,38 +111,33 @@ class ApiMetaInfoController extends ApiBaseController
      * @OA\Response(response=401, description="error", @OA\JsonContent(type="string"))
      * @OA\Response(response=403, description="error", @OA\JsonContent(type="string"))
      * @OA\Response(response=500, description="error", @OA\JsonContent(type="string"))
-     * @OA\RequestBody(
-     *     required=true,
-     *     @OA\JsonContent(
-     *         @OA\Property(property="graphy_id", type="integer"),
-     *         @OA\Property(property="template_id", type="integer")
-     *     )
-     * )
+     *
+     * @OA\Parameter(name="graphy_id", in="query", @OA\Schema(type="integer"))
+     * @OA\Parameter(name="template_id", in="query", @OA\Schema(type="integer"))
+     *
      * @OA\Tag(name="MetaInfos")
      * @Security(name="OAuth2")
      */
     public function search(Request $request, SerializerInterface $serializer): Response
     {
-        $data = json_decode($request->getContent(), true);
-        if (!$data) {
-            return $this->createJsonResponse(401, ['error' => sprintf("Json non valide")]);
-        }
-        if (!isset($data['date']) && !isset($data['graphy_id']) && !isset($data['template_id'])) {
+        $graphyId = $request->get('graphy_id');
+        $templateId = $request->get('template_id');
+        if (!$graphyId && !$templateId) {
             return $this->createJsonResponse(401, ['error' => sprintf("Veuillez spécifier au moins un paramètre de recherche parmi: graphy_id, template_id")]);
         }
 
         $filter = [];
-        if ($data['graphy_id'] ?? null) {
-            $filter['graphy'] = $data['graphy_id'];
+        if ($graphyId ?? null) {
+            $filter['graphy'] = $graphyId;
         }
-        if ($data['template_id'] ?? null) {
-            $filter['metaInfoTemplate'] = $data['template_id'];
+        if ($templateId ?? null) {
+            $filter['metaInfoTemplate'] = $templateId;
         }
 
         $metaInfos = $this->doctrine->getRepository(MetaInfo::class)->findBy($filter, ['createdAt' => 'DESC']);
 
         $content = $serializer->serialize($metaInfos, 'json', [
-            'groups' => ["metaInfo:read", "user:read"],
+            'groups' => ["metaInfo:read", "user:read", "graphy:read"],
             'datetime_format' => 'Y-m-d h:i:s.u'
         ]);
 
diff --git a/src/Controller/ApiTraceController.php b/src/Controller/ApiTraceController.php
index 6767f7a..5e912e3 100644
--- a/src/Controller/ApiTraceController.php
+++ b/src/Controller/ApiTraceController.php
@@ -151,7 +151,7 @@ class ApiTraceController extends ApiBaseController
     /**
      * Recherche de traces par date ou user ou action ou origin
      *
-     * @Route("/search", name="api_trace_search", methods={"POST"})
+     * @Route("/search", name="api_trace_search", methods={"GET"})
      *
      * @OA\Response(response=200, description="success",
      *      @OA\JsonContent(type="array",
@@ -160,59 +160,57 @@ class ApiTraceController extends ApiBaseController
      * @OA\Response(response=401, description="error", @OA\JsonContent(type="string"))
      * @OA\Response(response=403, description="error", @OA\JsonContent(type="string"))
      * @OA\Response(response=500, description="error", @OA\JsonContent(type="string"))
-     * @OA\RequestBody(
-     *     required=true,
-     *     @OA\JsonContent(
-     *         @OA\Property(property="date", type="date"),
-     *         @OA\Property(property="date_client", type="date"),
-     *         @OA\Property(property="user_id", type="integer", example="4"),
-     *         @OA\Property(property="origin", type="string", example="Prisms"),
-     *         @OA\Property(property="action", type="string", example="action"),
-     *     )
-     * )
+     *
+     * @OA\Parameter(name="date", in="query", @OA\Schema(type="date", example="2023-01-09"))
+     * @OA\Parameter(name="date_client", in="query", @OA\Schema(type="date", example="2023-01-09"))
+     * @OA\Parameter(name="user_id", in="query", @OA\Schema(type="date", example="4"))
+     * @OA\Parameter(name="origin", in="query", @OA\Schema(type="date", example="Prisms"))
+     * @OA\Parameter(name="action", in="query", @OA\Schema(type="date", example="action"))
+     *
      * @OA\Tag(name="Traces")
      * @Security(name="OAuth2")
      */
     public function search(Request $request, SerializerInterface $serializer): Response
     {
-        $data = json_decode($request->getContent(), true);
-        if (!$data) {
-            return $this->createJsonResponse(401, ['error' => sprintf("Json non valide")]);
-        }
-        if (!isset($data['date']) && !isset($data['date_client']) && !isset($data['user_id']) && !isset($data['origin']) && !isset($data['action'])) {
-            return $this->createJsonResponse(401, ['error' => sprintf("Veuillez spécifier au moins un paramètre de recherche parmi: date, user_id, action, origin")]);
+        $date = $request->get('date');
+        $dateClient = $request->get('date_client');
+        $userId = $request->get('user_id');
+        $origin = $request->get('origin');
+        $action = $request->get('action');
+        if (!$date && !$dateClient && !$userId && !$origin && !$action) {
+            return $this->createJsonResponse(401, ['error' => sprintf("Veuillez spécifier au moins un paramètre de recherche parmi: date, date_client, user_id, action, origin")]);
         }
 
         $filter = [];
-        if ($data['date'] ?? null) {
-            $date = date_create_from_format('Y-m-d', $data['date']);
+        if ($date ?? null) {
+            $date = date_create_from_format('Y-m-d', $date);
             if ($date === false) {
                 return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une date au format aaaa-mm-jj pour le paramètre «date»")]);
             } else {
                 $filter['date'] = $date;
             }
         }
-        if ($data['date_client'] ?? null) {
-            $dateClient = date_create_from_format('Y-m-d', $data['date_client']);
+        if ($dateClient ?? null) {
+            $dateClient = date_create_from_format('Y-m-d', $dateClient);
             if ($dateClient === false) {
                 return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une date au format aaaa-mm-jj pour le paramètre «date client»")]);
             } else {
                 $filter['date_client'] = $dateClient;
             }
         }
-        if ($data["user_id"] ?? null) {
-            $user = $this->doctrine->getRepository(User::class)->find($data['user_id']);
+        if ($userId ?? null) {
+            $user = $this->doctrine->getRepository(User::class)->find($userId);
             if (!$user) {
-                return $this->createJsonResponse(401, ['error' => sprintf("Pas d'utilisateur trouvé pour l'id %s", $data['user_id'])]);
+                return $this->createJsonResponse(401, ['error' => sprintf("Pas d'utilisateur trouvé pour l'id %s", $userId)]);
             } else {
                 $filter['user'] = $user;
             }
         }
-        if ($data['origin'] ?? null) {
-            $filter['origin'] = $data['origin'];
+        if ($origin ?? null) {
+            $filter['origin'] = $origin;
         }
-        if ($data['action'] ?? null) {
-            $filter['action'] = $data['action'];
+        if ($action ?? null) {
+            $filter['action'] = $action;
         }
 
         $traces = $this->doctrine->getRepository(Trace::class)->search($filter);
diff --git a/src/Controller/ApiWiktionaryController.php b/src/Controller/ApiWiktionaryController.php
index 8e7f127..25600e8 100644
--- a/src/Controller/ApiWiktionaryController.php
+++ b/src/Controller/ApiWiktionaryController.php
@@ -26,7 +26,7 @@ class ApiWiktionaryController extends ApiBaseController
 {
 
     /**
-     * @Route("/search", name="api_wiktionary_search", methods={"POST"})
+     * @Route("/search", name="api_wiktionary_search", methods={"GET"})
      *
      * @OA\Response(
      *     response=200,
@@ -38,27 +38,23 @@ class ApiWiktionaryController extends ApiBaseController
      * @OA\Response(response=403, description="error", @OA\JsonContent(type="string"))
      * @OA\Response(response=500, description="error", @OA\JsonContent(type="string"))
      *
-     * @OA\RequestBody(
-     *     required=true,
-     *     @OA\JsonContent(
-     *       @OA\Property(property="graphy", type="string", example="green"),
-     *       @OA\Property(property="language", type="string", example="en")
-     *       )
-     *     )
-     * )
+     * @OA\Parameter(name="graphy", required=true, in="query", @OA\Schema(type="string"))
+     * @OA\Parameter(name="language", required=true, in="query", @OA\Schema(type="string", example="en"))
+     *
      * @OA\Tag(name="Wiktionary")
      * @Security(name="OAuth2")
      */
     public function searchWiktionary(Request $request)
     {
-        $data = json_decode($request->getContent(), true);
-        if (!$data) {
-            return $this->createJsonResponse(401, ['error' => sprintf("Json non valide")]);
+        $language = $request->get('language');
+        $graphy = $request->get('graphy');
+        if (!$language) {
+            return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour « language »")]);
         }
-        if ($missingFields = $this->getMissingFields($data, ['graphy', 'language'])) {
-            return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour: %s", implode(', ', $missingFields))]);
+        if (!$graphy) {
+            return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour « graphy »")]);
         }
-        $wikData = $this->wiktionaryManager->search($data['graphy'], $data['language']);
+        $wikData = $this->wiktionaryManager->search($graphy, $language);
 
         return new JsonResponse($wikData, 200, []);
     }
-- 
GitLab