summaryrefslogtreecommitdiff
path: root/lib/shi-api
diff options
context:
space:
mode:
Diffstat (limited to 'lib/shi-api')
-rw-r--r--lib/shi-api/shi-api-utils.ts27
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`);