diff --git a/app/Http/Controllers/SummonerIconController.php b/app/Http/Controllers/SummonerIconController.php new file mode 100644 index 0000000..4386812 --- /dev/null +++ b/app/Http/Controllers/SummonerIconController.php @@ -0,0 +1,70 @@ +allowedFilters('title') + ->defaultSort('icon_id') + ->paginate(72) + ->appends(request()->query()); + + return view('icons.index', compact('icons')); + } + + public function store(Request $request) + { + $request->validate([ + 'icon_id' => ['required', 'integer'], + 'title' => ['nullable'], + 'release_year' => ['nullable', 'integer'], + 'legacy' => ['required'], + 'image' => ['required'], + 'esports_team' => ['nullable'], + 'esports_region' => ['nullable'], + 'esports_event' => ['nullable'], + 'description' => ['nullable'], + ]); + + return SummonerIcon::create($request->validated()); + } + + public function show(SummonerIcon $summonerIcon) + { + return $summonerIcon; + } + + public function update(Request $request, SummonerIcon $summonerIcon) + { + $request->validate([ + 'icon_id' => ['required', 'integer'], + 'title' => ['nullable'], + 'release_year' => ['nullable', 'integer'], + 'legacy' => ['required'], + 'image' => ['required'], + 'esports_team' => ['nullable'], + 'esports_region' => ['nullable'], + 'esports_event' => ['nullable'], + 'description' => ['nullable'], + ]); + + $summonerIcon->update($request->validated()); + + return $summonerIcon; + } + + public function destroy(SummonerIcon $summonerIcon) + { + $summonerIcon->delete(); + + return response()->json(); + } +} diff --git a/app/Models/SummonerIcon.php b/app/Models/SummonerIcon.php new file mode 100644 index 0000000..de9cd35 --- /dev/null +++ b/app/Models/SummonerIcon.php @@ -0,0 +1,37 @@ + 'boolean', + ]; + + public function sluggable(): array + { + return [ + 'slug' => [ + 'source' => ['title', 'icon_id'], + ], + ]; + } + +} diff --git a/app/View/Components/Icons/List_all.php b/app/View/Components/Icons/List_all.php new file mode 100644 index 0000000..19d6d96 --- /dev/null +++ b/app/View/Components/Icons/List_all.php @@ -0,0 +1,20 @@ +id(); + $table->integer('icon_id'); + $table->string('title')->nullable(); + $table->string('description')->nullable(); + $table->integer('release_year')->nullable(); + $table->boolean('legacy'); + $table->string('image'); + $table->string('esports_team')->nullable(); + $table->string('esports_region')->nullable(); + $table->string('esports_event')->nullable(); + $table->string('slug')->unique(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('summoner_icons'); + } +}; diff --git a/database/seeders/SummonerIconSeeder.php b/database/seeders/SummonerIconSeeder.php new file mode 100644 index 0000000..286e243 --- /dev/null +++ b/database/seeders/SummonerIconSeeder.php @@ -0,0 +1,64 @@ +first(); + + $iconAttributes = [ + 'icon_id' => $icon['id'], + 'title' => $icon['title'], + 'description' => $icon['descriptions'][0]['description'] ?? null, + 'release_year' => $icon['yearReleased'], + 'legacy' => $icon['isLegacy'], + 'image' => 'https://raw.communitydragon.org/latest/plugins/rcp-be-lol-game-data/global/default/v1/profile-icons/' . $icon['id'] . '.jpg', + 'esports_team' => $icon['esportsTeam'] ?? null, + 'esports_region' => $icon['esportsRegion'] ?? null, + 'esports_event' => $icon['esportsEvent'] ?? null, + ]; + + // 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 ($iconExists && $this->hasAttributesChanged($iconExists, $iconAttributes)) { + Log::info('Icon ' . $iconId . ' has changed, updating...'); + $iconExists->update($iconAttributes); + $changeCount++; + } elseif (!$iconExists) { + Log::info('New icon detected! Creating ' . $iconId . '...'); + SummonerIcon::create($iconAttributes); + $changeCount++; + } + } + if ($changeCount > 0) { + Artisan::call('cloudflare:purge'); + } + } + + private function hasAttributesChanged($champion, $attributes): bool + { + foreach ($attributes as $key => $value) { + if ($champion->{$key} != $value) { + return true; + } + } + + return false; + } +} diff --git a/public/icons/android-chrome-192x192.png b/public/img/icons/android-chrome-192x192.png similarity index 100% rename from public/icons/android-chrome-192x192.png rename to public/img/icons/android-chrome-192x192.png diff --git a/public/icons/android-chrome-512x512.png b/public/img/icons/android-chrome-512x512.png similarity index 100% rename from public/icons/android-chrome-512x512.png rename to public/img/icons/android-chrome-512x512.png diff --git a/public/icons/apple-touch-icon.png b/public/img/icons/apple-touch-icon.png similarity index 100% rename from public/icons/apple-touch-icon.png rename to public/img/icons/apple-touch-icon.png diff --git a/public/icons/browserconfig.xml b/public/img/icons/browserconfig.xml similarity index 73% rename from public/icons/browserconfig.xml rename to public/img/icons/browserconfig.xml index c1947e3..9e0826e 100644 --- a/public/icons/browserconfig.xml +++ b/public/img/icons/browserconfig.xml @@ -2,7 +2,7 @@ - + #ff7c47 diff --git a/public/icons/favicon-16x16.png b/public/img/icons/favicon-16x16.png similarity index 100% rename from public/icons/favicon-16x16.png rename to public/img/icons/favicon-16x16.png diff --git a/public/icons/favicon-32x32.png b/public/img/icons/favicon-32x32.png similarity index 100% rename from public/icons/favicon-32x32.png rename to public/img/icons/favicon-32x32.png diff --git a/public/icons/favicon.ico b/public/img/icons/favicon.ico similarity index 100% rename from public/icons/favicon.ico rename to public/img/icons/favicon.ico diff --git a/public/icons/mstile-150x150.png b/public/img/icons/mstile-150x150.png similarity index 100% rename from public/icons/mstile-150x150.png rename to public/img/icons/mstile-150x150.png diff --git a/public/icons/safari-pinned-tab.svg b/public/img/icons/safari-pinned-tab.svg similarity index 100% rename from public/icons/safari-pinned-tab.svg rename to public/img/icons/safari-pinned-tab.svg diff --git a/public/icons/site.webmanifest b/public/img/icons/site.webmanifest similarity index 74% rename from public/icons/site.webmanifest rename to public/img/icons/site.webmanifest index aa7205e..f261cec 100644 --- a/public/icons/site.webmanifest +++ b/public/img/icons/site.webmanifest @@ -3,12 +3,12 @@ "short_name": "Heimerdinger.lol", "icons": [ { - "src": "/icons/android-chrome-192x192.png", + "src": "/img/icons/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" }, { - "src": "/icons/android-chrome-512x512.png", + "src": "/img/icons/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" } diff --git a/resources/views/champions/index.blade.php b/resources/views/champions/index.blade.php index 4ba32ec..0d247f5 100644 --- a/resources/views/champions/index.blade.php +++ b/resources/views/champions/index.blade.php @@ -6,14 +6,14 @@ - - - - - - + + + + + + - + Heimerdinger.LoL • Champions diff --git a/resources/views/champions/show.blade.php b/resources/views/champions/show.blade.php index de8311d..2b3271d 100644 --- a/resources/views/champions/show.blade.php +++ b/resources/views/champions/show.blade.php @@ -6,14 +6,14 @@ - - - - - - + + + + + + - + {{$champion->name}} • Heimerdinger.LoL diff --git a/resources/views/components/icons/list_all.blade.php b/resources/views/components/icons/list_all.blade.php new file mode 100644 index 0000000..90f1a0c --- /dev/null +++ b/resources/views/components/icons/list_all.blade.php @@ -0,0 +1,50 @@ + + +
+

