diff options
Diffstat (limited to 'lib/shi-api/shi-api-utils.ts')
| -rw-r--r-- | lib/shi-api/shi-api-utils.ts | 27 |
1 files changed, 5 insertions, 22 deletions
diff --git a/lib/shi-api/shi-api-utils.ts b/lib/shi-api/shi-api-utils.ts index 955cddd9..c0b62b0d 100644 --- a/lib/shi-api/shi-api-utils.ts +++ b/lib/shi-api/shi-api-utils.ts @@ -2,8 +2,8 @@ import { nonsapUser, users } from '@/db/schema'; import db from '@/db/db'; -import { sql } from 'drizzle-orm'; import { debugError, debugLog, debugWarn, debugSuccess } from '@/lib/debug-utils'; +import { bulkUpsert } from '@/lib/soap/batch-utils'; const shiApiBaseUrl = process.env.SHI_API_BASE_URL; const shiNonsapUserSegment = process.env.SHI_NONSAP_USER_SEGMENT; @@ -128,28 +128,11 @@ export const getAllNonsapUser = async () => { } } - // 매핑된 청크가 있을 경우에만 DB 처리 + // 매핑된 청크가 있을 경우에만 DB 처리 (트랜잭션으로 처리) if (mappedChunk.length > 0) { - await db.insert(users) - .values(mappedChunk) - .onConflictDoUpdate({ - target: users.email, - set: { - name: users.name, - employeeNumber: users.employeeNumber, - knoxId: users.knoxId, - epId: users.epId, - deptCode: users.deptCode, - deptName: users.deptName, - phone: users.phone, - nonsapUserId: users.nonsapUserId, - isAbsent: users.isAbsent, - isDeletedOnNonSap: users.isDeletedOnNonSap, - isActive: users.isActive, - isRegularEmployee: users.isRegularEmployee, - updatedAt: sql`now()`, - }, - }); + await db.transaction(async (tx) => { + await bulkUpsert(tx, users, mappedChunk, 'email', 200); // 청크 내에서도 200개씩 세분화 + }); totalUpserted += mappedChunk.length; debugLog(`[CHUNK ${Math.floor(i/CHUNK_SIZE) + 1}] Successfully processed ${mappedChunk.length} users`); |
