module.exports.groupFilter = function (options = null) {\r
return async context => {\r
\r
+ if (!context.params.provider) {\r
+ return Promise.resolve(context);\r
+ }\r
\r
switch(context.method){\r
case 'get':\r
context.app.services[context.app.get('base-path') + 'groups'].Model.aggregate([\r
{\r
$match: context.params.query\r
- },\r
- {\r
- $graphLookup: {\r
- from: "groups",\r
- startWith: "$parentGroupId",\r
- connectFromField: "parentGroupId",\r
- connectToField: "_id",\r
- as: "parentGroups"\r
+ }\r
+ ]).then(async res => {\r
+ if(res.length){\r
+ for(let i = 0; i < res.length; i++){\r
+ res[i]['parentGroups'] = await getParentGroups(context.app.services[context.app.get('base-path') + 'groups'].Model, res[i]);\r
}\r
}\r
- ]).then(res => {\r
resolve(res);\r
}).catch(err => {\r
throw new errors.GeneralError(err);\r
};\r
};\r
\r
+getParentGroups = async function(model, group){\r
+ return new Promise(async (resolve, reject) => {\r
+ let parentGroups = [];\r
+ if(group.parentGroupId){\r
+ model.aggregate([\r
+ {\r
+ $match: {\r
+ '_id': group.parentGroupId\r
+ }\r
+ }\r
+ ]).then(async res => {\r
+ if(res[0] && res[0].parentGroupId){\r
+ parentGroups.unshift(res[0]);\r
+ let parents = await getParentGroups(model, res[0]);\r
+ parents.forEach(e => {\r
+ parentGroups.unshift(e);\r
+ });\r
+ }\r
+ resolve(parentGroups);\r
+ }).catch(err => {\r
+ reject(err);\r
+ })\r
+ }else{\r
+ resolve();\r
+ }\r
+ });\r
+ \r
+}\r
+\r
getChildGroups = async function(model, group){\r
return new Promise(async (resolve, reject) => {\r
let childGroups = [];\r