public Mono<LongsWithVersion> queryGroupBlockedUserIdsWithVersion(
            @NotNull Long groupId,
            @Nullable Date lastUpdatedDate) {
        try {
            Validator.notNull(groupId, "groupId");
        } catch (ResponseException e) {
            return Mono.error(e);
        }
        return groupVersionService.queryBlocklistVersion(groupId)
                .flatMap(version -> {
                    if (DateTimeUtil.isAfterOrSame(lastUpdatedDate, version)) {
                        return ResponseExceptionPublisherPool.alreadyUpToUpdate();
                    }
                    Recyclable<List<Long>> recyclableList = ListRecycler.obtain();
                    return queryGroupBlockedUserIds(groupId)
                            .collect(Collectors.toCollection(recyclableList::getValue))
                            .map(ids -> {
                                if (ids.isEmpty()) {
                                    throw ResponseException.get(ResponseStatusCode.NO_CONTENT);
                                }
                                return ClientMessagePool.getLongsWithVersionBuilder()
                                        .setLastUpdatedDate(version.getTime())
                                        .addAllLongs(ids)
                                        .build();
                            })
                            .doFinally(signalType -> recyclableList.recycle());

                })
                .switchIfEmpty(ResponseExceptionPublisherPool.alreadyUpToUpdate());
    }
@return whether the user to unblock was blocked
turms-service/src/main/java/im/turms/service/domain/group/service/GroupBlocklistService.java