GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

ExportOrderConsumer   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 95
Duplicated Lines 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 34
dl 0
loc 95
rs 10
c 1
b 1
f 0
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A performApiRequest() 0 6 2
A consume() 0 29 4
A __construct() 0 12 1
1
<?php
2
declare(strict_types=1);
3
/**
4
 */
5
6
namespace CommerceLeague\ActiveCampaign\MessageQueue\Sales;
7
8
use CommerceLeague\ActiveCampaign\Api\Data\OrderInterface;
9
use CommerceLeague\ActiveCampaign\Api\OrderRepositoryInterface;
10
use CommerceLeague\ActiveCampaign\Gateway\Client;
11
use CommerceLeague\ActiveCampaign\Gateway\Request\OrderBuilder as OrderRequestBuilder;
12
use CommerceLeague\ActiveCampaign\Logger\Logger;
13
use CommerceLeague\ActiveCampaign\MessageQueue\ConsumerInterface;
14
use CommerceLeague\ActiveCampaignApi\Exception\HttpException;
15
use CommerceLeague\ActiveCampaignApi\Exception\UnprocessableEntityHttpException;
16
use Magento\Framework\Exception\CouldNotSaveException;
17
use Magento\Framework\Exception\NoSuchEntityException;
18
use Magento\Sales\Api\Data\OrderInterface as MagentoOrderInterface;
19
use Magento\Sales\Api\OrderRepositoryInterface as MagentoOrderRepositoryInterface;
20
use Magento\Sales\Model\Order as MagentoOrder;
21
22
/**
23
 * Class ExportOrderConsumer
24
 */
25
class ExportOrderConsumer implements ConsumerInterface
26
{
27
    /**
28
     * @var MagentoOrderRepositoryInterface
29
     */
30
    private $magentoOrderRepository;
31
32
    /**
33
     * @var Logger
34
     */
35
    private $logger;
36
37
    /**
38
     * @var OrderRepositoryInterface
39
     */
40
    private $orderRepository;
41
42
    /**
43
     * @var OrderRequestBuilder
44
     */
45
    private $orderRequestBuilder;
46
47
    /**
48
     * @var Client
49
     */
50
    private $client;
51
52
    /**
53
     * @param MagentoOrderRepositoryInterface $magentoOrderRepository
54
     * @param Logger $logger
55
     * @param OrderRepositoryInterface $orderRepository
56
     * @param OrderRequestBuilder $orderRequestBuilder
57
     * @param Client $client
58
     */
59
    public function __construct(
60
        MagentoOrderRepositoryInterface $magentoOrderRepository,
61
        Logger $logger,
62
        OrderRepositoryInterface $orderRepository,
63
        OrderRequestBuilder $orderRequestBuilder,
64
        Client $client
65
    ) {
66
        $this->magentoOrderRepository = $magentoOrderRepository;
67
        $this->logger = $logger;
68
        $this->orderRepository = $orderRepository;
69
        $this->orderRequestBuilder = $orderRequestBuilder;
70
        $this->client = $client;
71
    }
72
73
    /**
74
     * @param string $message
75
     * @throws CouldNotSaveException
76
     * @throws \Exception
77
     */
78
    public function consume(string $message): void
79
    {
80
        $message = json_decode($message, true);
81
82
        try {
83
            /** @var MagentoOrderInterface|MagentoOrder $magentoOrder */
84
            $magentoOrder = $this->magentoOrderRepository->get($message['magento_order_id']);
85
        } catch (NoSuchEntityException $e) {
86
            $this->logger->error($e->getMessage());
87
            return;
88
        }
89
90
        $order = $this->orderRepository->getOrCreateByMagentoQuoteId($magentoOrder->getQuoteId());
91
        $request = $this->orderRequestBuilder->build($magentoOrder);
92
93
        try {
94
            $apiResponse = $this->performApiRequest($order, $request);
95
        } catch (UnprocessableEntityHttpException $e) {
96
            $this->logger->error($e->getMessage());
97
            $this->logger->error(print_r($e->getResponseErrors(), true));
98
            return;
99
        } catch (HttpException $e) {
100
            $this->logger->error($e->getMessage());
101
            return;
102
        }
103
104
        $order->setActiveCampaignId($apiResponse['ecomOrder']['id']);
105
106
        $this->orderRepository->save($order);
107
    }
108
109
    /**
110
     * @param OrderInterface $order
111
     * @param array $request
112
     * @return array
113
     */
114
    private function performApiRequest(OrderInterface $order, array $request): array
115
    {
116
        if ($activeCampaignId = $order->getActiveCampaignId()) {
117
            return $this->client->getOrderApi()->update((int)$activeCampaignId, ['ecomOrder' => $request]);
118
        } else {
119
            return $this->client->getOrderApi()->create(['ecomOrder' => $request]);
120
        }
121
    }
122
}
123