Sequencialize upserts

This commit is contained in:
Douglas Barone 2022-02-01 11:35:37 -04:00
parent 1f90ea6cca
commit 26bcb56626

View File

@ -10,6 +10,7 @@ import jwt from 'jsonwebtoken'
import { pubsub, AUTH_UPDATED } from '../pubsub'
import { logError, logInfo, logSuccess, logWarning } from '../lib/logger'
import { performance } from 'perf_hooks'
class User {
constructor(username) {
this.username = username
@ -378,21 +379,36 @@ class User {
message: 'Importando usuários para o Banco de Dados local'
})
await Promise.all(
allAdUsers.map(async user =>
prisma.user.upsert({
where: {
sAMAccountName: user.sAMAccountName
},
update: user,
create: user
})
)
)
const startTime = performance.now()
// Do not promise.all, because it freezes the app
for (const [index, user] of allAdUsers.entries()) {
const dbUser = await prisma.user.upsert({
where: {
sAMAccountName: user.sAMAccountName
},
update: user,
create: user
})
logSuccess({
message: `Importado ${index + 1}/${allAdUsers.length} (${
user.sAMAccountName
}) ${user.displayName}`,
data: dbUser
})
}
const endTime = performance.now()
logSuccess({
tags: ['user', 'AD'],
message: `${allAdUsers.length} usuários importados do Active Directory`
message: `${
allAdUsers.length
} usuários importados do Active Directory em ${(
(endTime - startTime) /
1000
).toFixed(2)}s`
})
return allAdUsers.length