src/EventSubscriber/ShopEventSubscriber.php line 52

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\UserTransaction;
  4. use App\Event\BoxPurchasedEvent;
  5. use App\Event\CreditsAddedEvent;
  6. use App\Event\CreditsPurchasedEvent;
  7. use App\Event\ItemDuplicateEvent;
  8. use App\Event\ItemPurchasedEvent;
  9. use App\Service\NotificationService;
  10. use App\Service\UserTransactionManager;
  11. use App\Service\UserWalletManager;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. class ShopEventSubscriber implements EventSubscriberInterface
  15. {
  16.   private $notificationService;
  17.   private $em;
  18.   private $userWalletManager;
  19.   private $userTransactionManager;
  20.   public function __construct(
  21.     NotificationService $notificationService,
  22.     EntityManagerInterface $entityManager,
  23.     UserWalletManager $userWalletManager,
  24.     UserTransactionManager $userTransactionManager
  25.   )
  26.   {
  27.     $this->notificationService $notificationService;
  28.     $this->em $entityManager;
  29.     $this->userWalletManager $userWalletManager;
  30.     $this->userTransactionManager $userTransactionManager;
  31.   }
  32.   public function onItemPurchased(ItemPurchasedEvent $event)
  33.   {
  34.     $this->userWalletManager->substractValue(
  35.       $event->getUserItem()->getItem()->getPrice(),
  36.       $event->getUserItem()->getUser()
  37.     );
  38.     $this->userTransactionManager->create(
  39.       null,
  40.       $event->getUserItem()->getUser(),
  41.       (-1)*$event->getUserItem()->getItem()->getPrice(),
  42.       UserTransaction::TYPE_ITEM_PURCHASED
  43.     );
  44.   }
  45.   public function onItemDuplicate(ItemDuplicateEvent $event)
  46.   {
  47.     $this->userWalletManager->addValue(
  48.       $event->getItem()->getPrice(),
  49.       $event->getUser()
  50.     );
  51.     $this->userTransactionManager->create(
  52.       null,
  53.       $event->getUser(),
  54.       $event->getItem()->getPrice(),
  55.       UserTransaction::TYPE_ITEM_DUPLICATED
  56.     );
  57.   }
  58.   public function onBoxPurchased(BoxPurchasedEvent $event)
  59.   {
  60.     $this->userWalletManager->substractValue(
  61.       $event->getBox()->getPrice(),
  62.       $event->getUser()
  63.     );
  64.     $this->userTransactionManager->create(
  65.       null,
  66.       $event->getUser(),
  67.       (-1)*$event->getBox()->getPrice(),
  68.       UserTransaction::TYPE_BOX_PURCHASED
  69.     );
  70.   }
  71.   public function onCreditsPurchased(CreditsPurchasedEvent $event)
  72.   {
  73.     $this->userWalletManager->addValue(
  74.       $event->getValue(),
  75.       $event->getUser()
  76.     );
  77.     $this->userTransactionManager->create(
  78.       null,
  79.       $event->getUser(),
  80.       $event->getValue(),
  81.       UserTransaction::TYPE_CREDITS_PURCHASED
  82.     );
  83.   }
  84.   public function onCreditsAdded(CreditsAddedEvent $event)
  85.   {
  86.     $this->userWalletManager->addValue(
  87.       $event->getValue(),
  88.       $event->getUser()
  89.     );
  90.     $this->userTransactionManager->create(
  91.       null,
  92.       $event->getUser(),
  93.       $event->getValue(),
  94.       UserTransaction::TYPE_CREDITS_ADDED
  95.     );
  96.   }
  97.   public static function getSubscribedEvents()
  98.   {
  99.     return [
  100.       ItemPurchasedEvent::NAME => 'onItemPurchased',
  101.       ItemDuplicateEvent::NAME => 'onItemDuplicate',
  102.       BoxPurchasedEvent::NAME => 'onBoxPurchased',
  103.       CreditsPurchasedEvent::NAME => 'onCreditsPurchased',
  104.       CreditsAddedEvent::NAME => 'onCreditsAdded',
  105.     ];
  106.   }
  107. }