sender = new Address($mailerSenderEmail, $mailerSenderName); } /** * @throws TransportExceptionInterface * @throws \Symfony\Component\Notifier\Exception\TransportExceptionInterface * @throws \Throwable */ public function __invoke(OrderDomain $message): void { /** @var WatchList $watchList */ $watchList = $this->watchListRepository->findOneBy(['token' => $message->watchListToken]); /** @var Domain $domain */ $domain = $this->domainRepository->findOneBy(['ldhName' => $message->ldhName]); $connector = $watchList->getConnector(); if (null !== $connector && $domain->getDeleted()) { $this->logger->notice('Watchlist {watchlist} is linked to connector {connector}. A purchase attempt will be made for domain name {ldhName} with provider {provider}.', [ 'watchlist' => $message->watchListToken, 'connector' => $connector->getId(), 'ldhName' => $message->ldhName, 'provider' => $connector->getProvider()->value, ]); try { $provider = $connector->getProvider(); if (null === $provider) { throw new \Exception('Provider not found'); } $connectorProviderClass = $provider->getConnectorProvider(); /** @var AbstractProvider $connectorProvider */ $connectorProvider = new $connectorProviderClass($connector->getAuthData(), $this->client, $this->cacheItemPool, $this->kernel); $connectorProvider->orderDomain($domain, $this->kernel->isDebug()); $notification = (new DomainOrderNotification($this->sender, $domain, $connector)); $this->mailer->send($notification->asEmailMessage(new Recipient($watchList->getUser()->getEmail()))->getMessage()); SendDomainEventNotifHandler::sendChatNotification($watchList, $notification, $this->logger); $this->statService->incrementStat('stats.domain.purchased'); } catch (\Throwable $exception) { $this->logger->warning('Unable to complete purchase. An error message is sent to user {username}.', [ 'username' => $watchList->getUser()->getUserIdentifier(), ]); $notification = (new DomainOrderErrorNotification($this->sender, $domain)); $this->mailer->send($notification->asEmailMessage(new Recipient($watchList->getUser()->getEmail()))->getMessage()); SendDomainEventNotifHandler::sendChatNotification($watchList, $notification, $this->logger); $this->statService->incrementStat('stats.domain.purchase.failed'); throw $exception; } } } }