| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- <?php
- declare(strict_types=1);
- namespace App\Message\Handler;
- use App\Message\Message\OrganizationDeletion;
- use App\Service\Organization\OrganizationFactory;
- use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
- use Symfony\Component\Mailer\MailerInterface;
- use Symfony\Component\Messenger\Attribute\AsMessageHandler;
- use Symfony\Component\Mime\Address;
- use Symfony\Component\Mime\Email as SymfonyEmail;
- #[AsMessageHandler(priority: 1)]
- readonly class OrganizationDeletionHandler
- {
- public function __construct(
- private OrganizationFactory $organizationFactory,
- private MailerInterface $symfonyMailer,
- private string $opentalentMailReport,
- ) {
- }
- /**
- * @throws \Throwable
- * @throws TransportExceptionInterface
- */
- public function __invoke(OrganizationDeletion $organizationDeletionCommand): void
- {
- $organizationCreationRequest = $organizationDeletionCommand->getOrganizationDeletionRequest();
- try {
- $this->organizationFactory->delete($organizationCreationRequest);
- $this->sendMail(
- $organizationCreationRequest->getSendConfirmationEmailAt() ?? $this->opentalentMailReport,
- 'Organization deleted',
- 'The organization n° '.$organizationCreationRequest->getOrganizationId().' has been deleted successfully.',
- );
- } catch (\Exception $e) {
- $this->sendMail(
- $organizationCreationRequest->getSendConfirmationEmailAt() ?? $this->opentalentMailReport,
- 'Organization deletion : an error occurred',
- 'An error occurred while deleting the new organization : \n'.$e->getMessage()
- );
- throw $e;
- }
- }
- /**
- * @throws TransportExceptionInterface
- */
- private function sendMail(
- string $to,
- string $subject,
- string $content,
- ): void
- {
- $symfonyMail = (new SymfonyEmail())
- ->from($this->opentalentMailReport)
- ->replyTo($this->opentalentMailReport)
- ->returnPath(Address::create($this->opentalentMailReport))
- ->to($to)
- ->subject($subject)
- ->text($content);
- $this->symfonyMailer->send($symfonyMail);
- }
- }
|