authenticatedUserIdOrUnauthorized(); if ($guard instanceof JsonResponse) { return $guard; } $payload = $request->validated(); $users = $this->listService->list($payload['sort'] ?? null, $payload['order'] ?? null); return response()->json([ 'ok' => true, 'users' => UserWithRolesResource::collection($users), ]); } public function store(UserStoreRequest $request): JsonResponse { $guard = $this->authenticatedUserIdOrUnauthorized(); if ($guard instanceof JsonResponse) { return $guard; } $payload = $request->validated(); $result = $this->managementService->create($payload, $guard); if (empty($result['ok'])) { return response()->json([ 'ok' => false, 'message' => $result['message'] ?? 'Failed to create user.', ], 422); } return response()->json([ 'ok' => true, 'user_id' => $result['user']->id ?? null, ], 201); } public function update(UserUpdateRequest $request, int $userId): JsonResponse { $guard = $this->authenticatedUserIdOrUnauthorized(); if ($guard instanceof JsonResponse) { return $guard; } $payload = $request->validated(); $result = $this->managementService->update($userId, $payload); if (empty($result['ok'])) { return response()->json([ 'ok' => false, 'message' => $result['message'] ?? 'Failed to update user.', ], 422); } return response()->json([ 'ok' => true, ]); } public function destroy(int $userId): JsonResponse { $guard = $this->authenticatedUserIdOrUnauthorized(); if ($guard instanceof JsonResponse) { return $guard; } $result = $this->managementService->delete($userId); if (empty($result['ok'])) { return response()->json([ 'ok' => false, 'message' => $result['message'] ?? 'Failed to delete user.', ], 404); } return response()->json([ 'ok' => true, ]); } public function loginActivity(LoginActivityRequest $request): JsonResponse { $guard = $this->authenticatedUserIdOrUnauthorized(); if ($guard instanceof JsonResponse) { return $guard; } $payload = $request->validated(); $perPage = $payload['per_page'] ?? 25; $page = $payload['page'] ?? 1; $result = $this->loginActivityService->list( (int) $perPage, (int) $page ); return response()->json([ 'ok' => true, 'activities' => LoginActivityResource::collection($result['activities']), 'pagination' => $result['pagination'], ]); } /** * @return int|JsonResponse */ private function authenticatedUserIdOrUnauthorized(): int|JsonResponse { $userId = (int) (auth()->id() ?? 0); if ($userId <= 0) { return response()->json(['ok' => false, 'message' => 'Unauthorized.'], 401); } return $userId; } }