middleware('auth:sanctum')->only(['store', 'update', 'destroy']); } /** * Seznam CTY záznamů (stránkovaný výstup). */ public function index(Request $request): JsonResponse { $perPage = (int) $request->get('per_page', 100); $items = Cty::query() ->orderBy('country_name') ->paginate($perPage); return response()->json($items); } /** * Vytvoření nového CTY záznamu. * Autorizace přes CtyPolicy@create (pokud ji používáš). */ public function store(Request $request): JsonResponse { $this->authorize('create', Cty::class); $data = $this->validateData($request); $item = Cty::create($data); return response()->json($item, 201); } /** * Detail jednoho CTY záznamu. */ public function show(Cty $cty): JsonResponse { return response()->json($cty); } /** * Aktualizace CTY záznamu (partial update). * Autorizace přes CtyPolicy@update. */ public function update(Request $request, Cty $cty): JsonResponse { $this->authorize('update', $cty); $data = $this->validateData($request, partial: true); $cty->fill($data); $cty->save(); return response()->json($cty); } /** * Smazání CTY záznamu. * Autorizace přes CtyPolicy@delete. */ public function destroy(Cty $cty): JsonResponse { $this->authorize('delete', $cty); $cty->delete(); return response()->json(null, 204); } /** * Validace pro store / update. */ protected function validateData(Request $request, bool $partial = false): array { $required = $partial ? 'sometimes' : 'required'; return $request->validate([ 'country_name' => [$required, 'string', 'max:150'], 'dxcc' => [$required, 'integer'], 'cq_zone' => [$required, 'integer'], 'itu_zone' => [$required, 'integer'], 'continent' => [$required, 'string', 'size:2'], 'latitude' => [$required, 'numeric'], 'longitude' => [$required, 'numeric'], 'time_offset' => [$required, 'numeric'], 'prefix' => [$required, 'string', 'max:64'], 'prefix_norm' => ['sometimes', 'nullable', 'string', 'max:64'], 'precise' => [$required, 'boolean'], 'source' => [$required, 'string', 'max:25'], ]); } }