feat: add new api for search media

This commit is contained in:
2026-06-15 14:27:13 +03:30
parent 6293c7aa6e
commit a9bf567764
2 changed files with 19 additions and 18 deletions
+18 -18
View File
@@ -326,33 +326,33 @@ public function filters(Request $request)
->groupBy('duration_range') ->groupBy('duration_range')
->get(); ->get();
/* return response()->json([
|-------------------------------------------------------------------------- 'categories' => $categories,
| 3️⃣ The media matching the chosen filters (so one call returns both the 'subcategories' => $subcategories,
| filter options and the result list the user asked for). 'durations' => $durations,
|-------------------------------------------------------------------------- ]);
*/ }
$mediaQuery = Media::with(['image', 'detailImage', 'categories', 'subCategories', 'myNote', 'tags']) // SEARCH/filter results — paginated. Accepts the same filters as /media
// (categories, subcategories, durations, tags, search) plus ?page= & ?per_page=.
public function search(Request $request)
{
$query = Media::with(['image', 'detailImage', 'categories', 'subCategories', 'myNote', 'tags'])
->where(function ($q) { ->where(function ($q) {
$q->where('visibility', 'public') $q->where('visibility', 'public')
->orWhere('user_id', auth()->id()); ->orWhere('user_id', auth()->id());
}); });
$this->applyMediaFilters($mediaQuery, $request); $this->applyMediaFilters($query, $request);
$mediaQuery->orderBy('created_at', 'desc'); $perPage = (int) $request->input('per_page', 20);
$perPage = max(1, min($perPage, 100));
if ($request->filled('count')) { $results = $query->orderBy('created_at', 'desc')
$mediaQuery->limit(max(1, (int) $request->input('count'))); ->paginate($perPage)
} ->withQueryString();
return response()->json([ return response()->json($results);
'categories' => $categories,
'subcategories' => $subcategories,
'durations' => $durations,
'media' => $mediaQuery->get(),
]);
} }
public function show($id) public function show($id)
+1
View File
@@ -228,6 +228,7 @@
///media ///media
Route::get('/media/filters', [MediaController::class, 'filters']); Route::get('/media/filters', [MediaController::class, 'filters']);
Route::get('/media/search', [MediaController::class, 'search']);
Route::get('/media/popular', [MediaController::class, 'popular']); Route::get('/media/popular', [MediaController::class, 'popular']);
Route::get('/media/newest', [MediaController::class, 'newest']); Route::get('/media/newest', [MediaController::class, 'newest']);
Route::get('/media/recently-played', [MediaController::class, 'recentlyPlayed']); Route::get('/media/recently-played', [MediaController::class, 'recentlyPlayed']);