diff options
Diffstat (limited to 'lib/soap/ecc/mapper/rfq-and-pr-mapper.ts')
| -rw-r--r-- | lib/soap/ecc/mapper/rfq-and-pr-mapper.ts | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/lib/soap/ecc/mapper/rfq-and-pr-mapper.ts b/lib/soap/ecc/mapper/rfq-and-pr-mapper.ts index 0ca808ad..9180b4e2 100644 --- a/lib/soap/ecc/mapper/rfq-and-pr-mapper.ts +++ b/lib/soap/ecc/mapper/rfq-and-pr-mapper.ts @@ -479,3 +479,86 @@ export function validateECCRfqData( errors, }; } + +/** + * ECC RFQ 데이터를 삭제 (rfqsLast/rfqPrItems 테이블에서 삭제) + */ +export async function deleteECCRfqData( + eccHeaders: ECCBidHeader[] +): Promise<{ success: boolean; message: string; deletedCount: number }> { + debugLog('ECC RFQ 데이터 삭제 시작', { + headerCount: eccHeaders.length, + }); + + try { + const result = await db.transaction(async (tx) => { + const deletedRfqs: (string | null)[] = []; + + for (const eccHeader of eccHeaders) { + const anfnr = eccHeader.ANFNR; + if (!anfnr) { + debugError('삭제할 ANFNR이 없음', { eccHeader }); + continue; + } + + // 1) 해당 ANFNR의 RFQ 찾기 + const existingRfq = await tx + .select({ id: rfqsLast.id, rfqCode: rfqsLast.rfqCode }) + .from(rfqsLast) + .where(eq(rfqsLast.ANFNR, anfnr)) + .limit(1); + + if (existingRfq.length === 0) { + debugLog(`ANFNR ${anfnr}에 해당하는 RFQ가 존재하지 않음`); + continue; + } + + const rfqId = existingRfq[0].id; + const rfqCode = existingRfq[0].rfqCode; + + if (!rfqCode) { + debugError('RFQ 코드가 없는 데이터는 건너뜀', { rfqId }); + continue; + } + + // 2) rfqPrItems 삭제 + const deletedItems = await tx + .delete(rfqPrItems) + .where(eq(rfqPrItems.rfqsLastId, rfqId)); + + debugLog(`RFQ ${rfqCode}의 PR 아이템 ${deletedItems.rowCount}개 삭제 완료`); + + // 3) rfqsLast 삭제 + await tx + .delete(rfqsLast) + .where(eq(rfqsLast.id, rfqId)); + + deletedRfqs.push(rfqCode); + debugLog(`RFQ ${rfqCode} 삭제 완료`); + } + + return { deletedRfqs }; + }); + + debugSuccess('ECC RFQ 데이터 삭제 완료', { + deletedCount: result.deletedRfqs.length, + deletedRfqs: result.deletedRfqs, + }); + + return { + success: true, + message: `${result.deletedRfqs.length}개의 RFQ 데이터가 성공적으로 삭제되었습니다.`, + deletedCount: result.deletedRfqs.length, + }; + } catch (error) { + debugError('ECC RFQ 데이터 삭제 중 오류 발생', error); + return { + success: false, + message: + error instanceof Error + ? error.message + : '알 수 없는 오류가 발생했습니다.', + deletedCount: 0, + }; + } +} |
