public Mono<List<User>> authAndQueryUsersProfile(
            @NotNull Long requesterId,
            @Nullable Set<Long> userIds,
            @Nullable String name,
            @Nullable Date lastUpdatedDate,
            @Nullable Integer skip,
            @Nullable Integer limit,
            @Nullable List<Integer> fieldsToHighlight) {
        try {
            Validator.notNull(requesterId, "requesterId");
        } catch (ResponseException e) {
            return Mono.error(e);
        }
        if (StringUtil.isNotBlank(name)) {
            return search(skip, limit, userIds, name, fieldsToHighlight);
        }
        try {
            Validator.notNull(userIds, "userIds");
        } catch (ResponseException e) {
            return Mono.error(e);
        }
        if (userIds.isEmpty()) {
            return PublisherPool.emptyList();
        }
        // we don't need to call "isAllowToQueryUserProfile" to check the permissions
        // because we only provide basic user info that doesn't need access control currently.
        return userRepository
                .findNotDeletedUserProfiles(userIds,
                        userInfoUserDefinedAttributesService.knownAttributes,
                        lastUpdatedDate)
                .collect(CollectorUtil.toList(userIds.size()));
    }
@return Possible codes: {@link ResponseStatusCode#OK}
        {@link ResponseStatusCode#NOT_FRIEND_TO_QUERY_USER_PROFILE}
        {@link ResponseStatusCode#BLOCKED_USER_TO_QUERY_USER_PROFILE}
        {@link ResponseStatusCode#SERVER_INTERNAL_ERROR}
        {@link ResponseStatusCode#RESOURCE_NOT_FOUND}
turms-service/src/main/java/im/turms/service/domain/user/service/UserService.java