function($q) { $q->where('is_active', true)->orderBy('order'); }]); if ($request->has('category_id')) { $query->where('category_id', $request->category_id); } $subcategories = $query->where('is_active', true)->orderBy('order')->get(); return response()->json($subcategories); } public function store(Request $request) { try { $data = $request->validate([ 'category_id' => 'required|exists:music_categories,id', 'name' => 'required|string|max:255', 'description' => 'nullable|string', 'image_id' => 'nullable|exists:images,id', 'order' => 'nullable|integer', 'is_active' => 'nullable|boolean', ]); $slug = Str::slug($data['name']); // Check for duplicate in same category $existing = MusicSubcategory::where('category_id', $data['category_id']) ->where('slug', $slug) ->first(); if ($existing) { return response()->json([ 'message' => 'A subcategory with this name already exists in this category', 'errors' => ['name' => ['The subcategory name must be unique within this category.']] ], 422); } $data['slug'] = $slug; $subcategory = MusicSubcategory::create($data); return response()->json([ 'message' => 'Subcategory created successfully', 'subcategory' => $subcategory->load(['category', 'image']) ], 201); } catch (\Exception $e) { return response()->json([ 'message' => 'An error occurred while creating the subcategory', 'error' => $e->getMessage() ], 500); } } public function show($id) { $subcategory = MusicSubcategory::with([ 'category', 'image', 'playlists' => function($q) { $q->with(['image', 'musics' => function($q2) { $q2->where('music.is_active', true)->with('image')->orderBy('music_playlist.order'); }])->where('is_active', true)->orderBy('order'); } ])->findOrFail($id); return response()->json($subcategory); } public function update(Request $request, $id) { $subcategory = MusicSubcategory::findOrFail($id); $data = $request->validate([ 'category_id' => 'sometimes|exists:music_categories,id', 'name' => 'sometimes|string|max:255', 'description' => 'nullable|string', 'image_id' => 'nullable|exists:images,id', 'order' => 'nullable|integer', 'is_active' => 'nullable|boolean', ]); if (isset($data['name'])) { $data['slug'] = Str::slug($data['name']); } $subcategory->update($data); return response()->json([ 'message' => 'Subcategory updated successfully', 'subcategory' => $subcategory->load(['category', 'image']) ]); } public function destroy($id) { $subcategory = MusicSubcategory::findOrFail($id); $subcategory->delete(); return response()->json(['message' => 'Subcategory deleted successfully']); } }