/** * instrumentation 진입점 - 여러 JOB들이 등록될 수 있으므로 확장성을 위해 최소한의 메서드 호출만으로 유지 */ export async function register() { console.log('Application instrumentation registered'); // Node.js runtime에서만 동기화 스케줄러 시작 if (process.env.NEXT_RUNTIME === 'nodejs') { // try { // // NONSAP 데이터 동기화 스케줄러 시작 (CMCTB_CDNM, CMCTB_CD) // const { triggerSync } = await import('./lib/nonsap-sync/enhanced-sync-service'); // const cron = (await import('node-cron')).default; // cron.schedule('0 1 * * *', async () => { // try { // await triggerSync(); // } catch (error) { // console.error('NONSAP data sync failed:', error); // } // }, { timezone: 'Asia/Seoul' }); // } catch { // console.error('Failed to start NONSAP data sync scheduler.'); // } // try{ // triggerSync(); // } catch { // console.error('Failed to trigger NONSAP data sync.'); // } try { // Knox 통합 동기화 스케줄러 시작 (직급 → 조직 → 임직원 순차 실행) --- 임직원은 안씀 const { startKnoxMasterSyncScheduler } = await import( './lib/knox-sync/master-sync-service' ); await startKnoxMasterSyncScheduler(); } catch { console.error('Failed to start Knox master sync scheduler.'); // 스케줄러 실패해도 애플리케이션은 계속 실행 } try { // Procurement 동기화 스케줄러 시작 (지불조건, 인코텀즈, 선적지, 하역지) const { startProcurementSyncScheduler } = await import( './lib/nonsap-sync/procurement-sync-service' ); await startProcurementSyncScheduler(); } catch { console.error('Failed to start Procurement sync scheduler.'); // 스케줄러 실패해도 애플리케이션은 계속 실행 } try { // SHI-API NONSAP 사용자 동기화 - 1일 1회 CRON 등록 const { startShiApiUsersDailySyncScheduler } = await import('./lib/shi-api/users-sync-scheduler'); await startShiApiUsersDailySyncScheduler(); } catch { console.error('Failed to start SHI-API users daily cron scheduler.'); // 스케줄러 실패해도 애플리케이션은 계속 실행 } // 부하상 수동 조작한다고 하여 주석 처리 // try { // // EDP 마스터 데이터 동기화 스케줄러 시작 (옥프로 요청사항, 20분마다 EDP에서 들어오는 기준정보 동기화) // const { startEDPMasterDataSyncScheduler } = await import('./lib/edp-sync/sync-edp'); // await startEDPMasterDataSyncScheduler(); // } catch { // console.error('Failed to start EDP master data sync scheduler.'); // // 스케줄러 실패해도 애플리케이션은 계속 실행 // } // 구매그룹코드는 oracle에서 선택기로 확인하고, 유저가 클릭했을 때 업데이트 처리, 유저 1:1 대응 (김수진 프로 확인) // try { // // 사용자 코드 동기화 스케줄러 시작 (구매그룹코드) // const { startUserCodeSyncScheduler } = await import('./lib/nonsap-sync/purchase-group-code/user-code-sync-scheduler'); // await startUserCodeSyncScheduler(); // } catch { // console.error('Failed to start User Code sync scheduler.'); // // 스케줄러 실패해도 애플리케이션은 계속 실행 // } try { // Knox 결재 상태 폴링 스케줄러 시작 (1분마다 pending 결재 상태 확인) // 참고: 핸들러는 Lazy 초기화로 자동 등록됨 (approval-workflow.ts의 ensureHandlersInitialized) const { startApprovalPollingScheduler } = await import('./lib/approval/approval-polling-service'); await startApprovalPollingScheduler(); } catch { console.error('Failed to start Approval polling scheduler.'); // 스케줄러 실패해도 애플리케이션은 계속 실행 } } }