<?php
namespace CityCampaign\Subscriber;
use CityCampaign\Events\CampaignMissionActionEvent;
use CityCampaign\Service\Campaigns\CheckInMissionActionService;
use CityCampaign\Service\Campaigns\StampMissionActionService;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Throwable;
class CampaignSubscriber implements EventSubscriberInterface
{
private LoggerInterface $logger;
private CheckInMissionActionService $checkInMissionActionService;
private StampMissionActionService $stampMissionActionService;
public function __construct(
LoggerInterface $logger,
CheckInMissionActionService $checkInMissionActionService,
StampMissionActionService $stampMissionActionService
)
{
$this->logger = $logger;
$this->checkInMissionActionService = $checkInMissionActionService;
$this->stampMissionActionService = $stampMissionActionService;
}
public static function getSubscribedEvents(): array
{
// Return the events to listen to as array like this: <event to listen to> => <method to execute>
return [
CampaignMissionActionEvent::EVENT_NAME => [['onCampaignMissionAction', 0]],
];
}
public function onCampaignMissionAction(CampaignMissionActionEvent $event)
{
try {
$campaignType = $event->getCampaignType();
if ('check-in' === $campaignType) {
$this->missionCheckIn($event->getId());
}
if ('stamp' === $campaignType) {
$this->missionStamp($event->getId());
}
} catch (Throwable $exception) {
$this->logger->error($exception->getMessage());
}
}
private function missionCheckIn($campaignId)
{
$this->checkInMissionActionService->createCheckInMission($campaignId);
}
private function missionStamp($campaignId)
{
$this->stampMissionActionService->createStampMission($campaignId);
}
}