public Mono<UserRelationshipGroupsWithVersion> queryRelationshipGroupsInfosWithVersion(
            @NotNull Long ownerId,
            @Nullable Date lastUpdatedDate) {
        try {
            Validator.notNull(ownerId, "ownerId");
        } catch (ResponseException e) {
            return Mono.error(e);
        }
        return userVersionService.queryRelationshipGroupsLastUpdatedDate(ownerId)
                .flatMap(date -> {
                    if (DateTimeUtil.isAfterOrSame(lastUpdatedDate, date)) {
                        return ResponseExceptionPublisherPool.alreadyUpToUpdate();
                    }
                    UserRelationshipGroupsWithVersion.Builder builder =
                            ClientMessagePool.getUserRelationshipGroupsWithVersionBuilder()
                                    .setLastUpdatedDate(date.getTime());
                    return queryRelationshipGroupsInfos(ownerId)
                            .collect(CollectorUtil.toChunkedList())
                            .map(groups -> {
                                for (UserRelationshipGroup group : groups) {
                                    builder.addUserRelationshipGroups(
                                            ProtoModelConvertor.relationshipGroup2proto(group));
                                }
                                return builder.build();
                            });
                })
                .switchIfEmpty(ResponseExceptionPublisherPool.alreadyUpToUpdate());
    }
@param userRelationshipService is lazy because: UserRelationshipService ->
                               UserRelationshipGroupService -> UserRelationshipService
turms-service/src/main/java/im/turms/service/domain/user/service/UserRelationshipGroupService.java