<?php
namespace App\Service\App\Merchant\Integrations\Zapier\Listener;
use App\Background\Data\ZapierTriggerPaymentData;
use App\Core\BackgroundWork\Contract\IClient;
use App\Core\MerchantSelector\Contract\IMerchantSelector;
use App\Service\App\Merchant\CustomFeature\Implementation\ZapierCustomFeature;
use App\Service\App\Merchant\Integrations\Logger\IntegrationLoggerProcessor;
use App\Service\App\Merchant\Payment\Event\CreatePaymentEvent;
use App\Types\ZapierTriggerTypes;
use Psr\Log\LoggerInterface;
class CreatePaymentListener
{
/**
* Background job client
*
* @var IClient
*/
private IClient $backgroundClient;
/**
* Merchant selector
*
* @var IMerchantSelector
*/
private IMerchantSelector $merchantSelector;
/**
* Zapier custom feature
*
* @var ZapierCustomFeature
*/
private ZapierCustomFeature $zapierCustomFeature;
/**
* Logger interface
*
* @var LoggerInterface
*/
private LoggerInterface $logger;
/**
* Integration logger processor
*
* @var IntegrationLoggerProcessor
*/
private IntegrationLoggerProcessor $loggerProcessor;
/**
* @param IClient $backgroundClient
* @param IMerchantSelector $merchantSelector
* @param ZapierCustomFeature $zapierCustomFeature
* @param LoggerInterface $logger
* @param IntegrationLoggerProcessor $loggerProcessor
*/
public function __construct(
IClient $backgroundClient, IMerchantSelector $merchantSelector, ZapierCustomFeature $zapierCustomFeature,
LoggerInterface $logger, IntegrationLoggerProcessor $loggerProcessor
)
{
$this->backgroundClient = $backgroundClient;
$this->merchantSelector = $merchantSelector;
$this->zapierCustomFeature = $zapierCustomFeature;
$this->logger = $logger;
$this->loggerProcessor = $loggerProcessor;
}
/**
* @param CreatePaymentEvent $event
* @return void
*/
public function onAction(CreatePaymentEvent $event): void
{
if (!$this->zapierCustomFeature->isEnabled()) {
return;
}
// @todo remove after testing
$this->loggerProcessor->setInfo($event->getOrderId(), ZapierCustomFeature::NAME);
$this->logger->info('Zapier: Triggering payment created event for the order ' . $event->getOrderId());
$this->backgroundClient->runJob(
new ZapierTriggerPaymentData(
$event->getOrderId(), $this->merchantSelector->getMerchant(),
ZapierTriggerTypes::TYPE_PAYMENT_CREATED
)
);
}
}