Files
neonail-database/app/Http/Controllers/NailPolishImportController.php
T
HousemannandClaude Sonnet 4.6 ecac206a6c Fix background queue and add image compression on import
- Switch queue from sync to database so Ollama job truly runs in background
- Compress uploaded images to max 1200px JPEG 85% before storage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 17:57:33 +02:00

72 lines
2.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Jobs\ProcessNailPolishImage;
use App\Models\NailPolishImport;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
class NailPolishImportController extends Controller
{
public function index()
{
$imports = NailPolishImport::where('user_id', auth()->id())
->latest()
->paginate(20);
return view('nail-polish-imports.index', compact('imports'));
}
public function create()
{
return view('nail-polish-imports.create');
}
public function store(Request $request)
{
$request->validate([
'image' => 'required|image|mimes:jpeg,png,jpg,webp|max:10240',
]);
$file = $request->file('image');
$filename = 'nail-polish-imports/' . uniqid() . '.jpg';
$manager = new ImageManager(new Driver());
$image = $manager->read($file->getRealPath());
// Auf max. 1200px skalieren und als JPEG mit 85% Qualität speichern
$image->scaleDown(width: 1200, height: 1200);
Storage::disk('public')->put($filename, $image->toJpeg(85));
$path = $filename;
$import = NailPolishImport::create([
'user_id' => auth()->id(),
'image_path' => $path,
'status' => 'pending',
]);
ProcessNailPolishImage::dispatch($import->id);
$redirectUrl = route('nail-polish-imports.show', $import);
if (request()->ajax()) {
return response()->json(['redirect' => $redirectUrl]);
}
return redirect($redirectUrl)
->with('success', 'Bild hochgeladen! Die KI analysiert es jetzt im Hintergrund.');
}
public function show(NailPolishImport $nailPolishImport)
{
// Nur eigene Imports ansehen
abort_if($nailPolishImport->user_id !== auth()->id(), 403);
return view('nail-polish-imports.show', ['import' => $nailPolishImport->load('nailPolish.manufacturer')]);
}
}