From b46128ec268e6ae19a2d25b977155fb41b1ff985 Mon Sep 17 00:00:00 2001 From: Rico van Zelst Date: Fri, 22 Mar 2024 02:35:44 +0100 Subject: [PATCH] Add Champion model, form validation, and components for StreamerPanel. - Added Champion model to StreamerPanelController. - Implemented form validation for champion_id, platform, username, and displayname in create and update methods. - Created StreamerCreateForm and StreamersTable components for better organization. --- .../Controllers/StreamerPanelController.php | 36 +++++++++++-- .../Streamerpanel/StreamerCreateForm.php | 26 ++++++++++ .../Streamerpanel/StreamersTable.php | 28 +++++++++++ resources/css/app.css | 2 +- .../views/components/panel-navbar.blade.php | 10 ++-- .../components/streamerpanel/home.blade.php | 11 ++++ .../streamer-create-form.blade.php | 35 +++++++++++++ .../streamerpanel/streamers-table.blade.php | 50 +++++++++++++++++++ resources/views/streamerpanel/index.blade.php | 3 +- .../streamerpanel/streamer-create.blade.php | 15 ++++++ routes/web.php | 8 ++- 11 files changed, 212 insertions(+), 12 deletions(-) create mode 100644 app/View/Components/Streamerpanel/StreamerCreateForm.php create mode 100644 app/View/Components/Streamerpanel/StreamersTable.php create mode 100644 resources/views/components/streamerpanel/home.blade.php create mode 100644 resources/views/components/streamerpanel/streamer-create-form.blade.php create mode 100644 resources/views/components/streamerpanel/streamers-table.blade.php create mode 100644 resources/views/streamerpanel/streamer-create.blade.php diff --git a/app/Http/Controllers/StreamerPanelController.php b/app/Http/Controllers/StreamerPanelController.php index 46e276a..14dcf1a 100644 --- a/app/Http/Controllers/StreamerPanelController.php +++ b/app/Http/Controllers/StreamerPanelController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\Streamer; +use App\Models\Champion; use Illuminate\Http\Request; class StreamerPanelController extends Controller @@ -22,7 +23,9 @@ class StreamerPanelController extends Controller */ public function create() { - // + return view('streamerpanel.streamer-create', [ + 'champions' => Champion::all(), + ]); } /** @@ -30,7 +33,16 @@ class StreamerPanelController extends Controller */ public function store(Request $request) { - // + $request->validate([ + 'champion_id' => 'required|exists:champions,id', + 'platform' => 'required|in:twitch,youtube,kick,douyu,huya', + 'username' => 'required|string', + 'displayname' => 'required|string', + ]); + + Streamer::create($request->all()); + + return redirect()->route('streamerpanel.index'); } /** @@ -38,7 +50,10 @@ class StreamerPanelController extends Controller */ public function edit(Streamer $streamer) { - // + return view('streamerpanel.streamer-edit', [ + 'streamer' => $streamer, + 'champions' => Champion::all(), + ]); } /** @@ -46,7 +61,16 @@ class StreamerPanelController extends Controller */ public function update(Request $request, Streamer $streamer) { - // + $request->validate([ + 'champion_id' => 'required|exists:champions,id', + 'platform' => 'required|in:twitch,youtube,kick,douyu,huya', + 'username' => 'required|string', + 'displayname' => 'required|string', + ]); + + $streamer->update($request->all()); + + return redirect()->route('streamerpanel.index'); } /** @@ -54,6 +78,8 @@ class StreamerPanelController extends Controller */ public function destroy(Streamer $streamer) { - // + $streamer->delete(); + + return redirect()->route('streamerpanel.index'); } } diff --git a/app/View/Components/Streamerpanel/StreamerCreateForm.php b/app/View/Components/Streamerpanel/StreamerCreateForm.php new file mode 100644 index 0000000..8a15adb --- /dev/null +++ b/app/View/Components/Streamerpanel/StreamerCreateForm.php @@ -0,0 +1,26 @@ +streamers = $streamers; + } + + /** + * Get the view / contents that represent the component. + */ + public function render(): View + { + return view('components.streamerpanel.streamers-table'); + } +} diff --git a/resources/css/app.css b/resources/css/app.css index a320b96..932803b 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -118,4 +118,4 @@ font-style: normal; font-weight: 900; src: url('/fonts/inter-v13-latin-900.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ -} \ No newline at end of file +} diff --git a/resources/views/components/panel-navbar.blade.php b/resources/views/components/panel-navbar.blade.php index a9f689f..ef8287c 100644 --- a/resources/views/components/panel-navbar.blade.php +++ b/resources/views/components/panel-navbar.blade.php @@ -19,13 +19,15 @@ diff --git a/resources/views/components/streamerpanel/home.blade.php b/resources/views/components/streamerpanel/home.blade.php new file mode 100644 index 0000000..7de05bb --- /dev/null +++ b/resources/views/components/streamerpanel/home.blade.php @@ -0,0 +1,11 @@ +
+

+ Streamers

+ +
diff --git a/resources/views/components/streamerpanel/streamer-create-form.blade.php b/resources/views/components/streamerpanel/streamer-create-form.blade.php new file mode 100644 index 0000000..0b84d38 --- /dev/null +++ b/resources/views/components/streamerpanel/streamer-create-form.blade.php @@ -0,0 +1,35 @@ +
+ @csrf +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
diff --git a/resources/views/components/streamerpanel/streamers-table.blade.php b/resources/views/components/streamerpanel/streamers-table.blade.php new file mode 100644 index 0000000..06e184f --- /dev/null +++ b/resources/views/components/streamerpanel/streamers-table.blade.php @@ -0,0 +1,50 @@ +@push('top_scripts') + + +@endpush + +
+
+
+ + + +@push('bottom_scripts') + +@endpush diff --git a/resources/views/streamerpanel/index.blade.php b/resources/views/streamerpanel/index.blade.php index 75c6092..946ab91 100644 --- a/resources/views/streamerpanel/index.blade.php +++ b/resources/views/streamerpanel/index.blade.php @@ -4,5 +4,6 @@ @section('description', 'Heimerdinger.LoL: Streamer Panel for managing your streamer requests.') @section('content') - hello world + + @endsection diff --git a/resources/views/streamerpanel/streamer-create.blade.php b/resources/views/streamerpanel/streamer-create.blade.php new file mode 100644 index 0000000..9ecbe22 --- /dev/null +++ b/resources/views/streamerpanel/streamer-create.blade.php @@ -0,0 +1,15 @@ +@extends('layouts.streamerpanel') + +@section('title', 'Streamer Panel • Heimerdinger.LoL') +@section('description', 'Heimerdinger.LoL: Streamer Panel for managing your streamer requests.') + +@section('content') +
+

+ Add a new Streamer

+ + +
+ +@endsection diff --git a/routes/web.php b/routes/web.php index d4034a3..8d39281 100644 --- a/routes/web.php +++ b/routes/web.php @@ -18,6 +18,7 @@ use App\Models\SummonerIcon; use Illuminate\Support\Facades\Route; use Spatie\Honeypot\ProtectAgainstSpam; use Spatie\Sheets\Sheet; +use Illuminate\Http\Request; /* |-------------------------------------------------------------------------- @@ -81,4 +82,9 @@ Route::get('/resource/sitemap', static fn () => (new HTMLSitemapController())->i Route::get(config('app.login_route'), static fn () => redirect('/pulse'))->name('login')->middleware('auth.basic'); // Streamer Panel -Route::get('/streamerpanel', static fn () => (new \App\Http\Controllers\StreamerPanelController())->index())->name('streamers.index')->middleware('auth.basic'); +Route::get('/streamerpanel', static fn () => (new \App\Http\Controllers\StreamerPanelController())->index())->name('streamerpanel.index')->middleware('auth.basic'); +Route::get('/streamerpanel/add', static fn () => (new \App\Http\Controllers\StreamerPanelController())->create())->name('streamerpanel.streamers.create')->middleware('auth.basic'); +Route::post('/streamerpanel/add', static fn (Request $request) => (new \App\Http\Controllers\StreamerPanelController())->store($request))->name('streamerpanel.store')->middleware('auth.basic'); +Route::get('/streamerpanel/edit/{streamer}', static fn (\App\Models\Streamer $streamer) => (new \App\Http\Controllers\StreamerPanelController())->edit($streamer))->name('streamerpanel.edit')->middleware('auth.basic'); +Route::post('/streamerpanel/edit/{streamer}', static fn (Request $request, \App\Models\Streamer $streamer) => (new \App\Http\Controllers\StreamerPanelController())->update($request, $streamer))->name('streamerpanel.update')->middleware('auth.basic'); +Route::delete('/streamerpanel/delete/{streamer}', static fn (\App\Models\Streamer $streamer) => (new \App\Http\Controllers\StreamerPanelController())->destroy($streamer))->name('streamerpanel.destroy')->middleware('auth.basic');