<?php
namespace App\EventSubscriber\App;
use App\Entity\UsageEvent;
use App\Event\RatingEvent;
use App\Service\UsageEventService;
use JanusHercules\DatawarehouseIntegration\Domain\Entity\BusinessEvent;
use JanusHercules\DatawarehouseIntegration\Domain\Service\BusinessEventDomainService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
readonly class RatingEventSubscriber implements EventSubscriberInterface
{
public function __construct(
private BusinessEventDomainService $businessEventDomainService,
private UsageEventService $usageEventService
) {
}
public static function getSubscribedEvents()
{
return [
RatingEvent::class => 'onRating',
];
}
public function onRating(RatingEvent $event)
{
$user = $event->getUser();
$ratingQuality = $event->getRatingQuality();
if ($ratingQuality === 'positive') {
$this->usageEventService->eventHasOccurredForUser($user, UsageEvent::EVENT_TYPE_USER_RATES_POSITIVE);
$this->usageEventService->eventHasOccurredForUser($user, UsageEvent::EVENT_TYPE_USER_HAS_RATED);
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RATED_POSITIVE,
$user
);
}
if ($ratingQuality === 'negative') {
$this->usageEventService->eventHasOccurredForUser($user, UsageEvent::EVENT_TYPE_USER_HAS_RATED);
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RATED_NEGATIVE,
$user
);
}
}
}