src/EventListener/VoucherUploadSubscriber.php line 36

  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. }