". return Http::withToken($token, 'token') ->acceptJson() ->timeout(10) ->baseUrl("{$url}/api/v1/repos/{$repo}"); } /** * Crée un ticket (issue). Retourne les données de l'issue créée * (dont "number") ou null en cas d'échec. * * @return array|null */ public function createIssue(string $title, string $body): ?array { $client = $this->client(); if (! $client) { return null; } try { $response = $client->post('/issues', ['title' => $title, 'body' => $body]); } catch (\Throwable $e) { Log::error('Appel API Gitea impossible : '.$e->getMessage()); return null; } if ($response->failed()) { Log::error('Création du ticket Gitea échouée', ['status' => $response->status()]); return null; } return (array) $response->json(); } /** * Récupère une issue (état, labels, jalon…). * * @return array|null */ public function getIssue(int $number): ?array { $client = $this->client(); if (! $client) { return null; } try { $response = $client->get("/issues/{$number}"); } catch (\Throwable $e) { Log::error('Lecture du ticket Gitea impossible : '.$e->getMessage()); return null; } return $response->successful() ? (array) $response->json() : null; } /** * Récupère les commentaires d'une issue (fil de discussion). * * @return array */ public function getComments(int $number): array { $client = $this->client(); if (! $client) { return []; } try { $response = $client->get("/issues/{$number}/comments"); } catch (\Throwable $e) { Log::error('Lecture des commentaires Gitea impossible : '.$e->getMessage()); return []; } return $response->successful() ? (array) $response->json() : []; } /** * Ajoute un commentaire (réponse) à une issue. */ public function addComment(int $number, string $body): bool { $client = $this->client(); if (! $client) { return false; } try { $response = $client->post("/issues/{$number}/comments", ['body' => $body]); } catch (\Throwable $e) { Log::error('Ajout de commentaire Gitea impossible : '.$e->getMessage()); return false; } return $response->successful(); } }