Skip to content

Commit c7e11ad

Browse files
committed
reduced complexity by targeting only metadta fields
On-behalf-of: @SAP [email protected] Signed-off-by: Artem Shcherbatiuk <[email protected]>
1 parent 6bde640 commit c7e11ad

File tree

1 file changed

+33
-42
lines changed

1 file changed

+33
-42
lines changed

gateway/resolver/resolver.go

Lines changed: 33 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -25,79 +25,70 @@ import (
2525
"github.com/openmfp/golang-commons/logger"
2626
)
2727

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)
3131
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 {
4234
return obj
4335
}
44-
}
4536

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
5541
}
56-
return result
57-
}
5842

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{})
6244
if !ok {
63-
return convertLabels(metadataValue, toArray)
45+
return obj
6446
}
6547

48+
// Clone the object
6649
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)
7059
} else {
71-
result[key] = convertLabels(value, toArray)
60+
newMetadata[k] = v
7261
}
7362
}
63+
64+
result["metadata"] = newMetadata
7465
return result
7566
}
7667

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 {
7970
if toArray {
80-
// Convert map to array for GraphQL output
71+
// map[string]string → []Label
8172
labelMap, ok := value.(map[string]interface{})
8273
if !ok {
83-
return convertLabels(value, toArray)
74+
return value
8475
}
8576

86-
var labelArray []map[string]interface{}
77+
var labels []map[string]interface{}
8778
for k, v := range labelMap {
8879
if strValue, ok := v.(string); ok {
89-
labelArray = append(labelArray, map[string]interface{}{
80+
labels = append(labels, map[string]interface{}{
9081
"key": k,
9182
"value": strValue,
9283
})
9384
}
9485
}
95-
return labelArray
86+
return labels
9687
} else {
97-
// Convert array to map for Kubernetes input
88+
// []Label → map[string]string
9889
labelArray, ok := value.([]interface{})
9990
if !ok {
100-
return convertLabels(value, toArray)
91+
return value
10192
}
10293

10394
labelMap := make(map[string]string)

0 commit comments

Comments
 (0)