<?php
namespace App\GamificationBundle\Service;
use App\GamificationBundle\Enum\CustomEventEnum;
use App\GamificationBundle\Message\CustomEventOccurredMessage;
use App\GamificationBundle\Message\GamificationEventOccurredMessage;
use App\GamificationBundle\Message\QuestProgressUpdatedMessage;
use App\GamificationBundle\Message\RewardRedeemedMessage;
use App\GamificationBundle\Message\UserCoinsBalanceUpdatedMessage;
use Symfony\Component\Messenger\MessageBusInterface;
class GamificationNotificationService
{
public function __construct(
private readonly MessageBusInterface $messageBus
) {}
/**
* @param int $userId
* @param int $coinsBalance
* @param int $coinsBalanceChange
* @param array $questDetails
* @return void
*/
public function notifyAboutUpdatedBalance(
int $userId,
int $coinsBalance,
int $coinsBalanceChange,
array $questDetails
): void
{
$message = new UserCoinsBalanceUpdatedMessage(
$userId,
$coinsBalance,
$coinsBalanceChange,
$questDetails
);
$this->messageBus->dispatch($message);
}
/**
* @param int $userId
* @param string $type
* @param array $quest
* @return void
*/
public function notifyAboutUpdatedQuest(
int $userId,
string $type,
array $quest
): void
{
$message = new QuestProgressUpdatedMessage(
$userId,
$type,
$quest
);
$this->messageBus->dispatch($message);
}
/**
* @param int $userId
* @param array $reward
* @return void
*/
public function notifyAboutRedeemedReward(
int $userId,
array $reward
): void
{
$message = new RewardRedeemedMessage(
$userId,
$reward
);
$this->messageBus->dispatch($message);
}
/**
* @param int $userId
* @return void
*/
public function notifyAboutUniqueNicknameSet(int $userId): void
{
$message = new CustomEventOccurredMessage(
$userId, [
'type' => CustomEventEnum::UNIQUE_NICKNAME_SET,
'body' => []
]
);
$this->messageBus->dispatch($message);
}
/**
* @param int $userId
* @param int $casinoId
* @return void
*/
public function notifyAboutCasinoReviewCreated(int $userId, int $casinoId): void
{
$message = new CustomEventOccurredMessage(
$userId, [
'type' => CustomEventEnum::CASINO_REVIEW_CREATED,
'body' => [
'casinoId' => $casinoId
]
]
);
$this->messageBus->dispatch($message);
}
/**
* @param int $userId
* @param int $casinoId
* @param int $eventType
* @return void
*/
public function notifyAboutCasinoPostbackTracked(
int $userId,
int $casinoId,
int $eventType
): void
{
$message = new CustomEventOccurredMessage(
$userId, [
'type' => CustomEventEnum::CASINO_POSTBACK_TRACKED,
'body' => [
'casinoId' => $casinoId,
'event' => $eventType
]
]
);
$this->messageBus->dispatch($message);
}
/**
* @param int $userId
* @param string $visitorFingerprint
* @return void
*/
public function notifyAboutSharedLinkVisited(
int $userId,
string $visitorFingerprint
): void
{
$message = new CustomEventOccurredMessage(
$userId, [
'type' => CustomEventEnum::SHARED_LINK_VISITED,
'body' => [
'visitorId' => $visitorFingerprint
]
]
);
$this->messageBus->dispatch($message);
}
/**
* @param int $userId
* @param string $email
* @param string $eventName
* @return void
*/
public function notifyAboutGamificationEventOccurred(int $userId, string $email, string $eventName): void
{
$message = new GamificationEventOccurredMessage(
$userId,
$email,
$eventName
);
$this->messageBus->dispatch($message);
}
}