This commit is contained in:
2026-06-13 18:40:18 +03:30
parent 3a2a27be98
commit ab10f03afe
@@ -3,6 +3,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\Category; use App\Models\Category;
use App\Models\MusicCategory;
use App\Traits\StoresUploads; use App\Traits\StoresUploads;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
@@ -14,6 +15,12 @@ class CategoryController extends Controller
public function index(Request $request) public function index(Request $request)
{ {
// Playlist categories live in their own table (music_categories); serve
// them here too so the front has one /categories?type=... entry point.
if ($request->input('type') === Category::TYPE_PLAYLIST) {
return response()->json($this->playlistCategories($request));
}
$query = Category::query()->withCount('subcategories'); $query = Category::query()->withCount('subcategories');
if ($request->filled('type')) { if ($request->filled('type')) {
@@ -29,6 +36,37 @@ public function index(Request $request)
); );
} }
// Music categories normalized to the generic category shape.
private function playlistCategories(Request $request)
{
$query = MusicCategory::query()->with('image')->withCount('subcategories');
if (!$request->boolean('include_inactive')) {
$query->where('is_active', true);
}
if ($request->boolean('with_subcategories')) {
$query->with('subcategories.image');
}
return $query->orderBy('order')->get()->map(function ($c) use ($request) {
return [
'id' => $c->id,
'name' => $c->name,
'type' => Category::TYPE_PLAYLIST,
'description' => $c->description,
'icon' => $c->image?->path,
'icon_url' => $c->image?->url,
'order' => $c->order,
'is_active' => $c->is_active,
'subcategories_count' => $c->subcategories_count,
'subcategories' => $request->boolean('with_subcategories') ? $c->subcategories : null,
'created_at' => $c->created_at,
'updated_at' => $c->updated_at,
];
});
}
public function store(Request $request) public function store(Request $request)
{ {
$data = $request->validate([ $data = $request->validate([