From 535de26b9cf3242c04543d6891d78352b9593a60 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 11 Nov 2025 09:22:58 +0000 Subject: (최겸) 구매 수정사항 개발 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pq/service.ts | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) (limited to 'lib/pq/service.ts') diff --git a/lib/pq/service.ts b/lib/pq/service.ts index 15d9aebc..fd71888e 100644 --- a/lib/pq/service.ts +++ b/lib/pq/service.ts @@ -3777,7 +3777,28 @@ export async function createPQListAction(input: CreatePqListInput) { if (existingGeneralPQ.length > 0) { return { success: false, - error: "General PQ 목록은 하나만 생성할 수 있습니다" + error: "General PQ 목록은 하나만 생성할 수 있습니다. 먼저 활성화된 General PQ를 비활성화한 후 생성해주세요." + }; + } + } + + // Non-Inspection PQ인 경우 중복 체크 + if (validated.type === "NON_INSPECTION") { + const existingNonInspectionPQ = await db + .select() + .from(pqLists) + .where( + and( + eq(pqLists.type, "NON_INSPECTION"), + eq(pqLists.isDeleted, false) + ) + ) + .limit(1); + + if (existingNonInspectionPQ.length > 0) { + return { + success: false, + error: "미실사 PQ 목록은 하나만 생성할 수 있습니다. 먼저 활성화된 미실사 PQ를 비활성화한 후 생성해주세요." }; } } @@ -3829,6 +3850,20 @@ export async function createPQListAction(input: CreatePqListInput) { }) .returning(); + // NON_INSPECTION 타입인 경우 기존 활성화된 NON_INSPECTION 리스트들을 비활성화 + if (validated.type === "NON_INSPECTION") { + await tx + .update(pqLists) + .set({ isDeleted: true, updatedAt: now, updatedBy: userId }) + .where( + and( + eq(pqLists.type, "NON_INSPECTION"), + eq(pqLists.isDeleted, false), + ne(pqLists.id, newPqList.id) // 새로 생성한 리스트 제외 + ) + ); + } + // 프로젝트 PQ인 경우 General PQ 항목들을 자동으로 복사 let copiedCriteriaCount = 0; if (validated.type === "PROJECT") { @@ -4417,6 +4452,58 @@ export async function getPQListInfo(pqListId: number) { )(); } +// 활성화된 미실사 PQ 리스트 조회 (하나만 존재한다고 가정) +export async function getNonInspectionPQLists() { + unstable_noStore(); + + try { + const pqList = await db + .select({ + id: pqLists.id, + name: pqLists.name, + type: pqLists.type, + projectId: pqLists.projectId, + validTo: pqLists.validTo, + isDeleted: pqLists.isDeleted, + createdAt: pqLists.createdAt, + updatedAt: pqLists.updatedAt, + }) + .from(pqLists) + .where(and( + eq(pqLists.type, "NON_INSPECTION"), + eq(pqLists.isDeleted, false) + )) + .limit(1) + .then(rows => rows[0]); + + if (!pqList) { + return { + success: false, + error: "활성화된 미실사 PQ 목록을 찾을 수 없습니다" + }; + } + + // 현재 시간과 비교하여 상태 결정 + const now = new Date(); + const isValid = !pqList.validTo || pqList.validTo > now; + const status = isValid ? "ACTIVE" : "INACTIVE"; + + return { + success: true, + data: { + ...pqList, + status + } + }; + } catch (error) { + console.error("Error in getNonInspectionPQLists:", error); + return { + success: false, + error: "미실사 PQ 목록 정보를 가져오는 중 오류가 발생했습니다" + }; + } +} + export async function getPQsByListId(pqListId: number, input: GetPQSchema) { return unstable_cache( async () => { -- cgit v1.2.3