<?php
namespace App\Controller\Front;
use App\Entity\UserFavorites;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
class FavoritesController extends AbstractController
{
private EntityManagerInterface $em;
public function __construct(
EntityManagerInterface $em
)
{
$this->em = $em;
}
/**
* @param Request $request
*
* @return JsonResponse
*/
public function addToFavorites( Request $request ): JsonResponse
{
$sku = $request->request->get( 'sku' );
$type = $request->request->get( 'type' );
if ( !$sku ) {
return new JsonResponse( [ 'success' => FALSE, 'message' => 'Sku non trouvé' ] );
}
$product = $this->em->getRepository( UserFavorites::class )->findOneBy( [
'sku' => $sku,
'user' => $this->getUser(),
] );
if ( !$product ) {
$userFavorite = new UserFavorites();
$userFavorite->setUser( $this->getUser() );
$userFavorite->setSku( $sku );
$userFavorite->setAddedDate( new DateTime() );
$userFavorite->setType( $type );
$this->em->persist( $userFavorite );
$this->em->flush();
}
return new JsonResponse( [ 'success' => TRUE, 'message' => 'Produit ' . $sku . ' ajouté aux favoris' ] );
}
/**
* @param Request $request
*
* @return JsonResponse
*/
public function removeFromFavorites( Request $request ): JsonResponse
{
$sku = $request->request->get( 'sku' );
if ( !$sku ) {
return new JsonResponse( [ 'success' => FALSE, 'message' => 'Sku non trouvé' ] );
}
$product = $this->em->getRepository( UserFavorites::class )->findOneBy( [
'sku' => $sku,
'user' => $this->getUser(),
] );
if ( $product ) {
$this->em->remove( $product );
$this->em->flush();
}
return new JsonResponse( [ 'success' => TRUE, 'message' => 'Produit ' . $sku . ' retiré des favoris' ] );
}
/**
* @param Request $request
*
* @return JsonResponse
*/
public function checkFavorite( Request $request ): JsonResponse
{
$sku = $request->query->get( 'sku' );
$user = $this->getUser();
$result = $this->em->getRepository( UserFavorites::class )->findOneBy( [ 'sku' => $sku, 'user' => $user ] );
if ( $result ) {
return new JsonResponse( [ 'isFavorite' => TRUE ] );
} else {
return new JsonResponse( [ 'isFavorite' => FALSE ] );
}
}
/**
* @param Request $request
*
* @return JsonResponse
*/
public function checkFavorites( Request $request ): JsonResponse
{
$skus = $request->request->get( 'skus' );
$user = $this->getUser();
$skusInFavorites = $this->em->getRepository( UserFavorites::class )
->findBy( [ 'sku' => $skus, 'user' => $user ] )
;
$isFavoriteMap = [];
if ( !empty( $skus ) ) {
foreach ( $skus as $sku ) {
$isFavoriteMap[ $sku ] = FALSE;
}
}
if ( !empty( $skusInFavorites ) ) {
foreach ( $skusInFavorites as $favorite ) {
$isFavoriteMap[ $favorite->getSku() ] = TRUE;
}
}
return new JsonResponse( [ 'isFavorite' => $isFavoriteMap ] );
}
}