feat: add image upload trait

This commit is contained in:
2026-06-03 03:05:11 +03:30
parent 6f01c783fd
commit 79303de0fb
3 changed files with 62 additions and 8 deletions
+17 -3
View File
@@ -5,10 +5,12 @@
use Illuminate\Http\Request;
use App\Models\MusicPlaylist;
use App\Models\Music;
use App\Traits\HandlesImageUpload;
use Illuminate\Support\Facades\Storage;
class MusicController extends Controller
{
use HandlesImageUpload;
// Add this new method to your MusicController
public function getAllMusic()
@@ -135,6 +137,7 @@ public function store(Request $request)
'file' => 'required|mimes:mp3,wav,ogg,flac|max:20971520',
'type' => 'nullable|in:public,private',
'image_id' => 'nullable|exists:images,id',
'image' => 'nullable|image|max:8192',
'playlist_id' => 'nullable|exists:music_playlists,id', // single (backward compatible)
'playlist_ids' => 'nullable|array', // multiple
'playlist_ids.*' => 'integer|exists:music_playlists,id',
@@ -165,13 +168,16 @@ public function store(Request $request)
], 500);
}
// An uploaded image file takes precedence over a provided image_id.
$imageId = $this->uploadedImageId($request) ?? ($data['image_id'] ?? null);
$music = Music::create([
'user_id' => auth()->id(),
'title' => $data['title'],
'artist' => $data['artist'] ?? null,
'file_path' => $path,
'type' => $data['type'] ?? 'private',
'image_id' => $data['image_id'] ?? null,
'image_id' => $imageId,
'duration' => $data['duration'] ?? null, // Store as string
'is_active' => true,
]);
@@ -234,6 +240,7 @@ public function update(Request $request, $id)
'type' => 'nullable|in:public,private',
'file' => 'nullable|mimes:mp3,wav,ogg,flac|max:20971520',
'image_id' => 'nullable|exists:images,id',
'image' => 'nullable|image|max:8192',
'duration' => 'nullable|integer|min:1',
'is_active' => 'nullable|boolean',
]);
@@ -245,8 +252,15 @@ public function update(Request $request, $id)
$music->file_path = $path;
}
// Update only provided fields
$music->fill($data);
// Update only provided fields (drop the raw file input from mass-assign).
$music->fill(collect($data)->except('image')->toArray());
// An uploaded image file takes precedence over a provided image_id.
$uploadedImageId = $this->uploadedImageId($request);
if ($uploadedImageId !== null) {
$music->image_id = $uploadedImageId;
}
$music->save();
return response()->json([