get('search'); $nailPolishes = NailPolish::when($search, function($query) use ($search) { return $query->search($search); })->orderBy('name')->paginate(20); return view('nail-polishes.index', compact('nailPolishes', 'search')); } /** * Show the form for creating a new resource. */ public function create() { return view('nail-polishes.create'); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $request->validate([ 'name' => 'required|string|max:255', 'number' => 'required|string|max:50|unique:nail_polishes', 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048' ]); $nailPolish = new NailPolish(); $nailPolish->name = $request->name; $nailPolish->number = $request->number; if ($request->hasFile('image')) { $image = $request->file('image'); $filename = time() . '_' . $image->getClientOriginalName(); // Bild optimieren und speichern $optimizedImage = Image::make($image) ->resize(300, 300, function ($constraint) { $constraint->aspectRatio(); $constraint->upsize(); }) ->encode('jpg', 80); Storage::disk('public')->put('nail-polishes/' . $filename, $optimizedImage); $nailPolish->image_path = 'nail-polishes/' . $filename; } $nailPolish->save(); return redirect()->route('nail-polishes.index') ->with('success', 'Nagellack erfolgreich hinzugefügt!'); } /** * Display the specified resource. */ public function show(NailPolish $nailPolish) { return view('nail-polishes.show', compact('nailPolish')); } /** * Show the form for editing the specified resource. */ public function edit(NailPolish $nailPolish) { return view('nail-polishes.edit', compact('nailPolish')); } /** * Update the specified resource in storage. */ public function update(Request $request, NailPolish $nailPolish) { $request->validate([ 'name' => 'required|string|max:255', 'number' => 'required|string|max:50|unique:nail_polishes,number,' . $nailPolish->id, 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048' ]); $nailPolish->name = $request->name; $nailPolish->number = $request->number; if ($request->hasFile('image')) { // Altes Bild löschen if ($nailPolish->image_path) { Storage::disk('public')->delete($nailPolish->image_path); } $image = $request->file('image'); $filename = time() . '_' . $image->getClientOriginalName(); // Bild optimieren und speichern $optimizedImage = Image::make($image) ->resize(300, 300, function ($constraint) { $constraint->aspectRatio(); $constraint->upsize(); }) ->encode('jpg', 80); Storage::disk('public')->put('nail-polishes/' . $filename, $optimizedImage); $nailPolish->image_path = 'nail-polishes/' . $filename; } $nailPolish->save(); return redirect()->route('nail-polishes.index') ->with('success', 'Nagellack erfolgreich aktualisiert!'); } /** * Löscht einen Nagellack */ public function destroy(NailPolish $nailPolish) { try { // Prüfe, ob der Lack von anderen Usern verwendet wird $usersWithThisPolish = $nailPolish->users()->count(); if ($usersWithThisPolish > 0) { return back()->with('error', "Dieser Lack kann nicht gelöscht werden, da er von {$usersWithThisPolish} Benutzer(n) in ihrer Sammlung verwendet wird. Bitte entfernen Sie ihn zuerst aus allen Sammlungen."); } // Lösche das Bild, falls vorhanden if ($nailPolish->image_path && Storage::disk('public')->exists($nailPolish->image_path)) { Storage::disk('public')->delete($nailPolish->image_path); } $nailPolish->delete(); return redirect()->route('nail-polishes.index') ->with('success', "Lack '{$nailPolish->name}' wurde erfolgreich gelöscht!"); } catch (\Exception $e) { return back()->with('error', 'Fehler beim Löschen des Lackes: ' . $e->getMessage()); } } /** * Zeigt an, welche User einen bestimmten Lack haben */ public function showUsers(NailPolish $nailPolish) { $users = $nailPolish->users()->paginate(20); return view('nail-polishes.show-users', compact('nailPolish', 'users')); } }