123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <?php
- namespace App\Libraries\BIM\Glendale;
- use App\Libraries\BIM\Exceptions\FailedException;
- use Psr\Http\Message\ResponseInterface;
- class Client {
- protected static ?Client $instance = null;
- protected \GuzzleHttp\Client $client;
- protected function __construct()
- {
- $intranetHost = config('bim.glendale.intranet_host', '');
- $baseUri = !empty($intranetHost) ? $intranetHost : config("bim.glendale.host");
- $this->client = new \GuzzleHttp\Client([
- 'base_uri' => $baseUri,
- 'http_errors' => false,
- 'debug' => false,
- 'headers' => [
- 'Accept' => "application/json",
- 'Token' => config("bim.glendale.token"),
- ]
- ]);
- }
- public static function getInstance(): Client
- {
- if (! self::$instance) {
- self::$instance = new self();
- }
- return self::$instance;
- }
- public function request(string $method, string $uri, array $options = []): ?array
- {
- return $this->parseResponse($this->client->request($method, $uri, $options));
- }
- public function post(string $uri, array $options = []) {
- return $this->request("POST", $uri, $options);
- }
- public function get(string $uri, array $params = []) {
- return $this->request("GET", $uri, [
- 'query' => $params
- ]);
- }
- protected function parseResponse(ResponseInterface $response): ?array
- {
- $body = json_decode((string)$response->getBody(), true);
- return match ($response->getStatusCode()) {
- 200, 201, 204 => $this->parseStatusSuccessResponse($body),
- default => throw new FailedException($body['message'] ?? $response->getReasonPhrase()),
- };
- }
- protected function parseStatusSuccessResponse(array $body)
- {
- $isJson = json_last_error() == JSON_ERROR_NONE;
- if (! $isJson) {
- return [];
- }
- if ($body['code'] != 1) {
- throw new FailedException($body['codeMsg']);
- }
- return $body;
- }
- }
|