<?php
namespace App\EventSubscriber;
use App\Event\Profile\ConfirmationRequest\ProfileModerationRejected;
use App\Event\Profile\ProfileDataChanged;
use App\Event\Profile\ProfileEvent;
use App\Event\Profile\ProfileWasDeleted;
use App\Event\Profile\ProfileWasHidden;
use App\Event\Profile\ProfileWasPlacedOnAdBoard;
use App\Event\Profile\ProfileWasRemovedFromAdBoard;
use App\Message\UpdateRotationMessage;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\MessageBusInterface;
readonly class RotationServiceSubscriber implements EventSubscriberInterface
{
public function __construct(private MessageBusInterface $bus)
{
}
// Вызывать при любом изменении анкеты, изменении тарифа размещения или добавлении в листинг
public function onChange(ProfileEvent $event): void
{
$caused = get_class($event);
$this->bus->dispatch(UpdateRotationMessage::place($caused, $event->getProfile()->getId()));
}
// Вызывать при удалении анкеты из листинга
public function onDelete(ProfileEvent $event): void
{
$caused = get_class($event);
$this->bus->dispatch(UpdateRotationMessage::delete($caused, $event->getProfile()->getId()));
}
public static function getSubscribedEvents(): iterable
{
return [
ProfileWasRemovedFromAdBoard::NAME => ['onDelete', -110],
ProfileWasHidden::NAME => ['onDelete', -110],
ProfileWasDeleted::NAME => ['onDelete', -110],
ProfileModerationRejected::NAME => ['onDelete', -110],
ProfileDataChanged::NAME => ['onChange', -100],
ProfileWasPlacedOnAdBoard::NAME => ['onChange', -100],
];
}
}