docGeneratorTemplateRepository = $docGeneratorTemplateRepository; $this->entityManager = $entityManager; $this->generator = $generator; $this->logger = $logger; $this->storedObjectRepository = $storedObjectRepository; $this->userRepository = $userRepository; } public function __invoke(RequestGenerationMessage $message) { if (null === $template = $this->docGeneratorTemplateRepository->find($message->getTemplateId())) { throw new \RuntimeException('template not found: ' . $message->getTemplateId()); } if (null === $destinationStoredObject = $this->storedObjectRepository->find($message->getDestinationStoredObjectId())) { throw new \RuntimeException('destination stored object not found : ' . $message->getDestinationStoredObjectId()); } if ($destinationStoredObject->getGenerationTrialsCounter() >= self::AUTHORIZED_TRIALS) { throw new UnrecoverableMessageHandlingException('maximum number of retry reached'); } $creator = $this->userRepository->find($message->getCreatorId()); $destinationStoredObject->addGenerationTrial(); $this->entityManager->createQuery('UPDATE '.StoredObject::class.' s SET s.generationTrialsCounter = s.generationTrialsCounter + 1 WHERE s.id = :id') ->setParameter('id', $destinationStoredObject->getId()) ->execute(); $this->generator->generateDocFromTemplate( $template, $message->getEntityId(), $message->getContextGenerationData(), $destinationStoredObject, false, null, $creator ); $this->logger->info(self::LOG_PREFIX.'Request generation finished', [ 'template_id' => $message->getTemplateId(), 'destination_stored_object' => $message->getDestinationStoredObjectId(), 'duration_int' => (new \DateTimeImmutable('now'))->getTimestamp() - $message->getCreatedAt()->getTimestamp(), ]); } }