diff --git a/src/Controller/ApiTraceController.php b/src/Controller/ApiTraceController.php index b811ecec51071300a310c3d97ab5d13583d53bba..67c63ae8bc80746aadc8e9a5536dc13418c1101a 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 *