summaryrefslogblamecommitdiffstats
path: root/server/lib/grouputil.js
blob: edbe2ebe12cfe4e3e24f8ef2a0730f4ebc990456 (plain) (tree)



















                                                                                    
                                              
/* global __appdir */
var path = require('path')
var db = require(path.join(__appdir, 'lib', 'sequelize'))

async function getAllChildren (groups, knownGroupIds = []) {
  groups = groups.filter(subgroup => !knownGroupIds.includes(subgroup.id))
  var groupIds = groups.map(g => g.id)
  knownGroupIds = [...knownGroupIds, ...groupIds]
  var [subgroups, clients] = await Promise.all([
    db.group.findAll({ where: { '$parents.id$': groupIds }, include: ['parents'] }),
    db.client.findAll({ where: { '$groups.id$': groupIds }, include: ['groups'] })
  ])
  if (subgroups.length > 0) {
    var subChildren = await getAllChildren(subgroups, knownGroupIds)
    subgroups = [...subgroups, ...subChildren.subgroups]
    clients = [...clients, ...subChildren.clients]
  }
  return { subgroups, clients }
}

module.exports.getAllChildren = getAllChildren