diff options
| author | joonhoekim <26rote@gmail.com> | 2025-11-13 12:21:18 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-11-13 12:21:18 +0900 |
| commit | d113d1732f7c6356af6619dfaff98604fb68e5ad (patch) | |
| tree | ea77e9c4a5da0123e9aa5e1482d9f1c93afe76ba /lib/vendor-document-list/plant | |
| parent | a4ceade24d28af0bde985bf750017efc02f053ff (diff) | |
(김준회) SWP 문서리스트: OWN_DOC_NO로 스테이지 검증 추가
Diffstat (limited to 'lib/vendor-document-list/plant')
| -rw-r--r-- | lib/vendor-document-list/plant/document-stages-service.ts | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/lib/vendor-document-list/plant/document-stages-service.ts b/lib/vendor-document-list/plant/document-stages-service.ts index 7740a385..ed4099b3 100644 --- a/lib/vendor-document-list/plant/document-stages-service.ts +++ b/lib/vendor-document-list/plant/document-stages-service.ts @@ -1560,3 +1560,107 @@ export async function uploadImportData(data: UploadData) { } } } + +/** + * SWP 파일 업로드 검증을 위한 문서 정보 조회 + * - vendorDocNumber → docClass 매핑 + * - Document Class별 허용 Stage 목록 + * + * @param projectId 프로젝트 ID + * @returns vendorDocNumber → Document Class 매핑 + Document Class → 허용 Stage 목록 + */ +export async function getDocumentClassInfoForSwpUpload(projectId: number): Promise<{ + vendorDocNumberToDocClassMap: Record<string, string>; + documentClassStages: Record<string, string[]>; +}> { + try { + console.log(`[getDocumentClassInfoForSwpUpload] 프로젝트 ${projectId} 문서 정보 조회 시작`); + + // 1. 프로젝트의 모든 문서와 해당 docClass 조회 + const documents = await db + .select({ + vendorDocNumber: stageDocuments.vendorDocNumber, + docClass: stageDocuments.docClass, + }) + .from(stageDocuments) + .where( + and( + eq(stageDocuments.projectId, projectId), + eq(stageDocuments.status, "ACTIVE") + ) + ); + + console.log(`[getDocumentClassInfoForSwpUpload] 조회된 문서 개수: ${documents.length}`); + + // 2. vendorDocNumber → docClass 매핑 생성 + const vendorDocNumberToDocClassMap: Record<string, string> = {}; + const documentClassSet = new Set<string>(); + + for (const doc of documents) { + if (doc.vendorDocNumber && doc.docClass) { + vendorDocNumberToDocClassMap[doc.vendorDocNumber] = doc.docClass; + documentClassSet.add(doc.docClass); + } + } + + console.log(`[getDocumentClassInfoForSwpUpload] vendorDocNumber 매핑 개수: ${Object.keys(vendorDocNumberToDocClassMap).length}`); + console.log(`[getDocumentClassInfoForSwpUpload] 사용 중인 Document Class: ${Array.from(documentClassSet).join(", ")}`); + + // 3. 프로젝트의 Document Class별 허용 Stage 목록 조회 + if (documentClassSet.size === 0) { + console.log(`[getDocumentClassInfoForSwpUpload] Document Class가 없음 → 빈 결과 반환`); + return { + vendorDocNumberToDocClassMap: {}, + documentClassStages: {}, + }; + } + + // 프로젝트의 모든 Document Class와 옵션 조회 + const documentClassesWithOptions = await db + .select({ + docClassValue: documentClasses.value, + optionCode: documentClassOptions.optionCode, + }) + .from(documentClasses) + .leftJoin( + documentClassOptions, + eq(documentClasses.id, documentClassOptions.documentClassId) + ) + .where( + and( + eq(documentClasses.projectId, projectId), + eq(documentClasses.isActive, true), + eq(documentClassOptions.isActive, true) + ) + ) + .orderBy(documentClasses.value, documentClassOptions.sdq); + + console.log(`[getDocumentClassInfoForSwpUpload] Document Class 옵션 조회 개수: ${documentClassesWithOptions.length}`); + + // 4. Document Class별로 Stage 목록 그룹핑 + const documentClassStages: Record<string, string[]> = {}; + + for (const row of documentClassesWithOptions) { + if (!row.docClassValue || !row.optionCode) continue; + + if (!documentClassStages[row.docClassValue]) { + documentClassStages[row.docClassValue] = []; + } + + documentClassStages[row.docClassValue].push(row.optionCode); + } + + console.log(`[getDocumentClassInfoForSwpUpload] Document Class-Stage 매핑:`, documentClassStages); + + return { + vendorDocNumberToDocClassMap, + documentClassStages, + }; + } catch (error) { + console.error('[getDocumentClassInfoForSwpUpload] 오류:', error); + return { + vendorDocNumberToDocClassMap: {}, + documentClassStages: {}, + }; + } +} |
