Просмотр файла app/Services/GithubService.php

Размер файла: 1.64Kb
<?php

declare(strict_types=1);

namespace App\Services;

use GuzzleHttp\Client;
use Shieldon\SimpleCache\Cache;
use Throwable;

class GithubService
{
    private Client $client;

    public function __construct(private Cache $cache)
    {
        $this->client = new Client([
            'base_uri' => 'https://api.github.com/repos/visavi/motor/',
            'timeout'  => 3.0,
        ]);
    }

    /**
     * Send request
     *
     * @param string $uri
     *
     * @return array
     */
    public function sendRequest(string $uri): array
    {
        try {
            $content = $this->cache->get($uri);
            if ($content) {
                return json_decode($content, true);
            }

            $params = [
                'query' => [
                    'per_page' => 10,
                ]
            ];

            $response = $this->client->get($uri, $params);
            $content = $response->getBody()->getContents();

            if ($content) {
                $this->cache->set($uri, $content, 3600);

                return json_decode($content, true);
            }
        } catch (Throwable $e) {
            // nothing
        }

        return [];
    }

    /**
     * Get releases
     *
     * @return array
     */
    public function getReleases(): array
    {
        return $this->sendRequest('releases');
    }

    /**
     * Get last release
     *
     * @return array
     */
    public function getLastRelease(): array
    {
        $releases = $this->sendRequest('releases');

        return $releases[0] ?? [];
    }

    public function getCommits(): array
    {
        return $this->sendRequest('commits');
    }
}