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