feat(SitePerformance): Ajoute la collecte des métriques web vitales.
🐛 fix(caddy): Corrige la redirection du script Trustpilot.
📦 chore: Ajoute web-vitals comme dépendance et adapte package.json.
```
This commit is contained in:
Serreau Jovann
2026-01-27 23:36:11 +01:00
parent 63ee6b71c6
commit ff9ae0e8d4
9 changed files with 265 additions and 3 deletions

View File

@@ -7,6 +7,7 @@ use App\Entity\AccountResetPasswordRequest;
use App\Entity\Customer;
use App\Entity\CustomerTracking;
use App\Entity\Product;
use App\Entity\SitePerformance;
use App\Form\RequestPasswordConfirmType;
use App\Form\RequestPasswordRequestType;
use App\Logger\AppLogger;
@@ -62,6 +63,35 @@ class ReserverController extends AbstractController
'products' => $products
]);
}
#[Route('/reservation/web-vitals', name: 'reservation_web-vitals', methods: ['POST'])]
public function webVitals(Request $request, EntityManagerInterface $em): Response
{
$data = json_decode($request->getContent(), true);
if (!$data || !isset($data['name'], $data['value'])) {
return new Response('Invalid data', Response::HTTP_BAD_REQUEST);
}
// On vérifie si cet ID de métrique existe déjà pour éviter les doublons
// (web-vitals peut renvoyer plusieurs fois la même métrique si elle s'affine)
$existing = $em->getRepository(SitePerformance::class)->findOneBy(['metricId' => $data['id']]);
$perf = $existing ?? new SitePerformance();
$perf->setName($data['name']);
$perf->setValue((float)$data['value']);
$perf->setPath($data['path'] ?? '/');
$perf->setMetricId($data['id'] ?? null);
$perf->setUpdatedAt(new \DateTime());
if (!$existing) {
$em->persist($perf);
}
$em->flush();
return new Response('', Response::HTTP_NO_CONTENT);
}
#[Route('/reservation/umami', name: 'reservation_umami', methods: ['POST'])]
public function umami(