<?php namespace App\Messenger\Handler; use App\Entity\Quest; use App\Messenger\Message\QuestMessage; use App\Messenger\Objects\QuestsEnd; use Doctrine\Persistence\ManagerRegistry; use Symfony\Component\Messenger\Attribute\AsMessageHandler; use Symfony\Component\Messenger\MessageBusInterface; #[AsMessageHandler] class QuestEndMessageHandler { public function __construct( protected MessageBusInterface $bus, private ManagerRegistry $doctrine, private string $fromEmail, ) { } /** * Обработка письма из очереди * * @param QuestsEnd $message * * @return void */ public function __invoke(QuestsEnd $message): void { $quests = $this->doctrine->getRepository(Quest::class)->getEndQuests(); foreach ($quests as $quest) { $appointments = $quest->getAppointments(); $questName = $quest->getName(); foreach ($appointments as $appointment) { $user = $appointment->getRelatedUser(); if ($user) { $userName = $user->getFullName(); $questMessage = new QuestMessage( $this->fromEmail, $user->getEmail(), "Квест \"{$questName}\" прошёл!", <<<HTML <div> Здравствуйте, {$userName}! </div> <div> Квест {$questName} уже прошёл, какие у Вас остались впечатления? </div> <div> Оставьте отзыв на сайте </div> HTML ); $this->bus->dispatch($questMessage); } } } } }