fix(push-config): 解决 schemaV2 vendors 嵌套与 upsert 问题
- SdkConfigController: 向 SDK 下发 pushConfig 时自动解包 vendors 层,客户端 SDK 读取 xiaomi/vivo 等顶层字段 - FeatureServiceManager.updateConfig: 改为 upsert 模式,服务未激活时先创建再更新,不再报 404 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
父节点
6b73a757fb
当前提交
1bd9a39422
@ -77,10 +77,22 @@ public class SdkConfigController {
|
|||||||
.findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.UPDATE)
|
.findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.UPDATE)
|
||||||
.map(feature -> parseConfig(feature.getConfig()))
|
.map(feature -> parseConfig(feature.getConfig()))
|
||||||
.orElseGet(objectMapper::createObjectNode);
|
.orElseGet(objectMapper::createObjectNode);
|
||||||
JsonNode pushConfig = featureServiceRepository
|
// schemaV2 格式存储时 vendors 在嵌套层,客户端 SDK 读的是顶层 xiaomi/huawei 等字段,需解包
|
||||||
|
JsonNode rawPushConfig = featureServiceRepository
|
||||||
.findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.PUSH)
|
.findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.PUSH)
|
||||||
.map(feature -> parseConfig(feature.getConfig()))
|
.map(feature -> parseConfig(feature.getConfig()))
|
||||||
.orElseGet(objectMapper::createObjectNode);
|
.orElseGet(objectMapper::createObjectNode);
|
||||||
|
JsonNode pushConfig;
|
||||||
|
if (rawPushConfig.has("vendors") && rawPushConfig.path("vendors").isObject()) {
|
||||||
|
com.fasterxml.jackson.databind.node.ObjectNode flat = objectMapper.createObjectNode();
|
||||||
|
rawPushConfig.path("vendors").fields().forEachRemaining(e -> flat.set(e.getKey(), e.getValue()));
|
||||||
|
if (rawPushConfig.has("profiles")) {
|
||||||
|
flat.set("profiles", rawPushConfig.get("profiles"));
|
||||||
|
}
|
||||||
|
pushConfig = flat;
|
||||||
|
} else {
|
||||||
|
pushConfig = rawPushConfig;
|
||||||
|
}
|
||||||
boolean updateEnabled = deployProps.isEnableUpdate() && featureServiceRepository
|
boolean updateEnabled = deployProps.isEnableUpdate() && featureServiceRepository
|
||||||
.findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.UPDATE)
|
.findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.UPDATE)
|
||||||
.map(FeatureServiceEntity::isEnabled)
|
.map(FeatureServiceEntity::isEnabled)
|
||||||
|
|||||||
@ -270,7 +270,19 @@ public class FeatureServiceManager {
|
|||||||
return services.get(0);
|
return services.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
FeatureServiceEntity entity = getOrFail(appKey, platform, serviceType);
|
// PUSH / UPDATE:允许在服务未激活时提前保存配置(upsert)
|
||||||
|
FeatureServiceEntity entity = repository
|
||||||
|
.findByAppKeyAndPlatformAndServiceType(appKey, platform, serviceType)
|
||||||
|
.orElseGet(() -> {
|
||||||
|
FeatureServiceEntity created = new FeatureServiceEntity();
|
||||||
|
created.setId(java.util.UUID.randomUUID().toString());
|
||||||
|
created.setAppKey(appKey);
|
||||||
|
created.setPlatform(platform);
|
||||||
|
created.setServiceType(serviceType);
|
||||||
|
created.setEnabled(false);
|
||||||
|
created.setCreatedAt(java.time.LocalDateTime.now());
|
||||||
|
return created;
|
||||||
|
});
|
||||||
entity.setConfig(config);
|
entity.setConfig(config);
|
||||||
return repository.save(entity);
|
return repository.save(entity);
|
||||||
}
|
}
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户