feat: add music feature

This commit is contained in:
2026-05-19 08:22:10 +03:30
parent b63fdc5439
commit 65db1bd5da
11 changed files with 489 additions and 10 deletions
+69 -1
View File
@@ -3,11 +3,79 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\MusicPlaylist;
use App\Models\Music;
use Illuminate\Support\Facades\Storage;
class MusicController extends Controller
{
{ public function getMusicByPlaylist($playlistId)
{
$playlist = MusicPlaylist::findOrFail($playlistId);
$music = Music::where('playlist_id', $playlistId)
->where('is_active', true)
->with(['image', 'tags'])
->orderBy('order')
->get();
return response()->json([
'playlist' => $playlist->load('image'),
'musics' => $music
]);
}
public function addToPlaylist(Request $request, $musicId)
{
$music = Music::where('id', $musicId)
->where(function($q) {
$q->where('type', 'public')
->orWhere('user_id', auth()->id());
})
->firstOrFail();
$data = $request->validate([
'playlist_id' => 'required|exists:music_playlists,id',
'order' => 'nullable|integer',
]);
$music->update([
'playlist_id' => $data['playlist_id'],
'order' => $data['order'] ?? $music->order,
]);
return response()->json([
'message' => 'Music added to playlist successfully',
'music' => $music->load(['image', 'playlist'])
]);
}
public function removeFromPlaylist($musicId)
{
$music = Music::where('id', $musicId)
->where('user_id', auth()->id())
->firstOrFail();
$music->update(['playlist_id' => null]);
return response()->json(['message' => 'Music removed from playlist']);
}
public function updateOrder(Request $request)
{
$data = $request->validate([
'musics' => 'required|array',
'musics.*.id' => 'required|exists:music,id',
'musics.*.order' => 'required|integer',
]);
foreach ($data['musics'] as $item) {
Music::where('id', $item['id'])
->where('user_id', auth()->id())
->update(['order' => $item['order']]);
}
return response()->json(['message' => 'Order updated successfully']);
}
// ✅ Upload music
public function store(Request $request)
{