@@ -2,6 +2,9 @@ package system
2
2
3
3
import (
4
4
"context"
5
+ "encoding/json"
6
+
7
+ jsonpatch "github.com/evanphx/json-patch/v5"
5
8
"github.com/gofrs/uuid"
6
9
"github.com/siyul-park/uniflow/pkg/types"
7
10
@@ -60,8 +63,8 @@ func UpdateResource[T resource.Resource](store resource.Store[T]) func(context.C
60
63
}
61
64
62
65
for i := 0 ; i < len (resources ); i ++ {
63
- patch := resources [i ]
64
- origin , ok := origins [patch .GetID ()]
66
+ rsc := resources [i ]
67
+ origin , ok := origins [rsc .GetID ()]
65
68
if ! ok {
66
69
resources = append (resources [:i ], resources [i + 1 :]... )
67
70
i --
@@ -72,21 +75,34 @@ func UpdateResource[T resource.Resource](store resource.Store[T]) func(context.C
72
75
if err != nil {
73
76
return nil , err
74
77
}
75
-
76
- doc2 , err := types .Marshal (patch )
78
+ doc2 , err := types .Marshal (rsc )
77
79
if err != nil {
78
80
return nil , err
79
81
}
80
82
81
- var pair []types. Value
82
- if doc , ok := doc1 .(types. Map ); ok {
83
- pair = append ( pair , doc . Pairs () ... )
83
+ json1 , err := json . Marshal ( doc1 . Interface ())
84
+ if err != nil {
85
+ return nil , err
84
86
}
85
- if doc , ok := doc2 .(types.Map ); ok {
86
- pair = append (pair , doc .Pairs ()... )
87
+ json2 , err := json .Marshal (doc2 .Interface ())
88
+ if err != nil {
89
+ return nil , err
87
90
}
88
91
89
- if err := types .Unmarshal (types .NewMap (pair ... ), & resources [i ]); err != nil {
92
+ merge , err := jsonpatch .MergePatch (json1 , json2 )
93
+ if err != nil {
94
+ return nil , err
95
+ }
96
+
97
+ var doc any
98
+ if err := json .Unmarshal (merge , & doc ); err != nil {
99
+ return nil , err
100
+ }
101
+ val , err := types .Marshal (doc )
102
+ if err != nil {
103
+ return nil , err
104
+ }
105
+ if err := types .Unmarshal (val , & resources [i ]); err != nil {
90
106
return nil , err
91
107
}
92
108
}
0 commit comments