summaryrefslogtreecommitdiff
path: root/lib/shi-api/shi-api-utils.ts
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-08-18 01:06:37 +0000
committerjoonhoekim <26rote@gmail.com>2025-08-18 01:06:37 +0000
commitb36330c94400f39ec9baed64b82a73bae58edbf2 (patch)
treeeea344d39b3101289ed4f6b74e0c98b6b33ef460 /lib/shi-api/shi-api-utils.ts
parent5adc1df95f80fbec7a0b5bbee15448b10d5aec3a (diff)
(김준회) 파일업로드시 바이너리검증부 주석처리, knex webpack 한계로 인한 빌드 로그 경고 무시, 환경변수 오류 처리, 벤더 로그인 폼 사업자번호를 000 으로 수정, 유저 phone number 사이즈 늘림, 도커 DB 예시 추가
Diffstat (limited to 'lib/shi-api/shi-api-utils.ts')
-rw-r--r--lib/shi-api/shi-api-utils.ts68
1 files changed, 45 insertions, 23 deletions
diff --git a/lib/shi-api/shi-api-utils.ts b/lib/shi-api/shi-api-utils.ts
index 280a2fcb..3906883a 100644
--- a/lib/shi-api/shi-api-utils.ts
+++ b/lib/shi-api/shi-api-utils.ts
@@ -65,8 +65,8 @@ export const getAllNonsapUser = async () => {
name: u.USR_NM || undefined,
email: u.EMAIL_ADR || undefined,
epId: u.MYSNG_ID || undefined,
- deptCode: u.CH_DEPTCD || undefined,
- deptName: u.CH_DEPTNM || undefined,
+ deptCode: u.DEPTCD || undefined,
+ deptName: u.DEPTNM || undefined,
phone: u.TELNO || undefined,
isAbsent,
isDeletedOnNonSap: isDeleted,
@@ -80,27 +80,49 @@ export const getAllNonsapUser = async () => {
const mappedUsers = mappedRaw as InsertUser[];
if (mappedUsers.length > 0) {
- await db.insert(users)
- .values(mappedUsers)
- .onConflictDoUpdate({
- target: users.nonsapUserId,
- 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()`,
- },
- });
- debugSuccess(`[UPSERT] users upserted=${mappedUsers.length} using key=nonsapUserId`);
+ // 배치 처리: 500개씩 분할하여 처리 (콜스택 크기 문제 대응)
+ const BATCH_SIZE = 500;
+ let totalUpserted = 0;
+
+ for (let i = 0; i < mappedUsers.length; i += BATCH_SIZE) {
+ const batch = mappedUsers.slice(i, i + BATCH_SIZE);
+
+ try {
+ await db.insert(users)
+ .values(batch)
+ .onConflictDoUpdate({
+ target: users.nonsapUserId,
+ 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()`,
+ },
+ });
+
+ totalUpserted += batch.length;
+ debugLog(`[BATCH ${Math.floor(i/BATCH_SIZE) + 1}] Processed ${batch.length} users (${totalUpserted}/${mappedUsers.length})`);
+
+ // 배치 간 잠시 대기하여 시스템 부하 방지
+ if (i + BATCH_SIZE < mappedUsers.length) {
+ await new Promise(resolve => setTimeout(resolve, 100));
+ }
+ } catch (batchError) {
+ debugError(`[BATCH ${Math.floor(i/BATCH_SIZE) + 1}] Failed to process batch ${i}-${i+batch.length}`, batchError);
+ throw batchError;
+ }
+ }
+
+ debugSuccess(`[UPSERT] users upserted=${totalUpserted} using key=nonsapUserId (processed in ${Math.ceil(mappedUsers.length/BATCH_SIZE)} batches)`);
} else {
debugWarn('[UPSERT] No users mapped for upsert (missing name/email or invalid USR_ID)');
}