neonail-database/app/Http/Controllers/ManufacturerController.php
2025-08-10 18:09:07 +02:00

155 lines
4.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Manufacturer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ManufacturerController extends Controller
{
/**
* Zeigt alle Hersteller an
*/
public function index(Request $request)
{
$search = $request->get('search');
$query = Manufacturer::withCount('nailPolishes');
if ($search) {
$query->search($search);
}
$manufacturers = $query->orderBy('name')->paginate(20);
return view('manufacturers.index', compact('manufacturers', 'search'));
}
/**
* Zeigt das Formular zum Erstellen eines neuen Herstellers
*/
public function create()
{
return view('manufacturers.create');
}
/**
* Speichert einen neuen Hersteller
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255|unique:manufacturers',
'description' => 'nullable|string|max:1000',
'website' => 'nullable|url|max:255',
'country' => 'nullable|string|max:100',
]);
try {
$manufacturer = Manufacturer::create([
'name' => $request->name,
'description' => $request->description,
'website' => $request->website,
'country' => $request->country,
]);
return redirect()->route('manufacturers.index')
->with('success', "Hersteller '{$manufacturer->name}' wurde erfolgreich erstellt!");
} catch (\Exception $e) {
\Log::error("Fehler beim Erstellen des Herstellers: " . $e->getMessage());
return back()->with('error', 'Fehler beim Erstellen des Herstellers. Bitte versuchen Sie es erneut.')
->withInput();
}
}
/**
* Zeigt einen Hersteller an
*/
public function show(Manufacturer $manufacturer)
{
$manufacturer->load(['nailPolishes' => function($query) {
$query->orderBy('name');
}]);
return view('manufacturers.show', compact('manufacturer'));
}
/**
* Zeigt das Formular zum Bearbeiten eines Herstellers
*/
public function edit(Manufacturer $manufacturer)
{
return view('manufacturers.edit', compact('manufacturer'));
}
/**
* Aktualisiert einen Hersteller
*/
public function update(Request $request, Manufacturer $manufacturer)
{
$request->validate([
'name' => 'required|string|max:255|unique:manufacturers,name,' . $manufacturer->id,
'description' => 'nullable|string|max:1000',
'website' => 'nullable|url|max:255',
'country' => 'nullable|string|max:100',
]);
try {
$manufacturer->update([
'name' => $request->name,
'description' => $request->description,
'website' => $request->website,
'country' => $request->country,
]);
return redirect()->route('manufacturers.index')
->with('success', "Hersteller '{$manufacturer->name}' wurde erfolgreich aktualisiert!");
} catch (\Exception $e) {
\Log::error("Fehler beim Aktualisieren des Herstellers: " . $e->getMessage());
return back()->with('error', 'Fehler beim Aktualisieren des Herstellers. Bitte versuchen Sie es erneut.')
->withInput();
}
}
/**
* Löscht einen Hersteller
*/
public function destroy(Manufacturer $manufacturer)
{
try {
// Prüfe, ob der Hersteller noch Nagellacke hat
if ($manufacturer->hasNailPolishes()) {
return back()->with('error', "Hersteller '{$manufacturer->name}' kann nicht gelöscht werden, da noch Nagellacke zugeordnet sind.");
}
$name = $manufacturer->name;
$manufacturer->delete();
return redirect()->route('manufacturers.index')
->with('success', "Hersteller '{$name}' wurde erfolgreich gelöscht!");
} catch (\Exception $e) {
\Log::error("Fehler beim Löschen des Herstellers: " . $e->getMessage());
return back()->with('error', 'Fehler beim Löschen des Herstellers. Bitte versuchen Sie es erneut.');
}
}
/**
* API-Endpoint für AJAX-Suche nach Herstellern
*/
public function search(Request $request)
{
$search = $request->get('q');
$manufacturers = Manufacturer::where('name', 'like', "%{$search}%")
->orderBy('name')
->limit(10)
->get(['id', 'name']);
return response()->json($manufacturers);
}
}