src/Form/EventSubscriber/MaxFirmware/MaxFirmwareFileSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\EventSubscriber\MaxFirmware;
  4. use App\Entity\MaxFirmware;
  5. use App\Service\S3Service;
  6. use Psr\Log\LoggerInterface;
  7. use Sentry;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Form\FormError;
  10. use Symfony\Component\Form\FormEvent;
  11. use Symfony\Component\Form\FormEvents;
  12. use Symfony\Component\HttpFoundation\File\UploadedFile;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. class MaxFirmwareFileSubscriber implements EventSubscriberInterface
  15. {
  16.     public function __construct(
  17.         private S3Service $s3Service,
  18.         private TranslatorInterface $translator,
  19.         private LoggerInterface $logger,
  20.     ) {
  21.     }
  22.     public static function getSubscribedEvents(): array
  23.     {
  24.         return [FormEvents::POST_SUBMIT => 'onPostSubmit'];
  25.     }
  26.     public function onPostSubmit(FormEvent $event): void
  27.     {
  28.         $form $event->getForm();
  29.         $entity $event->getData();
  30.         if (! $entity instanceof MaxFirmware) {
  31.             return;
  32.         }
  33.         if (! $form->isValid()) {
  34.             return;
  35.         }
  36.         $file $form->get('firmwareFile')->getData();
  37.         if (! $file instanceof UploadedFile) {
  38.             return;
  39.         }
  40.         $entity->setFirmwareFile($file);
  41.         $result $this->s3Service->uploadFile($file'firmware'$entity->getVersion());
  42.         if ($result['status'] !== 'successful' || empty($result['awsUrl'])) {
  43.             $errorMsg $result['errorMsg'] ?? 'Unknown S3 upload error';
  44.             $this->logger->error('Firmware upload failed: ' $errorMsg);
  45.             Sentry\captureMessage('Firmware upload failed for version ' $entity->getVersion() . ': ' $errorMsg);
  46.             $form->addError(new FormError(
  47.                 $this->translator->trans($errorMsg),
  48.             ));
  49.             return;
  50.         }
  51.         $entity->setLink($result['awsUrl']);
  52.     }
  53. }