feat(UtmEvent): Ajoute le tracking Umami des utilisateurs connectés.

Ajoute l'identification des utilisateurs Umami et enregistre la session.
Implémente une bannière de consentement pour les cookies et gère l'état.
```
This commit is contained in:
Serreau Jovann
2026-01-27 20:24:02 +01:00
parent 52e92b4230
commit 454b748973
13 changed files with 485 additions and 114 deletions

View File

@@ -5,11 +5,13 @@ namespace App\Controller;
use App\Entity\Account;
use App\Entity\AccountResetPasswordRequest;
use App\Entity\Customer;
use App\Entity\CustomerTracking;
use App\Entity\Product;
use App\Form\RequestPasswordConfirmType;
use App\Form\RequestPasswordRequestType;
use App\Logger\AppLogger;
use App\Repository\CustomerRepository;
use App\Repository\CustomerTrackingRepository;
use App\Repository\ProductRepository;
use App\Service\Mailer\Mailer;
use App\Service\ResetPassword\Event\ResetPasswordConfirmEvent;
@@ -60,6 +62,47 @@ class ReserverController extends AbstractController
'products' => $products
]);
}
#[Route('/reservation/umami', name: 'reservation_umami', methods: ['POST'])]
public function umami(
Request $request,
CustomerTrackingRepository $customerTrackingRepository,
EntityManagerInterface $em
): Response {
/** @var Customer $user */
$user = $this->getUser();
if (!$user) {
return new JsonResponse(['error' => 'User not found'], Response::HTTP_UNAUTHORIZED);
}
$data = json_decode($request->getContent(), true);
$umamiSessionId = $data['umami_session'] ?? null;
if (!$umamiSessionId) {
return new JsonResponse(['error' => 'No session provided'], Response::HTTP_BAD_REQUEST);
}
// On cherche si un tracking existe déjà pour cet ID Umami
$track = $customerTrackingRepository->findOneBy(['trackId' => $umamiSessionId]);
if (!$track) {
$track = new CustomerTracking();
$track->setTrackId($umamiSessionId);
$track->setCreateAT(new \DateTime()); // Utilise Immutable si possible
$track->setCustomer($user);
$em->persist($track);
} else {
// Si le track existe déjà mais n'était pas lié à l'utilisateur
if ($track->getCustomer() !== $user) {
$track->setCustomer($user);
}
}
$em->flush();
return new JsonResponse(['status' => 'success']);
}
#[Route('/reservation/catalogue', name: 'reservation_catalogue')]
public function revervationCatalogue(ProductRepository $productRepository): Response
{