fix: normalize champion payload to support multiple data formats

This commit is contained in:
Rico
2026-03-02 00:08:16 +01:00
parent b30dec2599
commit ae915989cc

View File

@@ -20,11 +20,13 @@ class BorisStaticDataClient
public function getChampions(): array
{
return $this->fetchWithFallback(
$payload = $this->fetchWithFallback(
self::CHAMPIONS_ENDPOINT,
self::MERAKI_CHAMPIONS_URL,
fn (mixed $payload): bool => $this->isChampionPayload($payload)
);
return $this->normalizeChampionPayload($payload);
}
public function getChampionRates(): array
@@ -138,7 +140,17 @@ class BorisStaticDataClient
private function isChampionPayload(mixed $payload): bool
{
return is_array($payload) && array_is_list($payload);
if (! is_array($payload) || $payload === []) {
return false;
}
if (array_is_list($payload)) {
return isset($payload[0]['id']);
}
$firstChampion = reset($payload);
return is_array($firstChampion) && isset($firstChampion['id']);
}
private function isChampionRatesPayload(mixed $payload): bool
@@ -160,4 +172,13 @@ class BorisStaticDataClient
{
return rtrim((string) config('services.boris.url'), '/');
}
private function normalizeChampionPayload(array $payload): array
{
if (array_is_list($payload)) {
return $payload;
}
return array_values($payload);
}
}