summaryrefslogtreecommitdiffstats
path: root/server/lib/grouphelper.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/lib/grouphelper.js')
-rw-r--r--server/lib/grouphelper.js55
1 files changed, 54 insertions, 1 deletions
diff --git a/server/lib/grouphelper.js b/server/lib/grouphelper.js
index 117dd79..fe94b50 100644
--- a/server/lib/grouphelper.js
+++ b/server/lib/grouphelper.js
@@ -36,4 +36,57 @@ async function getAllChildrenByIds (groupIds, knownGroupMap, knownClientMap) {
return { subgroups, clients }
}
-module.exports = { getAllChildren }
+async function addPathsToGroups (groups, queryParents = true) {
+ const allGroups = queryParents ? await db.group.findAll({ order: [['name', 'ASC']], include: ['parents'] }) : groups
+ const parentMap = {}
+ allGroups.forEach(group => {
+ parentMap[group.id] = group.parents
+ })
+ const groupsWithPaths = []
+ groups.forEach(group => {
+ let g = group.toJSON()
+ delete g.parents
+ g.paths = _buildPaths(parentMap, group)
+ groupsWithPaths.push(g)
+ })
+ return groupsWithPaths
+}
+
+async function addPathsToClients (clients) {
+ const allGroups = await db.group.findAll({ order: [['name', 'ASC']], include: ['parents'] })
+ const parentMap = {}
+ allGroups.forEach(group => {
+ parentMap[group.id] = group.parents
+ })
+ const clientsWithPaths = []
+ clients.forEach(client => {
+ let c = client.toJSON()
+ delete c.groups
+
+ c.paths = []
+ client.groups.forEach(group => {
+ c.paths.push(..._buildPaths(parentMap, group))
+ })
+
+ clientsWithPaths.push(c)
+ })
+ return clientsWithPaths
+}
+
+function _buildPaths (parentMap, group, knownIds = []) {
+ let parents = parentMap[group.id]
+ let paths = []
+ if (parents && parents.length > 0) {
+ parents.forEach(parent => {
+ if (!knownIds.includes(parent.id)) {
+ paths.push(..._buildPaths(parentMap, parent, [...knownIds, group.id]))
+ }
+ })
+ if (knownIds.length) paths.forEach(path => path.push(group.name))
+ } else {
+ if (knownIds.length) paths.push([group.name])
+ }
+ return paths
+}
+
+module.exports = { getAllChildren, addPathsToGroups, addPathsToClients }