@@ -2,6 +2,7 @@ const _ = require("lodash");
2
2
const resourceIncludeRef = require ( "../../../api_generator/resource-reference/resourceInclude.json" ) ;
3
3
const { findParamType, isResourceType } = require ( "../../../utils/fhir-param" ) ;
4
4
const uuid = require ( "uuid" ) ;
5
+ const { flatten } = require ( "flat" ) ;
5
6
6
7
/**
7
8
*
@@ -304,6 +305,8 @@ function getChainParentJoinQuery(chainParent, value) {
304
305
}
305
306
}
306
307
308
+ processBundleSpecialChain ( chainParent , lastParentFieldList , value ) ;
309
+
307
310
pipeline . push ( {
308
311
$match : {
309
312
$or : lastParentFieldList
@@ -315,5 +318,49 @@ function getChainParentJoinQuery(chainParent, value) {
315
318
}
316
319
}
317
320
321
+ function processBundleSpecialChain ( chainParent , lastParentFieldList , value ) {
322
+ if ( chainParent [ 0 ] [ 0 ] . field . includes ( "entry.0.resource" ) ) {
323
+ let lastChain = chainParent [ chainParent . length - 1 ] [ 0 ] ;
324
+ let originalQuery = {
325
+ $and : [ ] ,
326
+ [ lastChain . param ] : value
327
+ } ;
328
+ lastChain [ "searchFunc" ] ( originalQuery ) ;
329
+ let bundleSpecialQuery = getBundleSpecialQuery ( lastChain , originalQuery ) ;
330
+
331
+ lastParentFieldList . push ( {
332
+ $and : bundleSpecialQuery . $and
333
+ } ) ;
334
+ }
335
+ }
336
+
337
+ function getBundleSpecialQuery ( lastChain , query ) {
338
+ let flattenOriginalQuery = flatten ( query , {
339
+ object : true
340
+ } ) ;
341
+ let unflattenOriginalQuery = { } ;
342
+ Object . keys ( flattenOriginalQuery ) . map ( key => {
343
+ let keySplit = key . split ( "." ) ;
344
+ let startPath = keySplit . slice ( 0 , keySplit . lastIndexOf ( lastChain . field ) ) ;
345
+ let entryPath = "entry.resource" ;
346
+ let paramPath = keySplit . slice ( keySplit . lastIndexOf ( lastChain . field ) ) ;
347
+ let combinePath = [ entryPath , ...paramPath ] . join ( "." ) ;
348
+ if ( combinePath . includes ( "$regex" ) ) {
349
+ _ . set ( unflattenOriginalQuery , startPath , {
350
+ [ combinePath . slice ( 0 , combinePath . indexOf ( "$regex" ) - 1 ) ] : {
351
+ $regex : flattenOriginalQuery [ key ]
352
+ }
353
+ } ) ;
354
+ } else {
355
+ _ . set ( unflattenOriginalQuery , startPath , {
356
+ [ combinePath ] : flattenOriginalQuery [ key ]
357
+ } ) ;
358
+ }
359
+ delete flattenOriginalQuery [ key ] ;
360
+ } ) ;
361
+
362
+ return unflattenOriginalQuery ;
363
+ }
364
+
318
365
module . exports . checkIsChainAndGetChainParent = checkIsChainAndGetChainParent ;
319
366
module . exports . getChainParentJoinQuery = getChainParentJoinQuery ;
0 commit comments