feat: add new api for search media
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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']);
|
||||||
|
|||||||
Reference in New Issue
Block a user