From c793969b4f89f440b33fcca8afee048e7f4c4e43 Mon Sep 17 00:00:00 2001 From: pfleu <fleutotp@gmail.com> Date: Mon, 23 Jan 2023 18:47:21 +0100 Subject: [PATCH] =?UTF-8?q?API=20:=20Ajout=20endpoint=20cr=C3=A9ation=20de?= =?UTF-8?q?=20traces=20par=20lot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Controller/ApiTraceController.php | 64 +++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/src/Controller/ApiTraceController.php b/src/Controller/ApiTraceController.php index b811ece..67c63ae 100644 --- a/src/Controller/ApiTraceController.php +++ b/src/Controller/ApiTraceController.php @@ -84,6 +84,70 @@ class ApiTraceController extends ApiBaseController return $this->createJsonResponse(200); } + /** + * + * @Route("/create-batch", name="api_trace_create_batch", methods={"POST"}) + * + * @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="trace_list", type="array", description="Tableau de traces", + * example={{"origin": "Prisms", "action": "Partie gagnée", "additional_info": {"info1": "example"}, "timestamp": "2012-08-18 11:14:15.889342"}, {"origin": "Prisms", "action": "Match nul", "additional_info": {"info2": "other"}, "timestamp": "2012-07-08 11:14:15.889342"}}, + * @OA\Items( + * type="object" + * ) + * ) + * ) + * ) + * @OA\Tag(name="Traces") + * @Security(name="OAuth2") + */ + public function createBatchTrace(Request $request): Response + { + $data = json_decode($request->getContent(), true); + if (!$data) { + return $this->createJsonResponse(401, ['error' => sprintf("Json non valide")]); + } + if ($missingFields = $this->getMissingFields($data, ['trace_list'])) { + return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour: %s", implode(', ', $missingFields))]); + } + + $traceList = $data['trace_list']; + foreach ($traceList as $traceData) { + + if ($missingFields = $this->getMissingFields($traceData, ['origin', 'action'])) { + return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour: %s", implode(', ', $missingFields))]); + } + if ($traceData['timestamp'] ?? null) { + $date = new \DateTime($traceData['timestamp']); + if ($date === false) { + return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une date au format aaaa-mm-jj hh:mm:ss.dddddd pour le paramètre «timestamp»")]); + } + } + + $trace = new Trace(); + $trace->setCreatedBy($this->getUser()); + $trace->setAction($traceData['action']); + $trace->setOrigin($traceData['origin']); + if ($traceData['additional_info'] ?? null) { + $trace->setAdditionalInfo($traceData['additional_info']); + } + if ($date ?? null) { + $trace->setTimestamp($date); + } + $this->doctrine->getManager()->persist($trace); + $this->doctrine->getManager()->flush(); + + $this->success[] = sprintf("Trace id %s créée.", $trace->getId()); + } + + return $this->createJsonResponse(200); + } + /** * Recherche de traces par date ou user ou action ou origin * -- GitLab