+ Summoner Icons

+ + + +
+
+ + @foreach($icons as $key => $icon) +
+
+ {{ $icon->title }} Icon +
+ +
+
+

+ {{ $icon->title }} +

+ +
+
+ + +
+ @endforeach +
+
+ {{ $icons->links() }} +
diff --git a/resources/views/components/icons/searchbar.blade.php b/resources/views/components/icons/searchbar.blade.php new file mode 100644 index 0000000..f8259c7 --- /dev/null +++ b/resources/views/components/icons/searchbar.blade.php @@ -0,0 +1,25 @@ +
+
+
+ + @if(request('filter.title')) + + @endif +
+ +
+
+ diff --git a/resources/views/components/skins/grid_info.blade.php b/resources/views/components/skins/grid_info.blade.php index 58e62cd..daabaaf 100644 --- a/resources/views/components/skins/grid_info.blade.php +++ b/resources/views/components/skins/grid_info.blade.php @@ -14,7 +14,8 @@ View champion - info + info + diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 8e94160..026e2a6 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -6,14 +6,14 @@ - - - - - - + + + + + + - + Heimerdinger.LoL • Home @@ -40,7 +40,7 @@ - + @vite(['resources/css/app.css', 'resources/js/app.js']) diff --git a/resources/views/icons/index.blade.php b/resources/views/icons/index.blade.php new file mode 100644 index 0000000..abee2d1 --- /dev/null +++ b/resources/views/icons/index.blade.php @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + Heimerdinger.LoL • Icons + + + + + + + + + + + + + + + + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + + + + + + + + diff --git a/resources/views/skins/index.blade.php b/resources/views/skins/index.blade.php index d26530b..d411cda 100644 --- a/resources/views/skins/index.blade.php +++ b/resources/views/skins/index.blade.php @@ -6,14 +6,14 @@ - - - - - - + + + + + + - + Heimerdinger.LoL • Skins diff --git a/resources/views/skins/show.blade.php b/resources/views/skins/show.blade.php index b3fc98e..483588c 100644 --- a/resources/views/skins/show.blade.php +++ b/resources/views/skins/show.blade.php @@ -6,14 +6,14 @@ - - - - - - + + + + + + - + {{$skin->skin_name}} • Heimerdinger.LoL diff --git a/routes/web.php b/routes/web.php index f05939e..caaac3e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -4,6 +4,7 @@ use App\Http\Controllers\ChampionController; use Illuminate\Support\Facades\Route; use App\Http\Controllers\HomeController; use App\Http\Controllers\ChampionSkinController; +use App\Http\Controllers\SummonerIconController; /* |-------------------------------------------------------------------------- @@ -23,4 +24,13 @@ Route::get('/champions', [ChampionController::class, 'index']); Route::get('/champion/{champion}', [ChampionController::class, 'show']); // Skins Route::get('/skins', [ChampionSkinController::class, 'index'])->name('skins.index'); -Route::get('/skin/{championSkin}', [ChampionSkinController::class, 'show']); +Route::get( + '/skin/{championSkin}', + [ChampionSkinController::class, 'show'] +); + +// Icons +Route::get('/icons', [ + SummonerIconController::class, + 'index' +])->name('icons.index');