src/Controller/Front/FavoritesController.php line 115

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\UserFavorites;
  4. use DateTime;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. class FavoritesController extends AbstractController
  10. {
  11. private EntityManagerInterface $em;
  12. public function __construct(
  13. EntityManagerInterface $em
  14. )
  15. {
  16. $this->em = $em;
  17. }
  18. /**
  19. * @param Request $request
  20. *
  21. * @return JsonResponse
  22. */
  23. public function addToFavorites( Request $request ): JsonResponse
  24. {
  25. $sku = $request->request->get( 'sku' );
  26. $type = $request->request->get( 'type' );
  27. if ( !$sku ) {
  28. return new JsonResponse( [ 'success' => FALSE, 'message' => 'Sku non trouvé' ] );
  29. }
  30. $product = $this->em->getRepository( UserFavorites::class )->findOneBy( [
  31. 'sku' => $sku,
  32. 'user' => $this->getUser(),
  33. ] );
  34. if ( !$product ) {
  35. $userFavorite = new UserFavorites();
  36. $userFavorite->setUser( $this->getUser() );
  37. $userFavorite->setSku( $sku );
  38. $userFavorite->setAddedDate( new DateTime() );
  39. $userFavorite->setType( $type );
  40. $this->em->persist( $userFavorite );
  41. $this->em->flush();
  42. }
  43. return new JsonResponse( [ 'success' => TRUE, 'message' => 'Produit ' . $sku . ' ajouté aux favoris' ] );
  44. }
  45. /**
  46. * @param Request $request
  47. *
  48. * @return JsonResponse
  49. */
  50. public function removeFromFavorites( Request $request ): JsonResponse
  51. {
  52. $sku = $request->request->get( 'sku' );
  53. if ( !$sku ) {
  54. return new JsonResponse( [ 'success' => FALSE, 'message' => 'Sku non trouvé' ] );
  55. }
  56. $product = $this->em->getRepository( UserFavorites::class )->findOneBy( [
  57. 'sku' => $sku,
  58. 'user' => $this->getUser(),
  59. ] );
  60. if ( $product ) {
  61. $this->em->remove( $product );
  62. $this->em->flush();
  63. }
  64. return new JsonResponse( [ 'success' => TRUE, 'message' => 'Produit ' . $sku . ' retiré des favoris' ] );
  65. }
  66. /**
  67. * @param Request $request
  68. *
  69. * @return JsonResponse
  70. */
  71. public function checkFavorite( Request $request ): JsonResponse
  72. {
  73. $sku = $request->query->get( 'sku' );
  74. $user = $this->getUser();
  75. $result = $this->em->getRepository( UserFavorites::class )->findOneBy( [ 'sku' => $sku, 'user' => $user ] );
  76. if ( $result ) {
  77. return new JsonResponse( [ 'isFavorite' => TRUE ] );
  78. } else {
  79. return new JsonResponse( [ 'isFavorite' => FALSE ] );
  80. }
  81. }
  82. /**
  83. * @param Request $request
  84. *
  85. * @return JsonResponse
  86. */
  87. public function checkFavorites( Request $request ): JsonResponse
  88. {
  89. $skus = $request->request->get( 'skus' );
  90. $user = $this->getUser();
  91. $skusInFavorites = $this->em->getRepository( UserFavorites::class )
  92. ->findBy( [ 'sku' => $skus, 'user' => $user ] )
  93. ;
  94. $isFavoriteMap = [];
  95. if ( !empty( $skus ) ) {
  96. foreach ( $skus as $sku ) {
  97. $isFavoriteMap[ $sku ] = FALSE;
  98. }
  99. }
  100. if ( !empty( $skusInFavorites ) ) {
  101. foreach ( $skusInFavorites as $favorite ) {
  102. $isFavoriteMap[ $favorite->getSku() ] = TRUE;
  103. }
  104. }
  105. return new JsonResponse( [ 'isFavorite' => $isFavoriteMap ] );
  106. }
  107. }