62 lines
1.8 KiB
Go
62 lines
1.8 KiB
Go
package core
|
||
|
||
import (
|
||
"encoding/json"
|
||
"strings"
|
||
)
|
||
|
||
// ===== Нормализация значений CFS-параметров =====
|
||
|
||
// 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") {
|
||
trimmed = ""
|
||
}
|
||
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
|
||
}
|
||
|
||
nameHint := strings.ToLower(param.Name + " " + param.Code + " " + param.Label + " " + param.SvcOperationCfsParam)
|
||
|
||
if strings.Contains(dataType, "array") || strings.Contains(nameHint, "array") || strings.Contains(nameHint, "list") {
|
||
return "[]"
|
||
}
|
||
if strings.Contains(dataType, "map") || strings.Contains(dataType, "json") || strings.Contains(nameHint, "map") || strings.Contains(nameHint, "json") {
|
||
return "{}"
|
||
}
|
||
if strings.Contains(dataType, "integer") || strings.Contains(dataType, "int") {
|
||
return "0"
|
||
}
|
||
if strings.Contains(dataType, "boolean") || strings.Contains(dataType, "bool") {
|
||
return "false"
|
||
}
|
||
|
||
return trimmed
|
||
}
|