diff --git a/src/Controller/ApiTraceController.php b/src/Controller/ApiTraceController.php index 049767c2056d004058c2a2da2342b1ac65a192d9..b811ecec51071300a310c3d97ab5d13583d53bba 100644 --- a/src/Controller/ApiTraceController.php +++ b/src/Controller/ApiTraceController.php @@ -44,6 +44,7 @@ class ApiTraceController extends ApiBaseController * @OA\Property(property="origin", type="string", example="Prisms"), * @OA\Property(property="action", type="string", example="partie annulée"), * @OA\Property(property="additional_info", type="object"), + * @OA\Property(property="timestamp", type="string", example="2012-07-08 11:14:15.889342"), * ) * ) * @OA\Tag(name="Traces") @@ -58,6 +59,12 @@ class ApiTraceController extends ApiBaseController if ($missingFields = $this->getMissingFields($data, ['origin', 'action'])) { return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour: %s", implode(', ', $missingFields))]); } + if ($data['timestamp'] ?? null) { + $date = new \DateTime($data['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()); @@ -66,6 +73,9 @@ class ApiTraceController extends ApiBaseController if ($data['additional_info'] ?? null) { $trace->setAdditionalInfo($data['additional_info']); } + if ($date ?? null) { + $trace->setTimestamp($date); + } $this->doctrine->getManager()->persist($trace); $this->doctrine->getManager()->flush(); @@ -87,6 +97,7 @@ class ApiTraceController extends ApiBaseController * 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"), @@ -101,7 +112,7 @@ class ApiTraceController extends ApiBaseController if (!$data) { return $this->createJsonResponse(401, ['error' => sprintf("Json non valide")]); } - if (!isset($data['date']) && !isset($data['user_id']) && !isset($data['origin']) && !isset($data['action'])) { + 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")]); } @@ -114,6 +125,14 @@ class ApiTraceController extends ApiBaseController $filter['date'] = $date; } } + if ($data['date_client'] ?? null) { + $dateClient = date_create_from_format('Y-m-d', $data['date_client']); + 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 (!$user) { @@ -131,7 +150,10 @@ class ApiTraceController extends ApiBaseController $traces = $this->doctrine->getRepository(Trace::class)->search($filter); - $content = $serializer->serialize($traces, 'json', ['groups' => ["trace:read"]]); + $content = $serializer->serialize($traces, 'json', [ + 'groups' => ["trace:read"], + 'datetime_format' => 'Y-m-d h:i:s.u' + ]); return new JsonResponse($content, 200, [], true); } diff --git a/src/Controller/IndexController.php b/src/Controller/IndexController.php index 3b300249958d6a8d80f14d75dde5c3aa34fcba75..c3d9541a1057599739c3810ca77d9c189f8a0368 100644 --- a/src/Controller/IndexController.php +++ b/src/Controller/IndexController.php @@ -3,6 +3,7 @@ namespace App\Controller; use App\Entity\Entry; +use App\Entity\Trace; use App\Entity\User; use App\Manager\WiktionaryManager; use Doctrine\Persistence\ManagerRegistry; diff --git a/src/Entity/Trace.php b/src/Entity/Trace.php index f813bd88f354bcd0b443f0c358a9193fcd00ea84..663a15131119ae816937289af0bad423a47ab513 100644 --- a/src/Entity/Trace.php +++ b/src/Entity/Trace.php @@ -23,7 +23,7 @@ class Trace /** * @Groups({"trace:read"}) - * @ORM\Column(type="datetime_immutable") + * @ORM\Column(type="datetimemicroseconds") */ private $createdAt; @@ -73,18 +73,6 @@ class Trace return $this->id; } - public function getCreatedAt(): ?\DateTimeImmutable - { - return $this->createdAt; - } - - public function setCreatedAt(\DateTimeImmutable $createdAt): self - { - $this->createdAt = $createdAt; - - return $this; - } - public function getOrigin(): ?string { return $this->origin; @@ -144,4 +132,16 @@ class Trace return $this; } + + public function getCreatedAt() + { + return $this->createdAt; + } + + public function setCreatedAt($createdAt): self + { + $this->createdAt = $createdAt; + + return $this; + } } diff --git a/src/Repository/TraceRepository.php b/src/Repository/TraceRepository.php index fcb0e3b121e729485e24443d4098e005ea3d2460..a5a9e352713f2bf1cb9053127fb97527549c4b55 100644 --- a/src/Repository/TraceRepository.php +++ b/src/Repository/TraceRepository.php @@ -31,6 +31,12 @@ class TraceRepository extends ServiceEntityRepository ; } + if ($filter['date_client'] ?? null) { + $qb->andWhere('DATE(t.timestamp) = DATE(:date_client)') + ->setParameter('date_client', $filter['date_client']) + ; + } + if ($filter['user'] ?? null) { $qb->andWhere('t.createdBy = :user') ->setParameter('user', $filter['user'])