fix: s3Uid resolve by JSON key pattern (no DataDescriptor dependency)
This commit is contained in:
@@ -1218,39 +1218,14 @@ func (c *UniversalClient) resolveRefSvcParamValues(ctx context.Context, opParams
|
||||
return resolved, nil
|
||||
}
|
||||
|
||||
// resolveS3UidInMapFixed парсит JSON map-fixed-параметра, находит uuid sub-params
|
||||
// с именем по паттерну s3.*uid и резолвит значения-не-UUID в UUID через S3 (сервис 12).
|
||||
// resolveS3UidInMapFixed парсит JSON map-fixed-параметра, находит ключи
|
||||
// по паттерну s3.*uid (case-insensitive) и резолвит значения-не-UUID
|
||||
// в UUID через S3 (сервис 12). Соглашение об именах: s3Uid, s3_uid, S3Uid → S3.
|
||||
func (c *UniversalClient) resolveS3UidInMapFixed(paramId int, jsonValue string, opParams []universalCfsParam) string {
|
||||
// Найти DataDescriptor для этого параметра
|
||||
var dd map[string]universalSubParam
|
||||
for _, p := range opParams {
|
||||
if p.SvcOperationCfsParamId == paramId && len(p.DataDescriptor) > 0 {
|
||||
dd = p.DataDescriptor
|
||||
break
|
||||
}
|
||||
}
|
||||
if len(dd) == 0 {
|
||||
if jsonValue == "" || jsonValue == "{}" {
|
||||
return jsonValue
|
||||
}
|
||||
|
||||
// Найти uuid sub-params с s3.*uid в имени
|
||||
s3uidKeys := make(map[string]bool)
|
||||
re := strings.ToLower
|
||||
for key, sub := range dd {
|
||||
lowKey := re(key)
|
||||
lowSub := re(sub.SvcOperationCfsSubparam)
|
||||
if (strings.Contains(lowKey, "s3") && strings.Contains(lowKey, "uid")) ||
|
||||
(strings.Contains(lowSub, "s3") && strings.Contains(lowSub, "uid")) {
|
||||
if strings.Contains(re(sub.DataType), "uuid") {
|
||||
s3uidKeys[key] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(s3uidKeys) == 0 {
|
||||
return jsonValue
|
||||
}
|
||||
|
||||
// Парсим JSON
|
||||
var obj map[string]interface{}
|
||||
if err := json.Unmarshal([]byte(jsonValue), &obj); err != nil {
|
||||
return jsonValue
|
||||
@@ -1258,7 +1233,8 @@ func (c *UniversalClient) resolveS3UidInMapFixed(paramId int, jsonValue string,
|
||||
|
||||
changed := false
|
||||
for key, val := range obj {
|
||||
if !s3uidKeys[key] {
|
||||
lowKey := strings.ToLower(key)
|
||||
if !strings.Contains(lowKey, "s3") || !strings.Contains(lowKey, "uid") {
|
||||
continue
|
||||
}
|
||||
strVal, ok := val.(string)
|
||||
|
||||
Reference in New Issue
Block a user