Skip to content
Snippets Groups Projects
Commit 3261dc16 authored by Pierre Fleutot's avatar Pierre Fleutot
Browse files

API Traces : ajout param date_client pour recherche de traces. CreatedAt et...

API Traces : ajout param date_client pour recherche de traces. CreatedAt et Timestamp sont tous les deux en millisecondes. Modif format Serializer pour afficher les millisecondes dans le json de résulta de recherche de trace
parent d5844564
No related branches found
No related tags found
No related merge requests found
...@@ -44,6 +44,7 @@ class ApiTraceController extends ApiBaseController ...@@ -44,6 +44,7 @@ class ApiTraceController extends ApiBaseController
* @OA\Property(property="origin", type="string", example="Prisms"), * @OA\Property(property="origin", type="string", example="Prisms"),
* @OA\Property(property="action", type="string", example="partie annulée"), * @OA\Property(property="action", type="string", example="partie annulée"),
* @OA\Property(property="additional_info", type="object"), * @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") * @OA\Tag(name="Traces")
...@@ -58,6 +59,12 @@ class ApiTraceController extends ApiBaseController ...@@ -58,6 +59,12 @@ class ApiTraceController extends ApiBaseController
if ($missingFields = $this->getMissingFields($data, ['origin', 'action'])) { if ($missingFields = $this->getMissingFields($data, ['origin', 'action'])) {
return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour: %s", implode(', ', $missingFields))]); 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 = new Trace();
$trace->setCreatedBy($this->getUser()); $trace->setCreatedBy($this->getUser());
...@@ -66,6 +73,9 @@ class ApiTraceController extends ApiBaseController ...@@ -66,6 +73,9 @@ class ApiTraceController extends ApiBaseController
if ($data['additional_info'] ?? null) { if ($data['additional_info'] ?? null) {
$trace->setAdditionalInfo($data['additional_info']); $trace->setAdditionalInfo($data['additional_info']);
} }
if ($date ?? null) {
$trace->setTimestamp($date);
}
$this->doctrine->getManager()->persist($trace); $this->doctrine->getManager()->persist($trace);
$this->doctrine->getManager()->flush(); $this->doctrine->getManager()->flush();
...@@ -87,6 +97,7 @@ class ApiTraceController extends ApiBaseController ...@@ -87,6 +97,7 @@ class ApiTraceController extends ApiBaseController
* required=true, * required=true,
* @OA\JsonContent( * @OA\JsonContent(
* @OA\Property(property="date", type="date"), * @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="user_id", type="integer", example="4"),
* @OA\Property(property="origin", type="string", example="Prisms"), * @OA\Property(property="origin", type="string", example="Prisms"),
* @OA\Property(property="action", type="string", example="action"), * @OA\Property(property="action", type="string", example="action"),
...@@ -101,7 +112,7 @@ class ApiTraceController extends ApiBaseController ...@@ -101,7 +112,7 @@ class ApiTraceController extends ApiBaseController
if (!$data) { if (!$data) {
return $this->createJsonResponse(401, ['error' => sprintf("Json non valide")]); 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")]); 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 ...@@ -114,6 +125,14 @@ class ApiTraceController extends ApiBaseController
$filter['date'] = $date; $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) { if ($data["user_id"] ?? null) {
$user = $this->doctrine->getRepository(User::class)->find($data['user_id']); $user = $this->doctrine->getRepository(User::class)->find($data['user_id']);
if (!$user) { if (!$user) {
...@@ -131,7 +150,10 @@ class ApiTraceController extends ApiBaseController ...@@ -131,7 +150,10 @@ class ApiTraceController extends ApiBaseController
$traces = $this->doctrine->getRepository(Trace::class)->search($filter); $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); return new JsonResponse($content, 200, [], true);
} }
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Controller; namespace App\Controller;
use App\Entity\Entry; use App\Entity\Entry;
use App\Entity\Trace;
use App\Entity\User; use App\Entity\User;
use App\Manager\WiktionaryManager; use App\Manager\WiktionaryManager;
use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ManagerRegistry;
......
...@@ -23,7 +23,7 @@ class Trace ...@@ -23,7 +23,7 @@ class Trace
/** /**
* @Groups({"trace:read"}) * @Groups({"trace:read"})
* @ORM\Column(type="datetime_immutable") * @ORM\Column(type="datetimemicroseconds")
*/ */
private $createdAt; private $createdAt;
...@@ -73,18 +73,6 @@ class Trace ...@@ -73,18 +73,6 @@ class Trace
return $this->id; 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 public function getOrigin(): ?string
{ {
return $this->origin; return $this->origin;
...@@ -144,4 +132,16 @@ class Trace ...@@ -144,4 +132,16 @@ class Trace
return $this; return $this;
} }
public function getCreatedAt()
{
return $this->createdAt;
}
public function setCreatedAt($createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
} }
...@@ -31,6 +31,12 @@ class TraceRepository extends ServiceEntityRepository ...@@ -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) { if ($filter['user'] ?? null) {
$qb->andWhere('t.createdBy = :user') $qb->andWhere('t.createdBy = :user')
->setParameter('user', $filter['user']) ->setParameter('user', $filter['user'])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment