From 370f8f34315ebc5cfd6b37a6aff8bedb04d4ced0 Mon Sep 17 00:00:00 2001 From: Doar Mihai Date: Sun, 8 Mar 2026 11:51:04 +0200 Subject: [PATCH] some progress --- app/Http/Controllers/MovieController.php | 63 +++++++++- resources/sass/app.scss | 2 + .../movie-page/tabs/details.blade.php | 4 +- resources/views/movie/index.blade.php | 108 +++++++++++++++++- 4 files changed, 171 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/MovieController.php b/app/Http/Controllers/MovieController.php index 2c440bb..4ed706f 100644 --- a/app/Http/Controllers/MovieController.php +++ b/app/Http/Controllers/MovieController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Http\Requests\Movie\CommentRequest; use App\Models\Comment; +use App\Models\Genre; use App\Models\MediaList; use App\Models\Movie; use Illuminate\Http\Request; @@ -11,11 +12,67 @@ use Illuminate\Support\Facades\Auth; class MovieController extends Controller { - public function index() + public function index(Request $request) { - $movies = Movie::orderBy('release_date', 'ASC')->paginate(60); + $query = Movie::query(); - return view('movie.index', compact('movies')); + // Search by title + if ($request->filled('title')) { + $query->where('title', 'LIKE', '%' . $request->title . '%'); + } + + // Filter by genre + if ($request->filled('genre')) { + $query->whereHas('genres', function ($q) use ($request) { + $q->where('genre_id', $request->genre); + }); + } + + // Filter by actor + if ($request->filled('actor')) { + $query->whereHas('castList', function ($q) use ($request) { + $q->where('person_id', $request->actor); + }); + } + + // Filter by director + if ($request->filled('director')) { + $query->whereHas('director', function ($q) use ($request) { + $q->where('person_id', $request->director); + }); + } + + // Filter by rating + if ($request->filled('rating_min')) { + $query->where('vote_average', '>=', $request->rating_min); + } + if ($request->filled('rating_max')) { + $query->where('vote_average', '<=', $request->rating_max); + } + + // Filter by release year + if ($request->filled('year_min')) { + $query->whereYear('release_date', '>=', $request->year_min); + } + if ($request->filled('year_max')) { + $query->whereYear('release_date', '<=', $request->year_max); + } + + // Sorting + $sortBy = $request->get('sort_by', 'release_date'); + $sortOrder = $request->get('sort_order', 'DESC'); + + $allowedSorts = ['title', 'release_date', 'vote_average', 'vote_count']; + if (in_array($sortBy, $allowedSorts)) { + $query->orderBy($sortBy, $sortOrder); + } + + $movies = $query->paginate(60)->appends($request->except('page')); + + // Get all genres for filter dropdowns + $genres = Genre::orderBy('name')->get(); + + return view('movie.index', compact('movies', 'genres')); } public function show(string $slug) diff --git a/resources/sass/app.scss b/resources/sass/app.scss index 097e6e3..540622e 100644 --- a/resources/sass/app.scss +++ b/resources/sass/app.scss @@ -330,6 +330,7 @@ $fa-font-path: "/fonts"; border-radius: 8px; overflow: hidden; transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; + margin-bottom: 15px; &:hover { transform: translateY(-5px); @@ -1165,6 +1166,7 @@ body.light-mode{ border-radius: 8px; overflow: hidden; transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; + margin-bottom: 15px; &:hover { transform: translateY(-5px); diff --git a/resources/views/livewire/movie-page/tabs/details.blade.php b/resources/views/livewire/movie-page/tabs/details.blade.php index 99a7378..77a24c5 100644 --- a/resources/views/livewire/movie-page/tabs/details.blade.php +++ b/resources/views/livewire/movie-page/tabs/details.blade.php @@ -5,7 +5,7 @@
@foreach($productionCompanies as $productionCompany) - {{ $productionCompany->name }} + {{ $productionCompany->name }}@if(!$loop->last), @endif @endforeach
@@ -16,7 +16,7 @@
@foreach($productionCountries as $productionCountry) - {{ $productionCountry->name }} + {{ $productionCountry->name }}@if(!$loop->last), @endif @endforeach
diff --git a/resources/views/movie/index.blade.php b/resources/views/movie/index.blade.php index 7e4f2d3..36b8fad 100644 --- a/resources/views/movie/index.blade.php +++ b/resources/views/movie/index.blade.php @@ -4,8 +4,114 @@
+ +
+
+
+ Advanced Search & Filters + +
+
+
+
+
+
+ +
+ + +
+ + +
+ + +
+ + +
+ +
+ + to + +
+
+ + +
+ +
+ + to + +
+
+ + +
+ + +
+ + +
+ + +
+
+ +
+ + + Clear All + +
+
+
+
+
+ +
-
Movies
+
+ Movies + @if(request()->hasAny(['title', 'genre', 'rating_min', 'rating_max', 'year_min', 'year_max'])) + Filtered + @endif + ({{ $movies->total() }} results) +
@foreach($movies as $movie)