src/EventSubscriber/RotationServiceSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Event\Profile\ConfirmationRequest\ProfileModerationRejected;
  4. use App\Event\Profile\ConfirmationRequest\ProfileModerationPassed;
  5. use App\Event\Profile\ProfileDataChanged;
  6. use App\Event\Profile\ProfileEvent;
  7. use App\Event\Profile\ProfileWasDeleted;
  8. use App\Event\Profile\ProfileWasHidden;
  9. use App\Event\Profile\ProfileWasPlacedOnAdBoard;
  10. use App\Event\Profile\ProfileWasRemovedFromAdBoard;
  11. use App\Message\UpdateRotationMessage;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Messenger\MessageBusInterface;
  14. readonly class RotationServiceSubscriber implements EventSubscriberInterface
  15. {
  16.     public function __construct(private MessageBusInterface $bus)
  17.     {
  18.     }
  19.     // Вызывать при любом изменении анкеты, изменении тарифа размещения или добавлении в листинг
  20.     public function onChange(ProfileEvent $event): void
  21.     {
  22.         $caused = get_class($event);
  23.         $profile = $event->getProfile();
  24.         $eligible = $profile->isEligibleToShowByModeration()
  25.             && $profile->isActive()
  26.             && !$profile->isHidden()
  27.             && !$profile->isDeleted();
  28.         $message = $eligible
  29.             ? UpdateRotationMessage::place($caused, $profile->getId())
  30.             : UpdateRotationMessage::delete($caused, $profile->getId());
  31.         $this->bus->dispatch($message);
  32.     }
  33.     public function onModerationPassed(ProfileModerationPassed $event): void
  34.     {
  35.         $this->onChange($event);
  36.     }
  37.     // Вызывать при удалении анкеты из листинга
  38.     public function onDelete(ProfileEvent $event): void
  39.     {
  40.         $caused = get_class($event);
  41.         $this->bus->dispatch(UpdateRotationMessage::delete($caused, $event->getProfile()->getId()));
  42.     }
  43.     public static function getSubscribedEvents(): iterable
  44.     {
  45.         return [
  46.             ProfileWasRemovedFromAdBoard::NAME => ['onDelete', -110],
  47.             ProfileWasHidden::NAME => ['onDelete', -110],
  48.             ProfileWasDeleted::NAME => ['onDelete', -110],
  49.             ProfileModerationRejected::NAME => ['onDelete', -110],
  50.             ProfileModerationPassed::NAME => ['onModerationPassed', -110],
  51.             ProfileDataChanged::NAME => ['onChange', -100],
  52.             ProfileWasPlacedOnAdBoard::NAME => ['onChange', -100],
  53.         ];
  54.     }
  55. }