From 04a2fb01cb93ece567d9f5f8fb3caf064d0d4fd0 Mon Sep 17 00:00:00 2001 From: Douglas Barone Date: Tue, 1 Dec 2020 14:56:20 -0400 Subject: [PATCH] Optimized AD user import --- server/src/classes/User.js | 45 ++++++++++++++++---------------- server/src/resolvers/Mutation.js | 2 -- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/server/src/classes/User.js b/server/src/classes/User.js index e6a1681..c371842 100755 --- a/server/src/classes/User.js +++ b/server/src/classes/User.js @@ -287,6 +287,13 @@ class User { } static async importAllUsers() { + if (this.working) { + console.log('Já há uma importação em andamento') + return 0 + } + + this.working = true + try { console.log('Obtendo usuários do AD...') @@ -295,35 +302,27 @@ class User { filter: '(!(userAccountControl:1.2.840.113556.1.4.803:=2))' // Only active users }) - // const allAdUsers = await ad.getUsersForGroup('Estudantes') - // const allAdUsers = [await ad.findUser('aluno.teste')] + console.log('Importando usuários...') - const dbUsers = [] - let i = 0 - - allAdUsers.forEach(async user => { - const dbUser = await prisma.user.upsert({ - where: { - sAMAccountName: user.sAMAccountName - }, - update: user, - create: user - }) - - dbUsers.push(dbUser) - - i++ - - process.stdout.write( - `\rImportando usuário ${i} de ${allAdUsers.length}.` + await Promise.all( + allAdUsers.map(async user => + prisma.user.upsert({ + where: { + sAMAccountName: user.sAMAccountName + }, + update: user, + create: user + }) ) - }) + ) - console.log('\nOK!') + console.log(`${allAdUsers.length} usuários importados`) - return dbUsers + return allAdUsers.length } catch (e) { throw new Error('Erro ao importar usuários: ' + e) + } finally { + this.working = false } } } diff --git a/server/src/resolvers/Mutation.js b/server/src/resolvers/Mutation.js index d8056ef..97b8c1b 100755 --- a/server/src/resolvers/Mutation.js +++ b/server/src/resolvers/Mutation.js @@ -25,8 +25,6 @@ const Mutation = { async importUsers() { User.importAllUsers() - .then(users => console.log('OK', users.length)) - .catch(console.log) return 'A importação está sendo feita. Isso pode demorar alguns minutos.' }