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')
->get();
/*
|--------------------------------------------------------------------------
| 3️⃣ The media matching the chosen filters (so one call returns both the
| filter options and the result list the user asked for).
|--------------------------------------------------------------------------
*/
return response()->json([
'categories' => $categories,
'subcategories' => $subcategories,
'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) {
$q->where('visibility', 'public')
->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')) {
$mediaQuery->limit(max(1, (int) $request->input('count')));
}
$results = $query->orderBy('created_at', 'desc')
->paginate($perPage)
->withQueryString();
return response()->json([
'categories' => $categories,
'subcategories' => $subcategories,
'durations' => $durations,
'media' => $mediaQuery->get(),
]);
return response()->json($results);
}
public function show($id)