middleware('auth:sanctum')->only(['store', 'update', 'destroy']); } /** * Seznam power kategorií. */ public function index(Request $request): JsonResponse { $perPage = (int) $request->get('per_page', 50); $items = PowerCategory::query() ->orderBy('order') ->paginate($perPage); return response()->json($items); } /** * Vytvoření nové power kategorie. * Autorizace přes PowerCategoryPolicy@create. */ public function store(Request $request): JsonResponse { $this->authorize('create', PowerCategory::class); $data = $this->validateData($request); $item = PowerCategory::create($data); return response()->json($item, 201); } /** * Detail power kategorie. */ public function show(PowerCategory $power_category): JsonResponse { return response()->json($power_category); } /** * Aktualizace power kategorie (partial update). * Autorizace přes PowerCategoryPolicy@update. */ public function update(Request $request, PowerCategory $power_category): JsonResponse { $this->authorize('update', $power_category); $data = $this->validateData($request, partial: true); $power_category->fill($data); $power_category->save(); return response()->json($power_category); } /** * Smazání power kategorie. * Autorizace přes PowerCategoryPolicy@delete. */ public function destroy(PowerCategory $power_category): JsonResponse { $this->authorize('delete', $power_category); $power_category->delete(); return response()->json(null, 204); } /** * Validace dat pro store / update. */ protected function validateData(Request $request, bool $partial = false): array { $required = $partial ? 'sometimes' : 'required'; return $request->validate([ 'name' => [$required, 'string', 'max:255'], 'order' => [$required, 'integer'], 'power_level' => [$required, 'integer'], ]); } }