feat(ReserverController): Ajoute vérification de disponibilité produit.
🛠️ refactor(BackupCommand): Utilise DatabaseDumper et ZipArchiver.
 feat(GitSyncLogCommand): Utilise Gemini pour messages plus clairs.
 feat(GenerateVideoThumbsCommand): Utilise VideoThumbnailer service.
 feat(AppWarmupImagesCommand): Utilise StorageInterface pour warmup.
🔒️ security(nelmio_security): Renforce la sécurité avec des en-têtes.
🔧 chore(caddy): Améliore la configuration de Caddy pour la performance.
🐛 fix(makefile): Corrige les commandes de test.
🧪 chore(.env.test): Supprime la ligne vide à la fin du fichier.
🔧 chore(doctrine): Active native_lazy_objects.
🔧 chore(cache): Ajoute un cache system.
```
This commit is contained in:
Serreau Jovann
2026-01-30 17:58:12 +01:00
parent a6fc8fdf3b
commit 36a51c5a54
34 changed files with 1879 additions and 164 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\ProductReserve;
use App\Entity\SitePerformance;
use App\Form\RequestPasswordConfirmType;
use App\Form\RequestPasswordRequestType;
@@ -15,6 +16,7 @@ use App\Repository\CustomerRepository;
use App\Repository\CustomerTrackingRepository;
use App\Repository\FormulesRepository;
use App\Repository\ProductRepository;
use App\Repository\ProductReserveRepository;
use App\Service\Mailer\Mailer;
use App\Service\ResetPassword\Event\ResetPasswordConfirmEvent;
use App\Service\ResetPassword\Event\ResetPasswordEvent;
@@ -66,6 +68,47 @@ class ReserverController extends AbstractController
'formules' => $formules,
]);
}
#[Route('/produit/check', name: 'produit_check', methods: ['GET', 'POST'])]
public function productCheck(Request $request, ProductReserveRepository $productReserveRepository, ProductRepository $productRepository): Response
{
$productId = $request->get('id');
$startStr = $request->get('start');
$endStr = $request->get('end');
if (!$productId && $request->isMethod('POST')) {
$payload = $request->getPayload();
$productId = $payload->get('id');
$startStr = $payload->get('start');
$endStr = $payload->get('end');
}
if (!$productId || !$startStr || !$endStr) {
return new JsonResponse(['error' => 'Missing parameters'], Response::HTTP_BAD_REQUEST);
}
$product = $productRepository->find($productId);
if (!$product) {
return new JsonResponse(['error' => 'Product not found'], Response::HTTP_NOT_FOUND);
}
try {
$start = new \DateTimeImmutable($startStr);
$end = new \DateTimeImmutable($endStr);
} catch (\Exception $e) {
return new JsonResponse(['error' => 'Invalid date format'], Response::HTTP_BAD_REQUEST);
}
$reserve = new ProductReserve();
$reserve->setProduct($product);
$reserve->setStartAt($start);
$reserve->setEndAt($end);
$isAvailable = $productReserveRepository->checkAvailability($reserve);
return new JsonResponse(['dispo' => $isAvailable]);
}
#[Route('/web-vitals', name: 'reservation_web-vitals', methods: ['POST'])]
public function webVitals(Request $request, EntityManagerInterface $em): Response
{