src/App/EventSubscriber/App/RatingEventSubscriber.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\App;
  3. use App\Entity\UsageEvent;
  4. use App\Event\RatingEvent;
  5. use App\Service\UsageEventService;
  6. use JanusHercules\DatawarehouseIntegration\Domain\Entity\BusinessEvent;
  7. use JanusHercules\DatawarehouseIntegration\Domain\Service\BusinessEventDomainService;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. readonly class RatingEventSubscriber implements EventSubscriberInterface
  10. {
  11. public function __construct(
  12. private BusinessEventDomainService $businessEventDomainService,
  13. private UsageEventService $usageEventService
  14. ) {
  15. }
  16. public static function getSubscribedEvents()
  17. {
  18. return [
  19. RatingEvent::class => 'onRating',
  20. ];
  21. }
  22. public function onRating(RatingEvent $event)
  23. {
  24. $user = $event->getUser();
  25. $ratingQuality = $event->getRatingQuality();
  26. if ($ratingQuality === 'positive') {
  27. $this->usageEventService->eventHasOccurredForUser($user, UsageEvent::EVENT_TYPE_USER_RATES_POSITIVE);
  28. $this->usageEventService->eventHasOccurredForUser($user, UsageEvent::EVENT_TYPE_USER_HAS_RATED);
  29. $this->businessEventDomainService->writeNewEvent(
  30. BusinessEvent::EVENT_TYPE_RATED_POSITIVE,
  31. $user
  32. );
  33. }
  34. if ($ratingQuality === 'negative') {
  35. $this->usageEventService->eventHasOccurredForUser($user, UsageEvent::EVENT_TYPE_USER_HAS_RATED);
  36. $this->businessEventDomainService->writeNewEvent(
  37. BusinessEvent::EVENT_TYPE_RATED_NEGATIVE,
  38. $user
  39. );
  40. }
  41. }
  42. }