Files
HeimerdingerLoL/database/seeders/SkinChromaSeeder.php
Rico van Zelst 69bfd0b263 fix: champion cdn
2025-09-11 20:40:51 +02:00

83 lines
3.0 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\SkinChroma;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
class SkinChromaSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$championData = Http::get('https://static.heimerdinger.lol/champions.json')->json();
if (!is_array($championData)) {
$championData = Http::get('https://cdn.merakianalytics.com/riot/lol/resources/latest/en-US/champions.json')->json();
}
$changeCount = 0;
foreach ($championData as $champion) {
foreach ($champion['skins'] as $skin) {
if ($skin['name'] === 'Original') {
continue;
}
foreach ($skin['chromas'] as $chroma) {
if ($chroma === null) {
continue;
} // To address: https://github.com/meraki-analytics/lolstaticdata/issues/71
$chromaId = $chroma['id'];
$chromaExists = SkinChroma::where('chroma_id', $chromaId)->first();
$chromaAttributes = [
'chroma_id' => $chromaId,
'full_skin_id' => $skin['id'],
'skin_name' => $skin['name'] . ' ' . $champion['name'],
'chroma_name' => $chroma['name'],
'chroma_colors' => $chroma['colors'],
'chroma_image' => $chroma['chromaPath'],
];
// Mundo is a special case, his skins often include his name in the skin name, so we need to remove it.
if (str_contains($chromaAttributes['skin_name'], 'Mundo Dr. Mundo')) {
$chromaAttributes['skin_name'] = str_replace(
'Mundo Dr. Mundo',
'Mundo',
$chromaAttributes['skin_name']
);
}
if ($chromaExists && $this->hasAttributesChanged($chromaExists, $chromaAttributes)) {
Log::info('Updating chroma: ' . $chromaId);
$chromaExists->update($chromaAttributes);
$changeCount++;
} elseif (! $chromaExists) {
Log::info('Creating chroma: ' . $chromaId);
SkinChroma::create($chromaAttributes);
$changeCount++;
}
}
}
}
if ($changeCount > 0) {
Artisan::call('cloudflare:purge');
}
}
private function hasAttributesChanged($chroma, $attributes): bool
{
foreach ($attributes as $key => $value) {
if ($chroma->{$key} != $value) {
return true;
}
}
return false;
}
}