fix: map-fixed fallback builds JSON from DataDescriptor sub-param defaults
This commit is contained in:
@@ -162,17 +162,25 @@ type universalOperation struct {
|
||||
CfsParams []universalCfsParam `json:"cfsParams"`
|
||||
}
|
||||
|
||||
type universalSubParam struct {
|
||||
DefaultValue string `json:"defaultValue"`
|
||||
DataType string `json:"dataType"`
|
||||
SvcOperationCfsSubparam string `json:"svcOperationCfsSubparam"`
|
||||
IsRequired bool `json:"isRequired"`
|
||||
}
|
||||
|
||||
type universalCfsParam struct {
|
||||
SvcOperationCfsParamId int `json:"svcOperationCfsParamId"`
|
||||
ParamValue *string `json:"paramValue"`
|
||||
DefaultValue *string `json:"defaultValue"`
|
||||
IsRequired bool `json:"isRequired"`
|
||||
DataType string `json:"dataType"`
|
||||
Name string `json:"name"`
|
||||
Code string `json:"code"`
|
||||
Label string `json:"label"`
|
||||
SvcOperationCfsParam string `json:"svcOperationCfsParam"`
|
||||
RefSvcId *int `json:"refSvcId"`
|
||||
SvcOperationCfsParamId int `json:"svcOperationCfsParamId"`
|
||||
ParamValue *string `json:"paramValue"`
|
||||
DefaultValue *string `json:"defaultValue"`
|
||||
IsRequired bool `json:"isRequired"`
|
||||
DataType string `json:"dataType"`
|
||||
Name string `json:"name"`
|
||||
Code string `json:"code"`
|
||||
Label string `json:"label"`
|
||||
SvcOperationCfsParam string `json:"svcOperationCfsParam"`
|
||||
RefSvcId *int `json:"refSvcId"`
|
||||
DataDescriptor map[string]universalSubParam `json:"dataDescriptor"`
|
||||
}
|
||||
|
||||
// CreateGenericInstanceUniversalV6 implements the universal flow:
|
||||
@@ -311,6 +319,19 @@ func (c *UniversalClient) CreateGenericInstanceUniversalV6(ctx context.Context,
|
||||
return instanceUid, nil
|
||||
}
|
||||
|
||||
// buildMapFixedDefault строит JSON-объект из дефолтов sub-параметров map-fixed.
|
||||
func buildMapFixedDefault(param universalCfsParam) string {
|
||||
result := make(map[string]string, len(param.DataDescriptor))
|
||||
for key, sub := range param.DataDescriptor {
|
||||
result[key] = sub.DefaultValue
|
||||
}
|
||||
b, err := json.Marshal(result)
|
||||
if err != nil {
|
||||
return "{}"
|
||||
}
|
||||
return string(b)
|
||||
}
|
||||
|
||||
func normalizeUniversalValueV6(val string, param universalCfsParam) string {
|
||||
trimmed := strings.TrimSpace(val)
|
||||
if strings.EqualFold(trimmed, "null") {
|
||||
@@ -319,11 +340,20 @@ func normalizeUniversalValueV6(val string, param universalCfsParam) string {
|
||||
if trimmed == "\"\"" {
|
||||
trimmed = ""
|
||||
}
|
||||
|
||||
// map-fixed с DataDescriptor: если значение пустое или "{}" — строим JSON из дефолтов sub-params.
|
||||
dataType := strings.ToLower(param.DataType)
|
||||
if (dataType == "map-fixed" || strings.HasPrefix(dataType, "map")) && len(param.DataDescriptor) > 0 {
|
||||
if trimmed == "" || trimmed == "{}" {
|
||||
return buildMapFixedDefault(param)
|
||||
}
|
||||
return trimmed
|
||||
}
|
||||
|
||||
if trimmed != "" {
|
||||
return trimmed
|
||||
}
|
||||
|
||||
dataType := strings.ToLower(param.DataType)
|
||||
nameHint := strings.ToLower(param.Name + " " + param.Code + " " + param.Label + " " + param.SvcOperationCfsParam)
|
||||
|
||||
if strings.Contains(dataType, "array") || strings.Contains(nameHint, "array") || strings.Contains(nameHint, "list") {
|
||||
|
||||
Reference in New Issue
Block a user