validate([ 'image' => 'required|file|extensions:jpg,jpeg,png,gif,webp,bmp,svg|max:8192', 'title' => 'nullable|string|max:255', 'description' => 'nullable|string|max:500', 'type' => 'nullable|in:public,private', ]); $path = $this->storeUpload($request->file('image'), 'images'); $image = Image::create([ 'user_id' => auth()->id(), 'path' => $path, 'title' => $data['title'] ?? null, 'description' => $data['description'] ?? null, 'type' => $data['type'] ?? 'private', // default private ]); return response()->json([ 'message' => 'Image uploaded successfully', 'image' => $image, 'url' => asset('storage/' . $path), ]); } public function publicImages() { $images = Image::where('type', 'public')->get(); return response()->json($images->map(function ($image) { $image->url = asset('storage/' . $image->path); return $image; })); } public function userImages() { $images = Image::where('user_id', auth()->id()) ->where('type', 'private') ->get(); return response()->json($images->map(function ($image) { $image->url = asset('storage/' . $image->path); return $image; })); } public function allImages() { $userId = auth()->id(); $images = Image::where('type', 'public') ->orWhere(function ($query) use ($userId) { $query->where('type', 'private') ->where('user_id', $userId); }) ->get(); return response()->json($images->map(function ($image) { $image->url = asset('storage/' . $image->path); return $image; })); } // ✅ Update image public function update(Request $request, $id) { $image = Image::where('id', $id) ->where('user_id', auth()->id()) // only owner can update ->firstOrFail(); $data = $request->validate([ 'title' => 'nullable|string|max:255', 'description' => 'nullable|string|max:500', 'type' => 'nullable|in:public,private', 'image' => 'nullable|file|extensions:jpg,jpeg,png,gif,webp,bmp,svg|max:8192', ]); if ($request->hasFile('image')) { // delete old image Storage::disk('public')->delete($image->path); // store new one $path = $this->storeUpload($request->file('image'), 'images'); $image->path = $path; } $image->title = $data['title'] ?? $image->title; $image->description = $data['description'] ?? $image->description; $image->type = $data['type'] ?? $image->type; $image->save(); return response()->json([ 'message' => 'Image updated successfully', 'image' => $image, 'url' => asset('storage/' . $image->path), ]); } // ✅ Delete image public function destroy($id) { $image = Image::where('id', $id) ->where('user_id', auth()->id()) // only owner can delete ->firstOrFail(); Storage::disk('public')->delete($image->path); $image->delete(); return response()->json(['message' => 'Image deleted successfully']); } }