Files
back-meditation/app/Http/Controllers/ImageController.php
T
2025-09-26 11:42:31 +03:30

123 lines
3.4 KiB
PHP

<?php
// app/Http/Controllers/ImageController.php
namespace App\Http\Controllers;
use App\Models\Image;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class ImageController extends Controller
{
public function store(Request $request)
{
$data = $request->validate([
'image' => 'required|image|max:2048',
'title' => 'nullable|string|max:255',
'description' => 'nullable|string|max:500',
'type' => 'nullable|in:public,private',
]);
$path = $request->file('image')->store('images', 'public');
$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|image|max:2048',
]);
if ($request->hasFile('image')) {
// delete old image
Storage::disk('public')->delete($image->path);
// store new one
$path = $request->file('image')->store('images', 'public');
$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']);
}
}