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)
|
||||
.map(feature -> parseConfig(feature.getConfig()))
|
||||
.orElseGet(objectMapper::createObjectNode);
|
||||
JsonNode pushConfig = featureServiceRepository
|
||||
// schemaV2 格式存储时 vendors 在嵌套层,客户端 SDK 读的是顶层 xiaomi/huawei 等字段,需解包
|
||||
JsonNode rawPushConfig = featureServiceRepository
|
||||
.findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.PUSH)
|
||||
.map(feature -> parseConfig(feature.getConfig()))
|
||||
.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
|
||||
.findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.UPDATE)
|
||||
.map(FeatureServiceEntity::isEnabled)
|
||||
|
||||
@ -270,7 +270,19 @@ public class FeatureServiceManager {
|
||||
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);
|
||||
return repository.save(entity);
|
||||
}
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户