fix
This commit is contained in:
@@ -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([
|
||||||
|
|||||||
Reference in New Issue
Block a user