middleware('auth:sanctum')->only(['store', 'update', 'destroy']); } /** * Seznam EDI kategorií (API, JSON). */ public function index(Request $request): JsonResponse { $perPage = (int) $request->get('per_page', 100); $items = EdiCategory::query() ->with('categories') // n:m vazba na Category, pokud ji chceš mít v odpovědi ->orderBy('value') ->paginate($perPage); return response()->json($items); } /** * Vytvoření nové EDI kategorie. * Autorizace přes EdiCategoryPolicy@create. */ public function store(Request $request): JsonResponse { $this->authorize('create', EdiCategory::class); $data = $this->validateData($request); $relations = $this->validateRelations($request); $item = EdiCategory::create($data); if (array_key_exists('category_ids', $relations)) { $item->categories()->sync($relations['category_ids']); } $item->load('categories'); return response()->json($item, 201); } /** * Detail jedné EDI kategorie. */ public function show(EdiCategory $edi_category): JsonResponse { $edi_category->load('categories'); return response()->json($edi_category); } /** * Aktualizace existující EDI kategorie (partial update). * Autorizace přes EdiCategoryPolicy@update. */ public function update(Request $request, EdiCategory $edi_category): JsonResponse { $this->authorize('update', $edi_category); $data = $this->validateData($request, partial: true); $relations = $this->validateRelations($request); $edi_category->fill($data); $edi_category->save(); if (array_key_exists('category_ids', $relations)) { $edi_category->categories()->sync($relations['category_ids']); } $edi_category->load('categories'); return response()->json($edi_category); } /** * Smazání EDI kategorie. * Autorizace přes EdiCategoryPolicy@delete. */ public function destroy(EdiCategory $edi_category): JsonResponse { $this->authorize('delete', $edi_category); $edi_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([ 'value' => [$required, 'string', 'max:255'], ]); } /** * Validace ID navázaných kategorií (Category). */ protected function validateRelations(Request $request): array { return $request->validate([ 'category_ids' => ['sometimes', 'array'], 'category_ids.*' => ['integer', 'exists:categories,id'], ]); } }