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) { $movie = Movie::with('director', 'watchProviders') ->where('slug', $slug) ->firstOrFail(); $comments = Comment::where('entity_id', $movie->id) ->where('entity_type', Comment::TYPE_MOVIE) ->paginate(15); $userLists = []; if (Auth::check()) { $userLists = MediaList::whereNotIn('name', MediaList::SPECIAL_LISTS) ->where('user_id', Auth::user()->id) ->get(); } return view('movie.show', compact('movie', 'comments', 'userLists')); } public function storeComment(CommentRequest $request, string $movieSlug) { $movie = Movie::where('slug', $movieSlug)->firstOrFail(); Comment::create([ 'entity_id' => $movie->id, 'entity_type' => Comment::TYPE_MOVIE, 'user_id' => auth()->user()->id, 'content' => $request->get('content'), 'published_at' => new \DateTime(), ]); return redirect()->back()->with('success', 'Comment posted!'); } }