src/EventSubscriber/AchievementSubscriber.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Event\Achievement\AchievementDiplomaEvent;
  4. use App\Event\Achievement\AchievementExamEvent;
  5. use App\Event\Achievement\AchievementHomeworkEvent;
  6. use App\Event\Achievement\AchievementInternshipEvent;
  7. use App\Event\Achievement\AchievementRatingScoreEvent;
  8. use App\Message\AchievementMessage;
  9. use App\Service\AchievementService;
  10. use App\Service\InternshipService;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\Messenger\MessageBusInterface;
  13. class AchievementSubscriber implements EventSubscriberInterface
  14. {
  15.     private MessageBusInterface $messageBus;
  16.     private AchievementService $achievementService;
  17.     private InternshipService $internshipService;
  18.     public function __construct(
  19.         MessageBusInterface $messageBus,
  20.         AchievementService $achievementService,
  21.         InternshipService $internshipService
  22.     ) {
  23.         $this->messageBus              $messageBus;
  24.         $this->achievementService      $achievementService;
  25.         $this->internshipService $internshipService;
  26.     }
  27.     public static function getSubscribedEvents()
  28.     {
  29.         return [
  30.             AchievementHomeworkEvent::class    => 'onHomeworkDone',
  31.             AchievementDiplomaEvent::class     => 'onDiploma',
  32.             AchievementExamEvent::class        => 'onExam',
  33.             AchievementRatingScoreEvent::class => 'onRatingScore',
  34.             AchievementInternshipEvent::class  => 'onInternshipDone',
  35.         ];
  36.     }
  37.     public function onHomeworkDone(AchievementHomeworkEvent $event)
  38.     {
  39.         $this->messageBus->dispatch(new AchievementMessage($event->getStudent()->getId(), $event->getType()));
  40.     }
  41.     public function onDiploma(AchievementDiplomaEvent $event)
  42.     {
  43.         $this->messageBus->dispatch(new AchievementMessage($event->getStudent()->getId(), $event->getType()));
  44.     }
  45.     public function onExam(AchievementExamEvent $event)
  46.     {
  47.         $this->messageBus->dispatch(new AchievementMessage($event->getStudent()->getId(), $event->getType()));
  48.     }
  49.     public function onInternshipDone(AchievementInternshipEvent $event)
  50.     {
  51.         $internshipDoneCount $this->internshipService->countUsedByUser($event->getStudent());
  52.         $this->achievementService->checkAndGrantInternshipAchievements($event->getStudent(), $internshipDoneCount);
  53.     }
  54.     public function onRatingScore(AchievementRatingScoreEvent $event)
  55.     {
  56.         $this->achievementService->checkAndGrantScoreAchievements($event->getStudent(), $event->getScore());
  57.     }
  58. }