src/EventListener/VoucherUploadSubscriber.php line 68

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Atd\Supplier\Atd\Voucher\Service\VoucherService;
  4. use App\Atd\Utilities\HttpClientResponse;
  5. use App\enum\Events;
  6. use App\Event\VoucherUploadEvent;
  7. use App\Event\VoucherUploadFailEvent;
  8. use App\Event\VoucherUploadSuccessEvent;
  9. use Psr\EventDispatcher\EventDispatcherInterface;
  10. use Psr\Log\LoggerInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. class VoucherUploadSubscriber implements EventSubscriberInterface
  13. {
  14.     public function __construct(
  15.         private readonly VoucherService $voucherService,
  16.         private readonly LoggerInterface $logger,
  17.         private readonly EventDispatcherInterface $eventDispatcher
  18.     ) {
  19.     }
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             Events::VOUCHER_UPLOAD_TRIGGER => 'onVoucherUploadTriggered',
  24.             Events::VOUCHER_UPLOAD_SUCCESS => 'onUploadSucceeded',
  25.             Events::VOUCHER_UPLOAD_FAIL => 'onUploadFailed',
  26.         ];
  27.     }
  28.     /**
  29.      * @throws \Throwable
  30.      */
  31.     public function onVoucherUploadTriggered(VoucherUploadEvent $event): void
  32.     {
  33.         $voucherDto $event->getVoucherDto();
  34.         $voucherFileId $voucherDto->getMeta()['voucher_id'];
  35.         $this->logger->info(sprintf('Uploading Voucher File ID [%s]'$voucherFileId));
  36.         try {
  37.             /** @var HttpClientResponse $response */
  38.             $response $this->voucherService->upload($voucherDto);
  39.             if ('success' == $response->getStatus()) {
  40.                 $this->eventDispatcher->dispatch(new VoucherUploadSuccessEvent($voucherDto$response), Events::VOUCHER_UPLOAD_SUCCESS);
  41.             } else {
  42.                 $this->eventDispatcher->dispatch(new VoucherUploadFailEvent($voucherDto$response), Events::VOUCHER_UPLOAD_FAIL);
  43.             }
  44.         } catch (\Throwable $e) {
  45.             $this->logger->error($e->getMessage());
  46.             // maybe dispatch general error here
  47.             throw $e;
  48.         }
  49.     }
  50.     public function onUploadSucceeded(VoucherUploadSuccessEvent $event): void
  51.     {
  52.         $this->logger->info(
  53.             sprintf('Voucher Upload (voucher_file_id)[%s] Success [%s]',
  54.                 $event->getVoucherDto()->getMeta()['voucher_id'],
  55.                 $event->getClientResponse()->getPhrase()
  56.             )
  57.         );
  58.     }
  59.     public function onUploadFailed(VoucherUploadFailEvent $event): void
  60.     {
  61.         $this->logger->error(
  62.             sprintf('Voucher Upload (voucher_file_id)[%s] FAILED [%s]',
  63.                 $event->getVoucherDto()->getMeta()['voucher_id'],
  64.                 $event->getClientResponse()->getPhrase()
  65.             )
  66.         );
  67.     }
  68. }