X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fseekat;a=blobdiff_plain;f=lib%2FAPI%2FCall%2FResult.php;h=92b7dae4572a6bdbec243c57fa822b7bdbd946e9;hp=22ce2efb29dbc4cf1ca17505107c88f00d8c7231;hb=HEAD;hpb=f4aa6beaf2e1f0dc9c877782cbbad5a989194517 diff --git a/lib/API/Call/Result.php b/lib/API/Call/Result.php index 22ce2ef..92b7dae 100644 --- a/lib/API/Call/Result.php +++ b/lib/API/Call/Result.php @@ -7,43 +7,38 @@ use http\Header; use seekat\API; use seekat\Exception\RequestException; -final class Result -{ +final class Result { private $api; function __construct(API $api) { $this->api = $api; } + /** + * @param Response $response + * @return API + * @throws RequestException + */ function __invoke(Response $response) : API { - $hit = $response->getHeader("X-Cache-Time") ? "cached" : "enqueued"; - $this->api->getLogger()->info("$hit -> response", [ - "url" => (string) $this->api->getUrl(), - "info" => $response->getInfo(), - ]); - $links = $this->checkResponseMeta($response); $type = $this->checkResponseType($response); + $data = $this->checkResponseBody($response, $type); - try { - $data = $type->parseBody($response->getBody()); - } catch (\Exception $e) { - $this->api->getLogger()->error("response -> error: ".$e->getMessage(), [ - "url" => (string) $this->api->getUrl(), - ]); - - throw $e; - } + $this->api->getLogger()->info("response -> info", [ + "type" => $type->getType(), + "links" => $links->getRelations(), + ]); + $this->api->getLogger()->debug("response -> data", [ + "data" => $data, + ]); return $this->api = $this->api->with(compact("type", "data", "links")); } /** - * @param Response $response - * @return null|API\Links * @throws RequestException */ - private function checkResponseMeta(Response $response) { + private function checkResponseMeta(Response $response) : API\Links { if ($response->getResponseCode() >= 400) { $e = new RequestException($response); @@ -61,7 +56,10 @@ final class Result return new API\Links($link); } - private function checkResponseType(Response $response) { + /** + * @throws RequestException + */ + private function checkResponseType(Response $response) : API\ContentType { if (!($type = $response->getHeader("Content-Type", Header::class))) { $e = new RequestException($response); @@ -72,6 +70,23 @@ final class Result throw $e; } - return new API\ContentType($type); + return new API\ContentType($this->api->getVersion(), $type->value); + } + + /** + * @throws \Exception + */ + private function checkResponseBody(Response $response, API\ContentType $type) : mixed { + try { + $data = $type->decode($response->getBody()); + } catch (\Exception $e) { + $this->api->getLogger()->error("response -> error: ".$e->getMessage(), [ + "url" => (string) $this->api->getUrl(), + ]); + + throw $e; + } + + return $data; } }