This commit is contained in:
2026-06-13 19:08:46 +03:30
parent f097a1e50c
commit 65bd416599
2 changed files with 18 additions and 3 deletions
@@ -3,11 +3,14 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\MusicPlaylist; use App\Models\MusicPlaylist;
use App\Models\MusicCategory; use App\Models\MusicCategory;
use App\Traits\HandlesImageUpload;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class MusicCategoryController extends Controller class MusicCategoryController extends Controller
{ {
use HandlesImageUpload;
public function index() public function index()
{ {
$categories = MusicCategory::with(['image', 'playlists' => function($q) { $categories = MusicCategory::with(['image', 'playlists' => function($q) {
@@ -24,10 +27,14 @@ public function store(Request $request)
'name' => 'required|string|max:255', 'name' => 'required|string|max:255',
'description' => 'nullable|string', 'description' => 'nullable|string',
'image_id' => 'nullable|exists:images,id', 'image_id' => 'nullable|exists:images,id',
'image' => 'nullable|file|extensions:jpg,jpeg,png,gif,webp,bmp,svg|max:8192',
'order' => 'nullable|integer', 'order' => 'nullable|integer',
'is_active' => 'nullable|boolean', 'is_active' => 'nullable|boolean',
]); ]);
// An uploaded image file takes precedence over a provided image_id.
$data['image_id'] = $this->uploadedImageId($request) ?? ($data['image_id'] ?? null);
// Check for duplicate name // Check for duplicate name
$slug = Str::slug($data['name']); $slug = Str::slug($data['name']);
$existingCategory = MusicCategory::where('slug', $slug)->first(); $existingCategory = MusicCategory::where('slug', $slug)->first();
@@ -132,14 +139,20 @@ public function update(Request $request, $id)
'name' => 'sometimes|string|max:255', 'name' => 'sometimes|string|max:255',
'description' => 'nullable|string', 'description' => 'nullable|string',
'image_id' => 'nullable|exists:images,id', 'image_id' => 'nullable|exists:images,id',
'image' => 'nullable|file|extensions:jpg,jpeg,png,gif,webp,bmp,svg|max:8192',
'order' => 'nullable|integer', 'order' => 'nullable|integer',
'is_active' => 'nullable|boolean', 'is_active' => 'nullable|boolean',
]); ]);
if (isset($data['name'])) { if (isset($data['name'])) {
$data['slug'] = Str::slug($data['name']); $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;
}
$category->update($data); $category->update($data);
return response()->json([ return response()->json([
+2
View File
@@ -258,6 +258,8 @@
// Music Categories // Music Categories
// Category with its sub-categories, each carrying its playlists. // Category with its sub-categories, each carrying its playlists.
Route::get('music-categories/{id}/grouped', [MusicCategoryController::class, 'grouped']); Route::get('music-categories/{id}/grouped', [MusicCategoryController::class, 'grouped']);
// Explicit POST update so an image can be uploaded (multipart can't ride a PUT).
Route::post('music-categories/{id}', [MusicCategoryController::class, 'update']);
Route::apiResource('music-categories', MusicCategoryController::class); Route::apiResource('music-categories', MusicCategoryController::class);
Route::get('public/music-categories', [MusicCategoryController::class, 'index']); Route::get('public/music-categories', [MusicCategoryController::class, 'index']);