diff --git a/database/migrations/2023_10_31_084006_skin_price_type_fix.php b/database/migrations/2023_10_31_084006_skin_price_type_fix.php new file mode 100644 index 0000000..5dc3f91 --- /dev/null +++ b/database/migrations/2023_10_31_084006_skin_price_type_fix.php @@ -0,0 +1,28 @@ +integer('rp_price')->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('champion_skins', function (Blueprint $table) { + $table->bigInteger('rp_price')->change(); + }); + } +}; diff --git a/database/migrations/2023_10_31_085408_make_lore_nullable.php b/database/migrations/2023_10_31_085408_make_lore_nullable.php new file mode 100644 index 0000000..f8241db --- /dev/null +++ b/database/migrations/2023_10_31_085408_make_lore_nullable.php @@ -0,0 +1,28 @@ +text('lore')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('champion_skins', function (Blueprint $table) { + $table->text('lore')->nullable(false)->change(); + }); + } +}; diff --git a/database/seeders/ChampionSeeder.php b/database/seeders/ChampionSeeder.php index fa91d31..560d7ae 100644 --- a/database/seeders/ChampionSeeder.php +++ b/database/seeders/ChampionSeeder.php @@ -4,6 +4,7 @@ namespace Database\Seeders; use Illuminate\Database\Seeder; use App\Models\Champion; +use Illuminate\Support\Facades\Log; class ChampionSeeder extends Seeder { @@ -38,8 +39,10 @@ class ChampionSeeder extends Seeder // Check if the champion already exists and if any attributes have changed, if so update the champion. If the champion doesn't exist, create it. // This is to prevent the champion data from being updated every time the seeder is run. As I'll probably run this on a cron job. if ($championExists && $this->hasAttributesChanged($championExists, $championAttributes)) { + Log::info('Champion ' . $champion['name'] . ' has changed, updating...'); $championExists->update($championAttributes); } elseif (!$championExists) { + Log::info('New champion detected! Creating ' . $champion['name'] . '...'); Champion::create($championAttributes); } } diff --git a/database/seeders/ChampionSkinSeeder.php b/database/seeders/ChampionSkinSeeder.php index c33ac45..a2bb1d8 100644 --- a/database/seeders/ChampionSkinSeeder.php +++ b/database/seeders/ChampionSkinSeeder.php @@ -3,7 +3,9 @@ namespace Database\Seeders; use App\Models\Champion; +use App\Models\ChampionSkin; use Illuminate\Database\Seeder; +use Illuminate\Support\Facades\Log; class ChampionSkinSeeder extends Seeder { @@ -16,8 +18,54 @@ class ChampionSkinSeeder extends Seeder $championData = json_decode(file_get_contents($championDataUrl), true); foreach ($championData as $champion) { - $championId = $champion['id']; - $championExists = Champion::where('champion_id', $championId)->first(); + foreach ($champion['skins'] as $skin) { + $skinId = $skin['id']; + $skinExists = ChampionSkin::where('full_skin_id', $skinId)->first(); + if ($skin['cost'] == "Special") { + $skin['cost'] = 99999; + } + + $skinAttributes = [ + 'champion_id' => $champion['id'], + 'full_skin_id' => $skin['id'], + 'skin_id' => substr($skin['id'], 3), + 'skin_name' => $skin['name'] . ' ' . $champion['name'], + 'lore' => $skin['lore'], + 'availability' => $skin['availability'], + 'loot_eligible' => $skin['lootEligible'], + 'rp_price' => $skin['cost'], + 'rarity' => $skin['rarity'], + 'release_date' => $skin['release'], + 'associated_skinline' => $skin['set'], + 'new_effects' => $skin['newEffects'], + 'new_animations' => $skin['newAnimations'], + 'new_recall' => $skin['newRecall'], + 'new_voice' => $skin['newVoice'], + 'new_quotes' => $skin['newQuotes'], + 'voice_actor' => $skin['voiceActor'], + 'splash_artist' => $skin['splashArtist'], + ]; + + // Check if the skin already exists and if any attributes have changed, if so update the skin. If the skin doesn't exist, create it. + // This is to prevent the skin data from being updated every time the seeder is run. As I'll probably run this on a cron job. + if ($skinExists && $this->hasAttributesChanged($skinExists, $skinAttributes)) { + Log::info('Skin ' . $skin['name'] . ' ' . $champion['name'] . ' has changed, updating...'); + $skinExists->update($skinAttributes); + } elseif (!$skinExists) { + Log::info('New skin detected! Creating ' . $skin['name'] . ' ' . $champion['name'] . '...'); + ChampionSkin::create($skinAttributes); + } + } } } + + private function hasAttributesChanged($skin, $attributes) + { + foreach ($attributes as $key => $value) { + if ($skin->{$key} != $value) { + return true; + } + } + return false; + } } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 80d7596..b28f109 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -12,5 +12,7 @@ class DatabaseSeeder extends Seeder */ public function run(): void { + $this->call(ChampionSeeder::class); + $this->call(ChampionSkinSeeder::class); } }