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
+16 -5
View File
@@ -7,12 +7,15 @@
use App\Models\Category;
use App\Models\SubCategory;
use App\Models\Tag;
use App\Traits\HandlesImageUpload;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class MediaController extends Controller
{
use HandlesImageUpload;
// CREATE media
public function store(Request $request)
{
@@ -25,6 +28,7 @@ public function store(Request $request)
'subcategory_ids' => 'nullable|array',
'subcategory_ids.*' => 'integer|exists:sub_categories,id',
'image_id' => 'nullable|exists:images,id',
'image' => 'nullable|image|max:8192',
'duration' => 'nullable|integer',
'is_premium' => 'nullable|boolean',
'file' => 'nullable|mimes:mp3,wav,mp4,mov|max:512000',
@@ -40,6 +44,9 @@ public function store(Request $request)
$path = $request->file('file')->store('media', 'public');
}
// An uploaded image file takes precedence over a provided image_id.
$imageId = $this->uploadedImageId($request) ?? ($data['image_id'] ?? null);
$media = Media::create([
'user_id' => auth()->id(),
'title' => $data['title'],
@@ -47,7 +54,7 @@ public function store(Request $request)
'type' => $data['type'],
'file_path' => $path,
'external_url' => $data['external_url'] ?? null,
'image_id' => $data['image_id'] ?? null,
'image_id' => $imageId,
'duration' => $data['duration'] ?? null,
'visibility' => $data['visibility'] ?? 'public',
'is_premium'=> $data['is_premium'] ?? false
@@ -469,6 +476,7 @@ public function update(Request $request, $id)
'subcategory_ids.*' => 'integer|exists:sub_categories,id',
'is_premium' => 'nullable|boolean',
'image_id' => 'nullable|exists:images,id',
'image' => 'nullable|image|max:8192',
'duration' => 'nullable|integer',
'file' => 'nullable|mimes:mp3,wav,mp4,mov|max:512000',
'external_url' => 'nullable|string',
@@ -495,10 +503,13 @@ public function update(Request $request, $id)
'file_path' => $data['file_path'] ?? $media->file_path,
];
// --- Handle image_id specifically ---
// If image_id is provided in request, use it (even if null to remove association)
// If not provided, keep the existing value
if (array_key_exists('image_id', $data)) {
// --- Handle image ---
// An uploaded image file wins; otherwise an explicit image_id (even null to
// clear) is honored; otherwise the existing value is kept.
$uploadedImageId = $this->uploadedImageId($request);
if ($uploadedImageId !== null) {
$updateData['image_id'] = $uploadedImageId;
} elseif (array_key_exists('image_id', $data)) {
$updateData['image_id'] = $data['image_id'];
} else {
$updateData['image_id'] = $media->image_id;