<?php
namespace App\Controller;
use App\Entity\Properties;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
/**
* @Route("/favori")
*/
class FavoriController extends AbstractController
{
/**
* @Route("/favoris", name="app_favoris")
*/
public function show(Request $request, EntityManagerInterface $entityManager): Response
{
$cookieValue = $request->cookies->get('favoris');
$identifiants = json_decode($cookieValue, true);
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('p')
->from(Properties::class, 'p')
->where($queryBuilder->expr()->in('p.id', ':identifiants'))
->setParameter('identifiants', $identifiants);
$properties = $queryBuilder->getQuery()->getResult();
return $this->render(
'home/favoris.html.twig',
["properties" => $properties]
);
}
/**
* @Route("/app_favori_update", name="app_favori_update", methods={"POST"})
*/
public function updateFavorisNumber(Request $request): Response
{
// Récupérer les données JSON envoyées par la requête
$data = json_decode($request->getContent(), true);
// Assurez-vous que les clés propertyId et isAddition existent dans les données
if (isset($data['propertyId']) && isset($data['isAddition'])) {
// Récupérer l'ID de la propriété
$propertyId = $data['propertyId'];
// Récupérer la propriété depuis la base de données
$entityManager = $this->getDoctrine()->getManager();
$property = $entityManager->getRepository(Properties::class)->find($propertyId);
if (!$property) {
// Si la propriété n'est pas trouvée, répondre avec un message d'erreur
return new JsonResponse(['message' => 'La propriété avec l\'ID ' . $propertyId . ' n\'existe pas.'], Response::HTTP_NOT_FOUND);
}
// Mettre à jour la propriété favoritNumber
$favorisNumber = $property->getFavoritNumber();
// Si c'est une addition, augmenter le nombre de favoris
if ($data['isAddition']) {
$favorisNumber++;
} else if($property->getFavoritNumber() > 0){
// Sinon, réduire le nombre de favoris
$favorisNumber--;
}
// Mettre à jour la propriété favoritNumber dans la base de données
$property->setFavoritNumber($favorisNumber);
$entityManager->flush();
// Répondre avec un message de succès
return new JsonResponse(['message' => 'Nombre de favoris de la propriété mis à jour avec succès.'], Response::HTTP_OK);
}
// Si la clé propertyId ou isAddition est absente dans les données JSON, répondre avec un message d'erreur
return new JsonResponse(['message' => 'La clé propertyId ou isAddition est manquante.'], Response::HTTP_BAD_REQUEST);
}
}