RequestService::makePatchRequest()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 3
dl 0
loc 11
ccs 4
cts 4
cp 1
crap 1
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Aosmak\Laravel\Layer\Sdk\Services\Subservices;
4
5
use Aosmak\Laravel\Layer\Sdk\Traits\ConfigTrait;
6
use Aosmak\Laravel\Layer\Sdk\Traits\ClientTrait;
7
use Aosmak\Laravel\Layer\Sdk\Traits\ContainerTrait;
8
use Aosmak\Laravel\Layer\Sdk\Models\ResponseInterface;
9
use Aosmak\Laravel\Layer\Sdk\Services\Subservices\Interfaces\RequestServiceInterface;
10
11
/**
12
 * Class RequestService
13
 * @package namespace Aosmak\Laravel\Layer\Sdk\Services\Subservices
14
 */
15
class RequestService implements RequestServiceInterface
16
{
17
    use ConfigTrait, ClientTrait, ContainerTrait;
18
19
    /**
20
     * Version of Server API
21
     *
22
     * @const float
23
     */
24
    private const LAYER_SERVER_API_VERSION = '3.0';
25
26
    /**
27
     * Make a POST request
28
     *
29
     * @param string $url request url
30
     * @param array $data request data
31
     * @param array $requestHeaders request headers
32
     *
33
     * @return \Aosmak\Laravel\Layer\Sdk\Models\ResponseInterface
34
     */
35 23
    public function makePostRequest(string $url, array $data = [], array $requestHeaders = []): ResponseInterface
36
    {
37 23
        return $this->prepareRequest('POST', $url, $data, $requestHeaders);
38
    }
39
40
    /**
41
     * Make a PUT request
42
     *
43
     * @param string $url request url
44
     * @param array $data request data
45
     * @param array $requestHeaders request headers
46
     *
47
     * @return \Aosmak\Laravel\Layer\Sdk\Models\ResponseInterface
48
     */
49 10
    public function makePutRequest(string $url, array $data = [], array $requestHeaders = []): ResponseInterface
50
    {
51 10
        return $this->prepareRequest('PUT', $url, $data, $requestHeaders);
52
    }
53
54
    /**
55
     * Make a PATCH request
56
     *
57
     * @param string $url request url
58
     * @param array $data request data
59
     * @param array $requestHeaders request headers
60
     *
61
     * @return \Aosmak\Laravel\Layer\Sdk\Models\ResponseInterface
62
     */
63 12
    public function makePatchRequest(string $url, array $data = [], array $requestHeaders = []): ResponseInterface
64
    {
65
        $defaultHeaders = [
66 12
            'headers' => [
67
                'Content-Type' => 'application/vnd.layer-patch+json'
68
            ],
69
        ];
70
71 12
        $headers = array_replace_recursive($defaultHeaders, $requestHeaders);
72
73 12
        return $this->prepareRequest('PATCH', $url, $data, $headers);
74
    }
75
76
    /**
77
     * Make a GET request
78
     *
79
     * @param string $url request url
80
     * @param array $data request data
81
     * @param array $requestHeaders request headers
82
     *
83
     * @return \Aosmak\Laravel\Layer\Sdk\Models\ResponseInterface
84
     */
85 34
    public function makeGetRequest(string $url, array $data = [], array $requestHeaders = []): ResponseInterface
86
    {
87 34
        return $this->prepareRequest('GET', $url, $data, $requestHeaders);
88
    }
89
90
    /**
91
     * Make a DELETE request
92
     *
93
     * @param string $url request url
94
     * @param array $data request data
95
     * @param array $requestHeaders request headers
96
     *
97
     * @return \Aosmak\Laravel\Layer\Sdk\Models\ResponseInterface
98
     */
99 17
    public function makeDeleteRequest(string $url, array $data = [], array $requestHeaders = []): ResponseInterface
100
    {
101 17
        return $this->prepareRequest('DELETE', $url, $data, $requestHeaders);
102
    }
103
104
    /**
105
     * Prepare a HTTP request
106
     *
107
     * @param string $method HTTP method
108
     * @param string $url request url
109
     * @param array $data request data
110
     * @param array $requestHeaders request headers
111
     *
112
     * @return \Aosmak\Laravel\Layer\Sdk\Models\ResponseInterface
113
     */
114 85
    private function prepareRequest(string $method, string $url, array $data, array $requestHeaders): ResponseInterface
115
    {
116
        $defaultHeaders = [
117 85
            'headers' => [
118 85
                'Authorization' => 'Bearer ' . $this->config['LAYER_SDK_AUTH'],
119 85
                'Accept'        => 'application/vnd.layer+json; version=' . self::LAYER_SERVER_API_VERSION,
120 85
                'Content-Type'  => 'application/json',
121
            ],
122 85
            'json'           => $data,
123
            'decode_content' => false,
124 85
            'http_errors'    => $this->config['LAYER_SDK_SHOW_HTTP_ERRORS'],
125
        ];
126
127 85
        $headers = array_replace_recursive($defaultHeaders, $requestHeaders);
128 85
        $url     = $this->config['LAYER_SDK_BASE_URL'] . $url;
129
130 85
        return $this->makeRequest($method, $url, $headers);
131
    }
132
133
    /**
134
     * Make a HTTP request
135
     *
136
     * @param string $method HTTP method
137
     * @param string $url request url
138
     * @param array $requestHeaders request headers
139
     *
140
     * @return \Aosmak\Laravel\Layer\Sdk\Models\ResponseInterface
141
     */
142 87
    public function makeRequest(string $method, string $url, array $headers): ResponseInterface
143
    {
144 87
        $response = $this->client->request($method, $url, $headers);
145
146 87
        return $this->container->make('Aosmak\Laravel\Layer\Sdk\Models\Response', ['response' => $response]);
147
    }
148
149
    /**
150
     * Upload file request
151
     *
152
     * @param string $url request url
153
     * @param string $path file path
154
     *
155
     * @return \Aosmak\Laravel\Layer\Sdk\Models\ResponseInterface
156
     */
157 2
    public function uploadFile(string $url, string $path): ResponseInterface
158
    {
159
        $headers = [
160
            'multipart' => [
161
                [
162 2
                    'name'     => 'file',
163 2
                    'contents' => file_get_contents($path)
164
                ]
165
            ],
166
        ];
167
168 2
        return $this->makeRequest('POST', $url, $headers);
169
    }
170
}
171