feat: add group media and music
This commit is contained in:
@@ -65,6 +65,33 @@ public function show($id)
|
|||||||
return response()->json($category);
|
return response()->json($category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Category with each of its sub-categories and that sub-category's medias.
|
||||||
|
public function grouped($id)
|
||||||
|
{
|
||||||
|
$category = Category::with(['subcategories' => function ($q) {
|
||||||
|
$q->orderBy('name')->with(['media' => function ($m) {
|
||||||
|
$m->with(['image', 'detailImage', 'tags'])->latest();
|
||||||
|
}]);
|
||||||
|
}])->findOrFail($id);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'category' => [
|
||||||
|
'id' => $category->id,
|
||||||
|
'title' => $category->name,
|
||||||
|
'description' => $category->description,
|
||||||
|
'icon_url' => $category->icon_url,
|
||||||
|
],
|
||||||
|
'sub_categories' => $category->subcategories->map(fn ($sub) => [
|
||||||
|
'sub_category' => [
|
||||||
|
'id' => $sub->id,
|
||||||
|
'title' => $sub->name,
|
||||||
|
'description' => $sub->description,
|
||||||
|
],
|
||||||
|
'medias' => $sub->media,
|
||||||
|
])->values(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
public function update(Request $request, $id)
|
public function update(Request $request, $id)
|
||||||
{
|
{
|
||||||
$category = Category::findOrFail($id);
|
$category = Category::findOrFail($id);
|
||||||
|
|||||||
@@ -89,6 +89,40 @@ public function show($id)
|
|||||||
return response()->json($category);
|
return response()->json($category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Category with each of its sub-categories and that sub-category's playlists.
|
||||||
|
public function grouped($id)
|
||||||
|
{
|
||||||
|
$category = MusicCategory::with([
|
||||||
|
'image',
|
||||||
|
'subcategories' => function ($q) {
|
||||||
|
$q->orderBy('order')->with([
|
||||||
|
'image',
|
||||||
|
'playlists' => function ($p) {
|
||||||
|
$p->where('is_active', true)->with('image')->orderBy('order');
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
])->findOrFail($id);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'category' => [
|
||||||
|
'id' => $category->id,
|
||||||
|
'title' => $category->name,
|
||||||
|
'description' => $category->description,
|
||||||
|
'image_url' => $category->image?->url,
|
||||||
|
],
|
||||||
|
'sub_categories' => $category->subcategories->map(fn ($sub) => [
|
||||||
|
'sub_category' => [
|
||||||
|
'id' => $sub->id,
|
||||||
|
'title' => $sub->name,
|
||||||
|
'description' => $sub->description,
|
||||||
|
'image_url' => $sub->image?->url,
|
||||||
|
],
|
||||||
|
'playlists' => $sub->playlists,
|
||||||
|
])->values(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
public function update(Request $request, $id)
|
public function update(Request $request, $id)
|
||||||
{
|
{
|
||||||
$category = MusicCategory::findOrFail($id);
|
$category = MusicCategory::findOrFail($id);
|
||||||
|
|||||||
@@ -241,6 +241,8 @@
|
|||||||
Route::post('/media/{id}/note', [MediaController::class, 'storeNote']);
|
Route::post('/media/{id}/note', [MediaController::class, 'storeNote']);
|
||||||
|
|
||||||
// Media categories
|
// Media categories
|
||||||
|
// Category with its sub-categories, each carrying its medias.
|
||||||
|
Route::get('categories/{id}/grouped', [CategoryController::class, 'grouped']);
|
||||||
// Explicit POST update so an icon image can be uploaded (multipart can't ride a PUT).
|
// Explicit POST update so an icon image can be uploaded (multipart can't ride a PUT).
|
||||||
Route::post('categories/{id}', [CategoryController::class, 'update']);
|
Route::post('categories/{id}', [CategoryController::class, 'update']);
|
||||||
Route::apiResource('categories', CategoryController::class);
|
Route::apiResource('categories', CategoryController::class);
|
||||||
@@ -252,6 +254,8 @@
|
|||||||
|
|
||||||
|
|
||||||
// Music Categories
|
// Music Categories
|
||||||
|
// Category with its sub-categories, each carrying its playlists.
|
||||||
|
Route::get('music-categories/{id}/grouped', [MusicCategoryController::class, 'grouped']);
|
||||||
Route::apiResource('music-categories', MusicCategoryController::class);
|
Route::apiResource('music-categories', MusicCategoryController::class);
|
||||||
Route::get('public/music-categories', [MusicCategoryController::class, 'index']);
|
Route::get('public/music-categories', [MusicCategoryController::class, 'index']);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user