diff options
| author | joonhoekim <26rote@gmail.com> | 2025-11-27 17:53:34 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-11-27 17:53:34 +0900 |
| commit | 5870b73785715d1585531e655c06d8c068eb64ac (patch) | |
| tree | 1d19e1482f5210cc56e778158b51e810f9717c46 /app/api/cron | |
| parent | 95984e67b8d57fbe1431fcfedf3bb682f28416b3 (diff) | |
(김준회) Revert "(대표님) EDP 작업사항"
태그 가져오기 실패 등 에러로 인한 Revert 처리
Diffstat (limited to 'app/api/cron')
| -rw-r--r-- | app/api/cron/form-tags-plant/start/route.ts | 141 | ||||
| -rw-r--r-- | app/api/cron/form-tags-plant/status/route.ts | 46 | ||||
| -rw-r--r-- | app/api/cron/tags-plant/start/route.ts | 149 | ||||
| -rw-r--r-- | app/api/cron/tags-plant/status/route.ts | 46 |
4 files changed, 0 insertions, 382 deletions
diff --git a/app/api/cron/form-tags-plant/start/route.ts b/app/api/cron/form-tags-plant/start/route.ts deleted file mode 100644 index 17eb8979..00000000 --- a/app/api/cron/form-tags-plant/start/route.ts +++ /dev/null @@ -1,141 +0,0 @@ -// app/api/cron/form-tags/start/route.ts -import { NextRequest } from 'next/server'; -import { v4 as uuidv4 } from 'uuid'; -import { revalidateTag } from 'next/cache'; - -// 동기화 작업의 상태를 저장할 Map -// 실제 프로덕션에서는 Redis 또는 DB에 저장하는 것이 좋습니다 -const syncJobs = new Map<string, { - status: 'queued' | 'processing' | 'completed' | 'failed'; - startTime: Date; - endTime?: Date; - result?: any; - error?: string; - progress?: number; - projectCode?: string; - formCode?: string; - packageCode?: string; - mode?: string -}>(); - -export async function POST(request: NextRequest) { - try { - // 요청 데이터 가져오기 - let projectCode: string | undefined; - let formCode: string | undefined; - let packageCode: string | undefined; - let mode: string | undefined; - - - const body = await request.json(); - projectCode = body.projectCode; - formCode = body.formCode; - packageCode = body.packageCode; - mode = body.mode; // 모드 정보 추출 - - - // 고유 ID 생성 - const syncId = uuidv4(); - - // 작업 상태 초기화 - syncJobs.set(syncId, { - status: 'queued', - startTime: new Date(), - formCode, - projectCode, - packageCode, - mode - - }); - - // 비동기 작업 시작 (백그라운드에서 실행) - processTagImport(syncId).catch(error => { - console.error('Background tag import job failed:', error); - syncJobs.set(syncId, { - ...syncJobs.get(syncId)!, - status: 'failed', - endTime: new Date(), - error: error.message || 'Unknown error occurred' - }); - }); - - // 즉시 응답 반환 (작업 ID 포함) - return Response.json({ - success: true, - message: 'Tag import job started', - syncId - }, { status: 200 }); - - } catch (error: any) { - console.error('Failed to start tag import job:', error); - return Response.json({ - success: false, - error: error.message || 'Failed to start tag import job' - }, { status: 500 }); - } -} - -// 백그라운드에서 실행되는 태그 가져오기 작업 -async function processTagImport(syncId: string) { - try { - const jobInfo = syncJobs.get(syncId)!; - const formCode = jobInfo.formCode; - const projectCode = jobInfo.projectCode; - const packageCode = jobInfo.packageCode || 0; - const mode = jobInfo.mode || 0; - - // 상태 업데이트: 처리 중 - syncJobs.set(syncId, { - ...jobInfo, - status: 'processing', - progress: 0, - }); - - if (!formCode || !projectCode ) { - throw new Error('formCode,projectCode is required'); - } - - // 여기서 실제 태그 가져오기 로직 import - const { importTagsFromSEDP } = await import('@/lib/sedp/get-form-tags-plant'); - - // 진행 상황 업데이트를 위한 콜백 함수 - const updateProgress = (progress: number) => { - syncJobs.set(syncId, { - ...syncJobs.get(syncId)!, - progress - }); - }; - - // 실제 태그 가져오기 실행 - const result = await importTagsFromSEDP(formCode, projectCode, packageCode, updateProgress); - - // 명시적으로 캐시 무효화 - revalidateTag(`forms-${packageCode}-${mode}`); - - // 상태 업데이트: 완료 - syncJobs.set(syncId, { - ...syncJobs.get(syncId)!, - status: 'completed', - endTime: new Date(), - result, - progress: 100, - }); - - return result; - } catch (error: any) { - // 에러 발생 시 상태 업데이트 - syncJobs.set(syncId, { - ...syncJobs.get(syncId)!, - status: 'failed', - endTime: new Date(), - error: error.message || 'Unknown error occurred', - }); - - throw error; // 에러 다시 던지기 - } -} - -// 서버 메모리에 저장된 작업 상태 접근 함수 (다른 API에서 사용) -export function getSyncJobStatus(id: string) { - return syncJobs.get(id); -}
\ No newline at end of file diff --git a/app/api/cron/form-tags-plant/status/route.ts b/app/api/cron/form-tags-plant/status/route.ts deleted file mode 100644 index 9d288f52..00000000 --- a/app/api/cron/form-tags-plant/status/route.ts +++ /dev/null @@ -1,46 +0,0 @@ -// app/api/cron/tags/status/route.ts -import { NextRequest } from 'next/server'; -import { getSyncJobStatus } from '../start/route'; - -export async function GET(request: NextRequest) { - try { - // URL에서 작업 ID 가져오기 - const searchParams = request.nextUrl.searchParams; - const syncId = searchParams.get('id'); - - if (!syncId) { - return Response.json({ - success: false, - error: 'Missing sync ID parameter' - }, { status: 400 }); - } - - // 작업 상태 조회 - const jobStatus = getSyncJobStatus(syncId); - - if (!jobStatus) { - return Response.json({ - success: false, - error: 'Sync job not found' - }, { status: 404 }); - } - - // 작업 상태 반환 - return Response.json({ - success: true, - status: jobStatus.status, - startTime: jobStatus.startTime, - endTime: jobStatus.endTime, - progress: jobStatus.progress, - result: jobStatus.result, - error: jobStatus.error - }, { status: 200 }); - - } catch (error: any) { - console.error('Error retrieving tag import status:', error); - return Response.json({ - success: false, - error: error.message || 'Failed to retrieve tag import status' - }, { status: 500 }); - } -}
\ No newline at end of file diff --git a/app/api/cron/tags-plant/start/route.ts b/app/api/cron/tags-plant/start/route.ts deleted file mode 100644 index 83e06935..00000000 --- a/app/api/cron/tags-plant/start/route.ts +++ /dev/null @@ -1,149 +0,0 @@ -// app/api/cron/tags/start/route.ts -import { NextRequest } from 'next/server'; -import { v4 as uuidv4 } from 'uuid'; -import { revalidateTag } from 'next/cache'; - -// 동기화 작업의 상태를 저장할 Map -// 실제 프로덕션에서는 Redis 또는 DB에 저장하는 것이 좋습니다 -const syncJobs = new Map<string, { - status: 'queued' | 'processing' | 'completed' | 'failed'; - startTime: Date; - endTime?: Date; - result?: any; - error?: string; - progress?: number; - projectCode?: string; - packageCode?: string; - mode?: string -}>(); - -export async function POST(request: NextRequest) { - try { - // 요청 데이터 가져오기 - let projectCode: string | undefined; - let packageCode: string | undefined; - let mode: string | undefined; - - try { - const body = await request.json(); - projectCode = body.projectCode; - packageCode = body.packageCode; - mode = body.mode; // 모드 정보 추출 - - } catch (error) { - // 요청 본문이 없거나 JSON이 아닌 경우, URL 파라미터 확인 - const searchParams = request.nextUrl.searchParams; - const projectCodeParam = searchParams.get('projectCode'); - const packageCodeParam = searchParams.get('packageCode'); - - if (projectCodeParam&&packageCodeParam) { - projectCode = projectCodeParam; - packageCode = packageCodeParam; - } - mode = searchParams.get('mode') || undefined; - } - - // 고유 ID 생성 - const syncId = uuidv4(); - - // 작업 상태 초기화 - syncJobs.set(syncId, { - status: 'queued', - startTime: new Date(), - projectCode, - packageCode, - mode - }); - - // 비동기 작업 시작 (백그라운드에서 실행) - processTagImport(syncId).catch(error => { - console.error('Background tag import job failed:', error); - syncJobs.set(syncId, { - ...syncJobs.get(syncId)!, - status: 'failed', - endTime: new Date(), - error: error.message || 'Unknown error occurred' - }); - }); - - // 즉시 응답 반환 (작업 ID 포함) - return Response.json({ - success: true, - message: 'Tag import job started', - syncId - }, { status: 200 }); - - } catch (error: any) { - console.error('Failed to start tag import job:', error); - return Response.json({ - success: false, - error: error.message || 'Failed to start tag import job' - }, { status: 500 }); - } -} - -// 백그라운드에서 실행되는 태그 가져오기 작업 -async function processTagImport(syncId: string) { - try { - const jobInfo = syncJobs.get(syncId)!; - const projectCode = jobInfo.projectCode; - const packageCode = jobInfo.packageCode; - const mode = jobInfo.mode; // 모드 정보 추출 - - - // 상태 업데이트: 처리 중 - syncJobs.set(syncId, { - ...jobInfo, - status: 'processing', - progress: 0, - }); - - if (!packageCode) { - throw new Error('Package is required'); - } - - // 여기서 실제 태그 가져오기 로직 import - const { importTagsFromSEDP } = await import('@/lib/sedp/get-tags-plant'); - - // 진행 상황 업데이트를 위한 콜백 함수 - const updateProgress = (progress: number) => { - syncJobs.set(syncId, { - ...syncJobs.get(syncId)!, - progress - }); - }; - - // 실제 태그 가져오기 실행 - const result = await importTagsFromSEDP(projectCode, packageCode,updateProgress, mode); - - // 명시적으로 캐시 무효화 - revalidateTag(`tags-${packageCode}`); - revalidateTag(`forms-${packageCode}-${mode}`); - - // 상태 업데이트: 완료 - syncJobs.set(syncId, { - ...syncJobs.get(syncId)!, - status: 'completed', - endTime: new Date(), - result, - progress: 100, - }); - - return result; - } catch (error: any) { - // 에러 발생 시 상태 업데이트 - syncJobs.set(syncId, { - ...syncJobs.get(syncId)!, - status: 'failed', - endTime: new Date(), - error: error.message || 'Unknown error occurred', - }); - - throw error; // 에러 다시 던지기 - } -} - -// 서버 메모리에 저장된 작업 상태 접근 함수 (다른 API에서 사용) -export function getSyncJobStatus(id: string) { - return syncJobs.get(id); -}
\ No newline at end of file diff --git a/app/api/cron/tags-plant/status/route.ts b/app/api/cron/tags-plant/status/route.ts deleted file mode 100644 index 9d288f52..00000000 --- a/app/api/cron/tags-plant/status/route.ts +++ /dev/null @@ -1,46 +0,0 @@ -// app/api/cron/tags/status/route.ts -import { NextRequest } from 'next/server'; -import { getSyncJobStatus } from '../start/route'; - -export async function GET(request: NextRequest) { - try { - // URL에서 작업 ID 가져오기 - const searchParams = request.nextUrl.searchParams; - const syncId = searchParams.get('id'); - - if (!syncId) { - return Response.json({ - success: false, - error: 'Missing sync ID parameter' - }, { status: 400 }); - } - - // 작업 상태 조회 - const jobStatus = getSyncJobStatus(syncId); - - if (!jobStatus) { - return Response.json({ - success: false, - error: 'Sync job not found' - }, { status: 404 }); - } - - // 작업 상태 반환 - return Response.json({ - success: true, - status: jobStatus.status, - startTime: jobStatus.startTime, - endTime: jobStatus.endTime, - progress: jobStatus.progress, - result: jobStatus.result, - error: jobStatus.error - }, { status: 200 }); - - } catch (error: any) { - console.error('Error retrieving tag import status:', error); - return Response.json({ - success: false, - error: error.message || 'Failed to retrieve tag import status' - }, { status: 500 }); - } -}
\ No newline at end of file |
