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