has('category_id')) { $query->where('category_id', $request->category_id)->whereNull('subcategory_id'); } if ($request->has('subcategory_id')) { $query->where('subcategory_id', $request->subcategory_id); } $playlists = $query->where('is_active', true)->orderBy('order')->get(); return response()->json($playlists); } public function store(Request $request) { $data = $request->validate([ 'category_id' => 'nullable|exists:music_categories,id', 'subcategory_id' => 'nullable|exists:music_subcategories,id', 'name' => 'required|string|max:255', 'description' => 'nullable|string', 'image_id' => 'nullable|exists:images,id', 'order' => 'nullable|integer', 'is_active' => 'nullable|boolean', ]); // Ensure either category_id or subcategory_id is provided if (!$data['category_id'] && !$data['subcategory_id']) { return response()->json([ 'message' => 'Either category_id or subcategory_id is required' ], 422); } $data['slug'] = Str::slug($data['name']); $playlist = MusicPlaylist::create($data); return response()->json([ 'message' => 'Playlist created successfully', 'playlist' => $playlist->load(['category', 'subcategory', 'image']) ], 201); } public function show($id) { $playlist = MusicPlaylist::with([ 'category', 'subcategory', 'image', 'musics' => function($q) { $q->where('is_active', true) ->with(['image', 'tags']) ->orderBy('order'); }, 'comments' => function($q) { // Add comments relationship $q->with('user')->latest()->limit(10); } ])->findOrFail($id); $userComment = $playlist->userComment(); $comments = $playlist->comments() ->with('user') ->latest() ->paginate(15); return response()->json([ 'playlist' => $playlist, 'statistics' => [ 'total_musics' => $playlist->musics->count(), 'total_duration' => $playlist->total_duration, 'total_comments' => $playlist->comments_count, 'total_likes' => $playlist->likes_count, 'total_saves' => $playlist->saved_count, ], 'user_interaction' => [ 'has_commented' => $playlist->has_user_commented, 'user_comment' => $playlist->user_comment, 'user_comment_id' => $playlist->user_comment_id, 'has_liked' => $playlist->is_liked, 'has_saved' => $playlist->is_saved, ], 'comments' => $comments, ]); } public function update(Request $request, $id) { $playlist = MusicPlaylist::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']); } $playlist->update($data); return response()->json([ 'message' => 'Playlist updated successfully', 'playlist' => $playlist->load(['category', 'image']) ]); } public function destroy($id) { $playlist = MusicPlaylist::findOrFail($id); $playlist->delete(); return response()->json(['message' => 'Playlist deleted successfully']); } }