<?php
declare(strict_types=1);
namespace App\EventSubscriber;
use App\Entity\Product;
use App\Event\SubscriptionCreatedEvent;
use App\Service\Gamification\DailyMissionAllocator;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class SubscriptionSubscriber implements EventSubscriberInterface
{
private LoggerInterface $logger;
private DailyMissionAllocator $dailyMissionAllocator;
public function __construct(
LoggerInterface $logger,
DailyMissionAllocator $dailyMissionAllocator
) {
$this->logger = $logger;
$this->dailyMissionAllocator = $dailyMissionAllocator;
}
public static function getSubscribedEvents(): array
{
return [
SubscriptionCreatedEvent::class => [
['onLicenseSubscriptionCreated', 10],
],
];
}
public function onLicenseSubscriptionCreated(SubscriptionCreatedEvent $event): void
{
$subscription = $event->getSubscription();
if (null === $subscription->getProduct() || Product::PRODUCT_TYPE_LICENSE !== $subscription->getProduct()->getType()) {
return;
}
$member = $subscription->getMember();
if (null === $member) {
$this->logger->warning('Member not found for subscription ' . $subscription->getId());
return;
}
$this->dailyMissionAllocator->assignDailyMissions([$member]);
}
}