namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\Category; use Illuminate\Http\RedirectResponse; use Illuminate\View\View; class CategoryController extends Controller { public function index(): View { return view('admin.categories.index', [ 'categories' => Category::withCount('nominees')->orderBy('name')->paginate(15), ]); } public function create(): View { return view('admin.categories.create'); } public function store(): RedirectResponse { Category::create($this->validated()); return redirect()->route('admin.categories.index')->with('success', 'Category created.'); } public function edit(Category $category): View { return view('admin.categories.edit', ['category' => $category]); } public function update(Category $category): RedirectResponse { $category->update($this->validated()); return back()->with('success', 'Category updated.'); } public function destroy(Category $category): RedirectResponse { $category->delete(); // nominees cascade via FK return back()->with('success', 'Category deleted.'); } private function validated(): array { return request()->validate([ 'name' => ['required', 'string', 'max:120', 'unique:categories,name' . (request()->route('category') ? ',' . request()->route('category')->id : '')], 'description' => ['nullable', 'string', 'max:2000'], ]); } }