src/Subscriber/Payment/Purchase/PurchaseMemberContentSubscriber.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\Payment\Purchase;
  3. use App\Event\Payment\PurchaseCreatedEvent;
  4. use App\Lib\Purchase\ContentPurchasable;
  5. use App\Lib\Purchase\ImageContentPurchasable;
  6. use App\Service\Amateur\BalanceAmateurService;
  7. use App\Service\Content\ContentService;
  8. use App\Service\Content\MemberContentService;
  9. use App\Service\User\MemberRankingService;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. class PurchaseMemberContentSubscriber implements EventSubscriberInterface
  12. {
  13.     protected MemberContentService $service;
  14.     protected ContentService $contentService;
  15.     protected MemberRankingService $memberRankingService;
  16.     protected BalanceAmateurService $balanceAmateurService;
  17.     /**
  18.      * PurchaseMemberContentSubscriber constructor.
  19.      */
  20.     public function __construct(MemberContentService $serviceContentService $contentService,
  21.         MemberRankingService $rankingServiceBalanceAmateurService $balanceAmateurService)
  22.     {
  23.         $this->service $service;
  24.         $this->contentService $contentService;
  25.         $this->memberRankingService $rankingService;
  26.         $this->balanceAmateurService $balanceAmateurService;
  27.     }
  28.     public static function getSubscribedEvents(): array
  29.     {
  30.         return [
  31.             PurchaseCreatedEvent::class => [
  32.                 ['onContentPurchaseCreateMemberContent'0],
  33.                 ['onContentPurchaseUpdateSellersMemberRanking'1],
  34.             ],
  35.         ];
  36.     }
  37.     /**
  38.      * @throws \Doctrine\ORM\ORMException
  39.      * @throws \Doctrine\ORM\OptimisticLockException
  40.      */
  41.     public function onContentPurchaseCreateMemberContent(PurchaseCreatedEvent $event)
  42.     {
  43.         if (!$event->getPurchasable() instanceof ContentPurchasable) {
  44.             return;
  45.         }
  46.         $purchase $event->getPurchase();
  47.         $purchasable $event->getPurchasable();
  48.         $content $this->contentService->getContentById($purchase->getReferenceId());
  49.         if ($purchasable instanceof ImageContentPurchasable) {
  50.             $memberContent $this->service->createByMemberAndContent($purchase->getBuyer(), $content$purchasable->getImagesetImageId());
  51.         } else {
  52.             $memberContent $this->service->createByMemberAndContent($purchase->getBuyer(), $content);
  53.         }
  54.         $memberContent->setPurchase($purchase);
  55.         $memberContent->setCoins($event->getPurchasable()->getCoinAmount());
  56.         $this->service->storeMemberContent($memberContent);
  57.     }
  58.     /**
  59.      * @throws \Doctrine\ORM\ORMException
  60.      * @throws \Doctrine\ORM\OptimisticLockException
  61.      */
  62.     public function onContentPurchaseUpdateSellersMemberRanking(PurchaseCreatedEvent $event)
  63.     {
  64.         if (!$event->getPurchasable() instanceof ContentPurchasable) {
  65.             return;
  66.         }
  67.         $purchase $event->getPurchase();
  68.         $amateur $purchase->getSeller();
  69.         if (!$amateur->getIsAmateur()) {
  70.             return;
  71.         }
  72.         $ranking $this->memberRankingService->getRankingByMember($amateur);
  73.         $ranking->setAmateurScore($this->balanceAmateurService->getSumBalancesForMemberSinceNumberOfDays($amateur30));
  74.         $this->memberRankingService->storeRanking($ranking);
  75.     }
  76. }