diff options
| author | joonhoekim <26rote@gmail.com> | 2025-10-28 12:09:50 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-10-28 12:09:50 +0900 |
| commit | c9251054ccea7e53d144a4a1a405c9dfad969a8b (patch) | |
| tree | 8eb5d3ad15367fdf2c6990206e04da34a260cf38 /lib/knox-sync | |
| parent | aa7c7dfd41e37465ca761d834f5ab90e1b04334c (diff) | |
(김준회) knox stage 처리를 위해 스테이지 계정만 knox sync 통해 동기화하도록 처리
Diffstat (limited to 'lib/knox-sync')
| -rw-r--r-- | lib/knox-sync/employee-sync-service.ts | 22 | ||||
| -rw-r--r-- | lib/knox-sync/master-sync-service.ts | 6 |
2 files changed, 20 insertions, 8 deletions
diff --git a/lib/knox-sync/employee-sync-service.ts b/lib/knox-sync/employee-sync-service.ts index 3055e1ef..200dd86f 100644 --- a/lib/knox-sync/employee-sync-service.ts +++ b/lib/knox-sync/employee-sync-service.ts @@ -1,3 +1,9 @@ +/** + * Knox Employee 동기화 서비스 + * Knox Employee 데이터를 Users 테이블과 동기화 + * 스테이지 계정을 추가해주려는 목적이라 메일에 '@stage' 문자열이 있는지 확인함. 운영에서는 전부 무시될 것임 + */ + 'use server'; import * as cron from 'node-cron'; @@ -10,7 +16,7 @@ import { searchEmployees, Employee, } from '@/lib/knox-api/employee/employee'; -import { sql, eq, and, ne } from 'drizzle-orm'; +import { eq, and, ne, isNotNull, like } from 'drizzle-orm'; import { KNOX_COMPANIES, delay, @@ -29,7 +35,12 @@ const DO_FIRST_RUN = process.env.KNOX_EMPLOYEE_SYNC_FIRST_RUN === 'true'; async function insertEmployees(employees: Employee[]) { if (!employees.length) return; - const rows = employees.map((e) => ({ + // @stage 도메인을 가진 직원만 필터링 + const filteredEmployees = employees.filter(e => e.emailAddress && e.emailAddress.includes('@stage')); + + if (!filteredEmployees.length) return; + + const rows = filteredEmployees.map((e) => ({ epId: e.epId, employeeNumber: e.employeeNumber, userId: e.userId, @@ -190,7 +201,7 @@ async function syncEmployeesToUsers(): Promise<void> { try { console.log('[KNOX-SYNC] Users 테이블 동기화 시작'); - // Knox employee 테이블에서 이메일이 있는 레코드들 조회 + // Knox employee 테이블에서 이메일이 있는 레코드들 조회 (@stage 도메인만) const employees = await db .select({ fullName: employeeTable.fullName, @@ -203,8 +214,9 @@ async function syncEmployeesToUsers(): Promise<void> { .from(employeeTable) .where( and( - sql`${employeeTable.emailAddress} IS NOT NULL`, - sql`${employeeTable.emailAddress} != ''` + isNotNull(employeeTable.emailAddress), + ne(employeeTable.emailAddress, ''), + like(employeeTable.emailAddress, '%@stage%') ) ); diff --git a/lib/knox-sync/master-sync-service.ts b/lib/knox-sync/master-sync-service.ts index 8950f514..edeb446e 100644 --- a/lib/knox-sync/master-sync-service.ts +++ b/lib/knox-sync/master-sync-service.ts @@ -35,9 +35,9 @@ export async function syncAllKnoxData(): Promise<void> { // 3단계: 임직원 동기화 (조직 완료 후) console.log('[KNOX-SYNC] 3/3: 임직원 동기화는 생략 (SHI-API를 통한 nonsap 사용자로 동기화함'); - // console.log('[KNOX-SYNC] 3/3: 임직원 동기화 시작'); - // await syncKnoxEmployees(); - // console.log('[KNOX-SYNC] 3/3: 임직원 동기화 완료 ✅'); + console.log('[KNOX-SYNC] 3/3: 임직원 동기화 시작'); + await syncKnoxEmployees(); + console.log('[KNOX-SYNC] 3/3: 임직원 동기화 완료 ✅'); const overallDuration = Math.round((Date.now() - overallStartTime) / 1000); console.log(`[KNOX-SYNC] 🎉 Knox 통합 동기화 완료 - 총 ${overallDuration}초 소요`); |
