@@ -25,79 +25,70 @@ import (
25
25
"github.com/openmfp/golang-commons/logger"
26
26
)
27
27
28
- // convertLabels converts between map[string]string and []Label format
29
- // toArray=true: converts maps to arrays (for GraphQL output)
30
- // toArray=false: converts arrays to maps (for Kubernetes input)
28
+ // convertLabels transforms labels and annotations between map and array formats
29
+ // toArray=true: map[string]string → []Label (for GraphQL output)
30
+ // toArray=false: []Label → map[string]string (for Kubernetes input)
31
31
func convertLabels (obj any , toArray bool ) any {
32
- switch v := obj .(type ) {
33
- case map [string ]interface {}:
34
- return convertObject (v , toArray )
35
- case []interface {}:
36
- result := make ([]any , len (v ))
37
- for i , item := range v {
38
- result [i ] = convertLabels (item , toArray )
39
- }
40
- return result
41
- default :
32
+ objMap , ok := obj .(map [string ]interface {})
33
+ if ! ok {
42
34
return obj
43
35
}
44
- }
45
36
46
- // convertObject handles object conversion with direction control
47
- func convertObject (objMap map [string ]interface {}, toArray bool ) map [string ]interface {} {
48
- result := make (map [string ]interface {})
49
- for key , value := range objMap {
50
- if key == "metadata" {
51
- result [key ] = convertMetadata (value , toArray )
52
- } else {
53
- result [key ] = convertLabels (value , toArray )
54
- }
37
+ // Check if this object has metadata
38
+ metadata , hasMetadata := objMap ["metadata" ]
39
+ if ! hasMetadata {
40
+ return obj
55
41
}
56
- return result
57
- }
58
42
59
- // convertMetadata handles metadata field conversion
60
- func convertMetadata (metadataValue any , toArray bool ) any {
61
- metadata , ok := metadataValue .(map [string ]interface {})
43
+ metadataMap , ok := metadata .(map [string ]interface {})
62
44
if ! ok {
63
- return convertLabels ( metadataValue , toArray )
45
+ return obj
64
46
}
65
47
48
+ // Clone the object
66
49
result := make (map [string ]interface {})
67
- for key , value := range metadata {
68
- if isLabelField (key ) && value != nil {
69
- result [key ] = convertLabelField (value , toArray )
50
+ for k , v := range objMap {
51
+ result [k ] = v
52
+ }
53
+
54
+ // Transform only labels and annotations in metadata
55
+ newMetadata := make (map [string ]interface {})
56
+ for k , v := range metadataMap {
57
+ if (k == "labels" || k == "annotations" ) && v != nil {
58
+ newMetadata [k ] = transformLabelField (v , toArray )
70
59
} else {
71
- result [ key ] = convertLabels ( value , toArray )
60
+ newMetadata [ k ] = v
72
61
}
73
62
}
63
+
64
+ result ["metadata" ] = newMetadata
74
65
return result
75
66
}
76
67
77
- // convertLabelField converts between label map and array formats
78
- func convertLabelField (value any , toArray bool ) any {
68
+ // transformLabelField does the actual conversion between formats
69
+ func transformLabelField (value any , toArray bool ) any {
79
70
if toArray {
80
- // Convert map to array for GraphQL output
71
+ // map[string]string → []Label
81
72
labelMap , ok := value .(map [string ]interface {})
82
73
if ! ok {
83
- return convertLabels ( value , toArray )
74
+ return value
84
75
}
85
76
86
- var labelArray []map [string ]interface {}
77
+ var labels []map [string ]interface {}
87
78
for k , v := range labelMap {
88
79
if strValue , ok := v .(string ); ok {
89
- labelArray = append (labelArray , map [string ]interface {}{
80
+ labels = append (labels , map [string ]interface {}{
90
81
"key" : k ,
91
82
"value" : strValue ,
92
83
})
93
84
}
94
85
}
95
- return labelArray
86
+ return labels
96
87
} else {
97
- // Convert array to map for Kubernetes input
88
+ // []Label → map[string]string
98
89
labelArray , ok := value .([]interface {})
99
90
if ! ok {
100
- return convertLabels ( value , toArray )
91
+ return value
101
92
}
102
93
103
94
labelMap := make (map [string ]string )
0 commit comments