Shopify::tap()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Signifly\Shopify;
4
5
use Illuminate\Http\Client\PendingRequest;
6
use Illuminate\Support\Collection;
7
use Illuminate\Support\Facades\Http;
8
use Signifly\Shopify\REST\Actions\ManagesAccess;
9
use Signifly\Shopify\REST\Actions\ManagesAnalytics;
10
use Signifly\Shopify\REST\Actions\ManagesBilling;
11
use Signifly\Shopify\REST\Actions\ManagesCollections;
12
use Signifly\Shopify\REST\Actions\ManagesCustomers;
13
use Signifly\Shopify\REST\Actions\ManagesDiscounts;
14
use Signifly\Shopify\REST\Actions\ManagesEvents;
15
use Signifly\Shopify\REST\Actions\ManagesFulfillments;
16
use Signifly\Shopify\REST\Actions\ManagesInventory;
17
use Signifly\Shopify\REST\Actions\ManagesMarketingEvents;
18
use Signifly\Shopify\REST\Actions\ManagesMetafields;
19
use Signifly\Shopify\REST\Actions\ManagesOnlineStore;
20
use Signifly\Shopify\REST\Actions\ManagesOrders;
21
use Signifly\Shopify\REST\Actions\ManagesPlus;
22
use Signifly\Shopify\REST\Actions\ManagesProducts;
23
use Signifly\Shopify\REST\Actions\ManagesSalesChannel;
24
use Signifly\Shopify\REST\Actions\ManagesShopifyPayments;
25
use Signifly\Shopify\REST\Actions\ManagesStoreProperties;
26
use Signifly\Shopify\REST\Cursor;
27
use Signifly\Shopify\Support\MakesHttpRequests;
28
use Signifly\Shopify\Support\TransformsResources;
29
30
class Shopify
31
{
32
    use MakesHttpRequests;
33
    use ManagesAccess;
34
    use ManagesAnalytics;
35
    use ManagesBilling;
36
    use ManagesCollections;
37
    use ManagesCustomers;
38
    use ManagesDiscounts;
39
    use ManagesEvents;
40
    use ManagesFulfillments;
41
    use ManagesInventory;
42
    use ManagesMarketingEvents;
43
    use ManagesMetafields;
44
    use ManagesOnlineStore;
45
    use ManagesOrders;
46
    use ManagesPlus;
47
    use ManagesProducts;
48
    use ManagesSalesChannel;
49
    use ManagesShopifyPayments;
50
    use ManagesStoreProperties;
51
    use TransformsResources;
52
53
    protected string $accessToken;
54
    protected string $domain;
55
    protected string $apiVersion;
56
57
    protected ?PendingRequest $httpClient = null;
58
59
    public function __construct(string $accessToken, string $domain, string $apiVersion)
60
    {
61
        $this->withCredentials($accessToken, $domain, $apiVersion);
62
    }
63
64
    public function cursor(Collection $results): Cursor
65
    {
66
        return new Cursor($this, $results);
67
    }
68
69
    public function getHttpClient(): PendingRequest
70
    {
71
        return $this->httpClient ??= Http::baseUrl($this->getBaseUrl())
72
            ->withHeaders(['X-Shopify-Access-Token' => $this->accessToken]);
73
    }
74
75
    public function graphQl(): PendingRequest
76
    {
77
        return Http::baseUrl("https://{$this->domain}/admin/api/{$this->apiVersion}/graphql.json")
78
            ->withHeaders([
79
                'X-Shopify-Access-Token' => $this->accessToken,
80
                'Content-Type' => 'application/json',
81
            ]);
82
    }
83
84
    public function getBaseUrl(): string
85
    {
86
        return "https://{$this->domain}/admin/api/{$this->apiVersion}";
87
    }
88
89
    public function tap(callable $callback): self
90
    {
91
        $callback($this->getHttpClient());
92
93
        return $this;
94
    }
95
96
    public function withCredentials(string $accessToken, string $domain, string $apiVersion): self
97
    {
98
        $this->accessToken = $accessToken;
99
        $this->domain = $domain;
100
        $this->apiVersion = $apiVersion;
101
102
        $this->httpClient = null;
103
104
        return $this;
105
    }
106
}
107