middleware('auth:sanctum'); } public function index(Request $request): JsonResponse { $this->authorize('viewAny', User::class); $perPage = (int) $request->get('per_page', 20); $query = trim((string) $request->get('query', '')); $users = User::query() ->when($query !== '', function ($q) use ($query) { $q->where('name', 'like', '%' . $query . '%') ->orWhere('email', 'like', '%' . $query . '%'); }) ->orderBy('name') ->paginate($perPage); return response()->json($users); } public function show(User $user): JsonResponse { $this->authorize('view', $user); return response()->json($user); } public function store(Request $request): JsonResponse { $this->authorize('create', User::class); $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', 'unique:users,email'], 'password' => ['required', 'string', 'min:8'], 'is_admin' => ['sometimes', 'boolean'], 'is_active' => ['sometimes', 'boolean'], ]); $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => $data['password'], 'is_admin' => (bool) ($data['is_admin'] ?? false), 'is_active' => (bool) ($data['is_active'] ?? true), ]); return response()->json($user, 201); } public function update(Request $request, User $user): JsonResponse { $this->authorize('update', $user); $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => [ 'required', 'email', 'max:255', Rule::unique('users', 'email')->ignore($user->id), ], 'password' => ['nullable', 'string', 'min:8'], 'is_admin' => ['sometimes', 'boolean'], 'is_active' => ['sometimes', 'boolean'], ]); $payload = [ 'name' => $data['name'], 'email' => $data['email'], 'is_admin' => (bool) ($data['is_admin'] ?? $user->is_admin), 'is_active' => (bool) ($data['is_active'] ?? $user->is_active), ]; if (! empty($data['password'])) { $payload['password'] = $data['password']; } $user->update($payload); return response()->json($user); } public function destroy(Request $request, User $user): JsonResponse { $this->authorize('delete', $user); if ($request->user()?->id === $user->id) { return response()->json(['message' => 'Nelze deaktivovat vlastního uživatele.'], 422); } $user->update(['is_active' => false]); return response()->json($user); } }