1 | <?php |
||
17 | class ApiService |
||
18 | { |
||
19 | const BASE_URL = 'https://api.openfintech.io'; |
||
20 | |||
21 | /** @var string */ |
||
22 | private $resourceName; |
||
23 | |||
24 | /** @var string */ |
||
25 | private $apiVersion; |
||
26 | |||
27 | /** @var JsonApiRequestBuilder */ |
||
28 | private $requestBuilder; |
||
29 | |||
30 | /** @var JsonApiClient */ |
||
31 | private $client; |
||
32 | |||
33 | /** |
||
34 | * ApiService constructor. |
||
35 | * |
||
36 | * @param string $resourceName |
||
37 | * @param string $apiVersion |
||
38 | * @param array $config |
||
39 | */ |
||
40 | 10 | public function __construct(string $resourceName, string $apiVersion = 'v1', array $config = []) |
|
47 | |||
48 | /** |
||
49 | * @return \Generator|\WoohooLabs\Yang\JsonApi\Schema\ResourceObject[] |
||
50 | * @throws \Exception |
||
51 | */ |
||
52 | 2 | public function getResources() |
|
53 | { |
||
54 | 2 | $lastPage = false; |
|
55 | 2 | $pageCount = 1; |
|
56 | |||
57 | 2 | while ($lastPage === false) { |
|
58 | |||
59 | 2 | $this->requestBuilder->setUriQueryParam('page[number]', $pageCount); |
|
60 | 2 | $request = $this->getRequest(); |
|
61 | 2 | $response = $this->client->sendRequest($request); |
|
62 | 2 | if (!$response->isSuccessful([200])) { |
|
63 | 1 | throw new \RuntimeException(sprintf('Can not get resource from URL %s', $request->getUri())); |
|
64 | } |
||
65 | |||
66 | 1 | $resources = $response->document()->primaryResources(); |
|
67 | 1 | $totalPage = $response->document()->meta()['pages']; |
|
68 | |||
69 | 1 | if ($pageCount === $totalPage) { |
|
70 | 1 | $lastPage = true; |
|
71 | } |
||
72 | |||
73 | 1 | foreach ($resources as $data) { |
|
74 | 1 | yield $data; |
|
75 | } |
||
76 | |||
77 | 1 | $pageCount++; |
|
78 | } |
||
79 | |||
80 | 1 | } |
|
81 | |||
82 | /** |
||
83 | * @param string $id |
||
84 | * |
||
85 | * @return \WoohooLabs\Yang\JsonApi\Schema\ResourceObject |
||
86 | */ |
||
87 | 2 | public function getResource(string $id) |
|
88 | { |
||
89 | 2 | $request = $this->requestBuilder |
|
90 | 2 | ->setUri($this->getSingleResourceUri($id)) |
|
91 | 2 | ->fetch() |
|
92 | 2 | ->getRequest(); |
|
93 | |||
94 | 2 | $response = $this->client->sendRequest($request); |
|
95 | |||
96 | 2 | if (!$response->isSuccessful([200])) { |
|
97 | 1 | throw new \RuntimeException( |
|
98 | 1 | sprintf('Can not get resource from URL %s', $request->getUri()), |
|
99 | 1 | $response->getStatusCode() |
|
100 | ); |
||
101 | } |
||
102 | |||
103 | 1 | return $response->document()->primaryResource(); |
|
104 | } |
||
105 | |||
106 | /** |
||
107 | * @return RequestInterface |
||
108 | */ |
||
109 | 3 | public function getRequest() |
|
119 | |||
120 | /** |
||
121 | * @return string |
||
122 | */ |
||
123 | 5 | private function getResourceUri() |
|
127 | |||
128 | /** |
||
129 | * @param string $id |
||
130 | * |
||
131 | * @return string |
||
132 | */ |
||
133 | 2 | private function getSingleResourceUri(string $id) |
|
137 | |||
138 | /** |
||
139 | * @return JsonApiRequestBuilder |
||
140 | */ |
||
141 | 2 | public function getRequestBuilder(): JsonApiRequestBuilder |
|
145 | |||
146 | /** |
||
147 | * @param JsonApiRequestBuilder $requestBuilder |
||
148 | */ |
||
149 | 1 | public function setRequestBuilder(JsonApiRequestBuilder $requestBuilder) |
|
153 | |||
154 | /** |
||
155 | * @param JsonApiClient $client |
||
156 | */ |
||
157 | public function setClient(JsonApiClient $client) |
||
161 | } |