public Mono<Void> updateSharedProperties(TurmsProperties turmsProperties) {
        LOGGER.info("Sharing new turms properties to all members");
        SharedClusterProperties clusterProperties =
                getClusterProperties(sharedClusterProperties, turmsProperties);
        Date now = new Date();
        Filter filter = Filter.newBuilder(2)
                .eq(DomainFieldName.ID, clusterId)
                .lt(SharedClusterProperties.Fields.lastUpdatedTime, now);
        Update update = Update.newBuilder(3)
                .set(SharedClusterProperties.Fields.commonProperties,
                        clusterProperties.getCommonProperties());
        if (clusterProperties.getGatewayProperties() != null) {
            update.set(SharedClusterProperties.Fields.gatewayProperties,
                    clusterProperties.getGatewayProperties());
        }
        if (clusterProperties.getServiceProperties() != null) {
            update.set(SharedClusterProperties.Fields.serviceProperties,
                    clusterProperties.getServiceProperties());
        }
        return sharedConfigService.upsert(filter, update, clusterProperties)
                .doOnError(e -> LOGGER.error("Failed to share new turms properties", e))
                .then(Mono.defer(() -> {
                    sharedClusterProperties = clusterProperties;
                    LOGGER.info("Shared new turms properties");
                    return Mono.empty();
                }));
    }
@implNote We don't support the partial update by {@link java.util.Map} because there is not
          an efficient way to update nested objects of a document in MongoDB.
turms-server-common/src/main/java/im/turms/server/common/infra/cluster/service/config/SharedPropertyService.java