feat: champion roles data seeder

This commit is contained in:
Rico van Zelst
2023-11-02 13:54:27 +01:00
parent cd6f3412d8
commit 5ee2e0ad68
3 changed files with 47 additions and 1 deletions

View File

@@ -3,6 +3,10 @@
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\ChampionRoles;
use App\Models\Champion;
use Illuminate\Support\Facades\Log;
class ChampionRolesSeeder extends Seeder
{
@@ -11,8 +15,47 @@ class ChampionRolesSeeder extends Seeder
*/
public function run(): void
{
// TODO: http://cdn.merakianalytics.com/riot/lol/resources/latest/en-US/championrates.json
$roleDataUrl = 'http://cdn.merakianalytics.com/riot/lol/resources/latest/en-US/championrates.json';
$roleData = json_decode(file_get_contents($roleDataUrl), true);
foreach ($roleData['data'] as $championId => $roles) {
$rolesExists = ChampionRoles::where('champion_id', $championId)->first();
$championExists = Champion::where('champion_id', $championId)->first();
if ($championExists) $championName = $championExists->name;
$playedRoles = [];
foreach ($roles as $role => $data) {
if ($data['playRate'] > 0) {
$playedRoles[] = $role;
}
}
$rolesAttributes = [
'champion_id' => $championId,
'champion_name' => $championName,
'roles' => $playedRoles,
];
if ($rolesExists && $this->hasAttributesChanged($rolesExists, $rolesAttributes)) {
Log::info('Roles for ' . $championName . ' have changed, updating...');
$rolesExists->update($rolesAttributes);
} elseif (!$rolesExists) {
Log::info('New roles detected for ' . $championName . '! Creating...');
ChampionRoles::create($rolesAttributes);
}
}
}
private function hasAttributesChanged($roleData, $attributes)
{
foreach ($attributes as $key => $value) {
if ($roleData->{$key} != $value) {
return true;
}
}
return false;
}
}