Passed
Pull Request — master (#4)
by Morten Poul
05:31 queued 02:55
created

Shopify::swapProfile()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

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