From 0b578e15dd0d07a3ba369f69ef7e879003bfc310 Mon Sep 17 00:00:00 2001 From: AmirmahdiNourkazemi Date: Sat, 6 Jun 2026 17:20:38 +0330 Subject: [PATCH] feat: add image to playlist --- app/Http/Controllers/MusicPlaylistController.php | 13 +++++++++++++ routes/api.php | 2 ++ 2 files changed, 15 insertions(+) diff --git a/app/Http/Controllers/MusicPlaylistController.php b/app/Http/Controllers/MusicPlaylistController.php index 81fcbc3..0cd5d62 100644 --- a/app/Http/Controllers/MusicPlaylistController.php +++ b/app/Http/Controllers/MusicPlaylistController.php @@ -3,11 +3,14 @@ namespace App\Http\Controllers; use App\Models\MusicPlaylist; +use App\Traits\HandlesImageUpload; use Illuminate\Http\Request; use Illuminate\Support\Str; class MusicPlaylistController extends Controller { + use HandlesImageUpload; + public function index(Request $request, $categoryId = null) { $query = MusicPlaylist::with(['categories', 'subcategories', 'image']); @@ -42,6 +45,7 @@ public function store(Request $request) 'name' => 'required|string|max:255', 'description' => 'nullable|string', 'image_id' => 'nullable|exists:images,id', + 'image' => 'nullable|file|extensions:jpg,jpeg,png,gif,webp,bmp,svg|max:8192', 'order' => 'nullable|integer', 'is_active' => 'nullable|boolean', ]); @@ -55,6 +59,9 @@ public function store(Request $request) $data['slug'] = Str::slug($data['name']); + // An uploaded image file takes precedence over a provided image_id. + $data['image_id'] = $this->uploadedImageId($request) ?? ($data['image_id'] ?? null); + $playlist = MusicPlaylist::create($data); $playlist->categories()->sync($data['category_ids'] ?? []); @@ -119,6 +126,7 @@ public function update(Request $request, $id) 'name' => 'sometimes|string|max:255', 'description' => 'nullable|string', 'image_id' => 'nullable|exists:images,id', + 'image' => 'nullable|file|extensions:jpg,jpeg,png,gif,webp,bmp,svg|max:8192', 'order' => 'nullable|integer', 'is_active' => 'nullable|boolean', ]); @@ -127,6 +135,11 @@ public function update(Request $request, $id) $data['slug'] = Str::slug($data['name']); } + // An uploaded image file takes precedence over a provided image_id. + if (($uploadedImageId = $this->uploadedImageId($request)) !== null) { + $data['image_id'] = $uploadedImageId; + } + $playlist->update($data); if (array_key_exists('category_ids', $data)) { diff --git a/routes/api.php b/routes/api.php index af84e54..d4c0078 100644 --- a/routes/api.php +++ b/routes/api.php @@ -245,6 +245,8 @@ Route::get('public/music-categories', [MusicCategoryController::class, 'index']); // Music Playlists + // Explicit POST update so a playlist image can be uploaded (multipart can't ride a PUT). + Route::post('music-playlists/{music_playlist}', [MusicPlaylistController::class, 'update']); Route::apiResource('music-playlists', MusicPlaylistController::class); Route::get('playlists/by-category/{categoryId}', [MusicPlaylistController::class, 'index']);