Skip to content

Commit d1e657c

Browse files
authored
Merge pull request #11 from GoLedgerDev/develop
Fix getRecursive for list of references
2 parents e0e28c5 + 064ecfc commit d1e657c

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

assets/get.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,8 @@ func getRecursive(stub *sw.StubWrapper, pvtCollection, key string, keysChecked [
159159
return nil, errors.WrapErrorWithStatus(err, "failed to unmarshal asset from ledger", 500)
160160
}
161161

162+
keysCheckedInScope := make([]string, 0)
163+
162164
for k, v := range response {
163165
switch prop := v.(type) {
164166
case map[string]interface{}:
@@ -167,17 +169,26 @@ func getRecursive(stub *sw.StubWrapper, pvtCollection, key string, keysChecked [
167169
return nil, errors.WrapErrorWithStatus(err, "failed to resolve asset references", 500)
168170
}
169171

172+
keyIsFetchedInScope := false
173+
for _, key := range keysCheckedInScope {
174+
if key == propKey.Key() {
175+
keyIsFetchedInScope = true
176+
break
177+
}
178+
}
179+
170180
keyIsFetched := false
171181
for _, key := range keysChecked {
172182
if key == propKey.Key() {
173183
keyIsFetched = true
174184
break
175185
}
176186
}
177-
if keyIsFetched {
187+
if keyIsFetched && !keyIsFetchedInScope {
178188
continue
179189
}
180190
keysChecked = append(keysChecked, propKey.Key())
191+
keysCheckedInScope = append(keysCheckedInScope, propKey.Key())
181192

182193
var subAsset map[string]interface{}
183194
if propKey.IsPrivate() {
@@ -199,17 +210,26 @@ func getRecursive(stub *sw.StubWrapper, pvtCollection, key string, keysChecked [
199210
return nil, errors.WrapErrorWithStatus(err, "failed to resolve asset references", 500)
200211
}
201212

213+
keyIsFetchedInScope := false
214+
for _, key := range keysCheckedInScope {
215+
if key == elemKey.Key() {
216+
keyIsFetchedInScope = true
217+
break
218+
}
219+
}
220+
202221
keyIsFetched := false
203222
for _, key := range keysChecked {
204223
if key == elemKey.Key() {
205224
keyIsFetched = true
206225
break
207226
}
208227
}
209-
if keyIsFetched {
228+
if keyIsFetched && !keyIsFetchedInScope {
210229
continue
211230
}
212231
keysChecked = append(keysChecked, elemKey.Key())
232+
keysCheckedInScope = append(keysCheckedInScope, elemKey.Key())
213233

214234
var subAsset map[string]interface{}
215235
if elemKey.IsPrivate() {

0 commit comments

Comments
 (0)