added azure related code
[it/otf.git] / otf-frontend / server / src / feathers / hooks / filters.js
index d81cd3f..815633a 100644 (file)
@@ -24,6 +24,9 @@ const { ObjectID } = require('mongodb');
 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
@@ -56,17 +59,13 @@ module.exports.groupFilter = function (options = null) {
                                                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
@@ -127,6 +126,35 @@ module.exports.groupFilter = function (options = null) {
        };\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