fix: map-fixed fallback builds JSON from DataDescriptor sub-param defaults

This commit is contained in:
“Naeel”
2026-07-19 09:34:26 +04:00
parent 35792091bd
commit 0a027c2ebf
8 changed files with 56 additions and 16 deletions
+41 -11
View File
@@ -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") {