src/Subscriber/User/LikeSubscriber.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\User;
  3. use App\Event\User\MemberDislikedEvent;
  4. use App\Event\User\MemberLikedEvent;
  5. use App\Service\MemberService;
  6. use App\Service\User\LikeService;
  7. use App\Service\User\MemberRankingService;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class LikeSubscriber implements EventSubscriberInterface
  10. {
  11.     /**
  12.      * @var MemberService
  13.      */
  14.     protected $rankingService;
  15.     /**
  16.      * @var LikeService
  17.      */
  18.     protected $likeService;
  19.     /**
  20.      * LikeSubscriber constructor.
  21.      */
  22.     public function __construct(MemberRankingService $rankingServiceLikeService $likeService)
  23.     {
  24.         $this->rankingService $rankingService;
  25.         $this->likeService $likeService;
  26.     }
  27.     public static function getSubscribedEvents(): array
  28.     {
  29.         return [
  30.             MemberLikedEvent::class => [
  31.                 ['onMemberLikeUpdateGlobalLikeCount'0],
  32.             ],
  33.             MemberDislikedEvent::class => [
  34.                 ['onMemberDislikeLikeUpdateGlobalLikeCount'0],
  35.             ],
  36.         ];
  37.     }
  38.     /**
  39.      * @throws \Doctrine\ORM\ORMException
  40.      * @throws \Doctrine\ORM\OptimisticLockException
  41.      */
  42.     public function onMemberDislikeLikeUpdateGlobalLikeCount(MemberDislikedEvent $event)
  43.     {
  44.         $member $event->getTarget();
  45.         $globalLike $this->likeService->getOrCreateGlobalMemberLike($member);
  46.         $globalLike->setCounter($globalLike->getCounter() - 1);
  47.         $this->likeService->storeEntity($globalLike);
  48.         $ranking $this->rankingService->getRankingByMember($member);
  49.         $ranking->setLikeCount($globalLike->getCounter());
  50.         $this->rankingService->storeRanking($ranking);
  51.     }
  52.     /**
  53.      * @throws \Doctrine\ORM\ORMException
  54.      * @throws \Doctrine\ORM\OptimisticLockException
  55.      */
  56.     public function onMemberLikeUpdateGlobalLikeCount(MemberLikedEvent $event)
  57.     {
  58.         $member $event->getTarget();
  59.         $globalLike $this->likeService->getOrCreateGlobalMemberLike($member);
  60.         $globalLike->setCounter($globalLike->getCounter() + 1);
  61.         $this->likeService->storeEntity($globalLike);
  62.         $ranking $this->rankingService->getRankingByMember($member);
  63.         $ranking->setLikeCount($globalLike->getCounter());
  64.         $this->rankingService->storeRanking($ranking);
  65.     }
  66. }