src/EventSubscriber/Contest/ContestDeclinedEventSubscriber.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Contest;
  3. use App\Entity\Notification;
  4. use App\Entity\Transaction;
  5. use App\Event\Contest\ContestDeclinedEvent;
  6. use App\Factory\TransactionFactory;
  7. use App\Helper\PlayerHelper;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class ContestDeclinedEventSubscriber implements EventSubscriberInterface
  11. {
  12.     public function __construct(
  13.         private EntityManagerInterface $entityManager, private PlayerHelper $playerHelper,
  14.         private TransactionFactory $transactionFactory
  15.     ) {
  16.     }
  17.     public function onContestDeclined(ContestDeclinedEvent $contestDeclinedEvent): void
  18.     {
  19.         $contest $contestDeclinedEvent->getContest();
  20.         $player $contestDeclinedEvent->getPlayer();
  21.         $notification = (new Notification())
  22.             ->setType(Notification::CONTEST_DECLINED_TYPE)
  23.             ->setContest($contest)
  24.             ->setPlayer($contest->getCreatedBy())
  25.             ->setMessage(sprintf(
  26.                 'Le joueur %s a décliné votre défi sur %s et vous avez été remboursé.',
  27.                 /* @phpstan-ignore-next-line */
  28.                 $player->getUser()->getUsername(),
  29.                 $contest->getGame()->getName()
  30.             ))
  31.         ;
  32.         $this->entityManager->persist($notification);
  33.         $this->playerHelper->updateActivity($playerContestDeclinedEvent::class);
  34.         // the creator gets refunded
  35.         $this->transactionFactory
  36.             ->forPlayer($contest->getCreatedBy())
  37.             ->givePs($contest->getBet())
  38.             ->because(Transaction::CONTEST_DECLINED_TYPE)
  39.             ->save()
  40.         ;
  41.         $this->entityManager->flush();
  42.     }
  43.     public static function getSubscribedEvents(): array
  44.     {
  45.         return [
  46.             ContestDeclinedEvent::class => 'onContestDeclined',
  47.         ];
  48.     }
  49. }