diff options
Diffstat (limited to 'lib/vendor-pool/service.ts')
| -rw-r--r-- | lib/vendor-pool/service.ts | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/vendor-pool/service.ts b/lib/vendor-pool/service.ts index 3d83e3aa..97a0bcee 100644 --- a/lib/vendor-pool/service.ts +++ b/lib/vendor-pool/service.ts @@ -763,6 +763,23 @@ export async function createVendorPool(data: Omit<VendorPool, 'id' | 'registrati } catch (err) { debugError('Vendor Pool 생성 실패', { error: err, inputData: data }); console.error("Error in createVendorPool:", err); + + // Unique 제약 조건 위반 감지 + const errorMessage = err instanceof Error ? err.message : String(err); + if (errorMessage.includes('unique_vendor_pool_combination') || + errorMessage.includes('duplicate key value') || + errorMessage.includes('violates unique constraint')) { + debugError('Unique 제약 조건 위반 감지', { + constructionSector: data.constructionSector, + htDivision: data.htDivision, + materialGroupCode: data.materialGroupCode, + vendorName: data.vendorName, + error: err + }); + // Unique 제약 위반의 경우 특별한 에러 객체를 throw + throw new Error('DUPLICATE_VENDOR_POOL'); + } + return null; } } @@ -958,6 +975,24 @@ export async function updateVendorPool(id: number, data: Partial<VendorPool>): P } catch (err) { debugError('Vendor Pool 업데이트 실패', { error: err, id, updateData: data }); console.error("Error in updateVendorPool:", err); + + // Unique 제약 조건 위반 감지 + const errorMessage = err instanceof Error ? err.message : String(err); + if (errorMessage.includes('unique_vendor_pool_combination') || + errorMessage.includes('duplicate key value') || + errorMessage.includes('violates unique constraint')) { + debugError('Unique 제약 조건 위반 감지', { + id, + constructionSector: data.constructionSector, + htDivision: data.htDivision, + materialGroupCode: data.materialGroupCode, + vendorName: data.vendorName, + error: err + }); + // Unique 제약 위반의 경우 특별한 에러 객체를 throw + throw new Error('DUPLICATE_VENDOR_POOL'); + } + return null; } } |
