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')]); } }