<?php
namespace App\EventSubscriber;
use App\Entity\UserMovePoint;
use App\Events\UserMovePointEvent;
use App\Repository\UserMovePointRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class UserMovePointSubscriber implements EventSubscriberInterface
{
private EntityManagerInterface $em;
private UserMovePointRepository $er;
public function __construct(
EntityManagerInterface $em,
UserMovePointRepository $er
) {
$this->em = $em;
$this->er = $er;
}
public static function getSubscribedEvents(): array
{
return [
UserMovePointEvent::PUBLISHED => 'onPublished',
];
}
public function onPublished(UserMovePointEvent $event): void
{
$ump = $event->getUserMovePoint();
$user = $ump->getUser();
if ($ump->getQtyIce()) {
$sum = $this->er->sumQtyBy($user, UserMovePoint::QTY_ICE);
$user->setNumTotalIce($sum);
}
if ($ump->getQtyFeatured()) {
$sum = $this->er->sumQtyBy($user, UserMovePoint::QTY_FEATURED);
$user->setNumTotalFeatured($sum);
}
if ($ump->getQtyLike()) {
$sum = $this->er->sumQtyBy($user, UserMovePoint::QTY_LIKE);
$user->setNumTotalLike($sum);
}
if ($ump->getQtySuperice()) {
$sum = $this->er->sumQtyBy($user, UserMovePoint::QTY_SUPERICE);
$user->setNumTotalSuperice($sum);
}
if ($ump->getFeaturedExpirationDate()) {
$user->setFeaturedExpirationDate(null);
$user->setIsFeatured(false);
$max = $this->er->maxFeaturedExpirationDateBy($user);
if ($max) {
$user->setFeaturedExpirationDate($max);
$user->setIsFeatured(true);
}
}
if ($ump->getInvisibleExpirationDate()) {
$user->setInvisibleExpirationDate(null);
// $user->setIsEnabledInvisible(false);
$max = $this->er->maxInvisibleExpirationDateBy($user);
if ($max) {
$user->setInvisibleExpirationDate($max);
// $user->setIsEnabledInvisible(true);
}
}
if ($ump->getIsUnlimitedRewind()) {
$user->setIsUnlimitedRewind(true);
}
if ($ump->getIsUnlimitedLike()) {
$user->setIsUnlimitedLike(true);
}
$this->em->persist($user);
$this->em->flush();
}
}