summaryrefslogtreecommitdiff
path: root/lib/swp/document-service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/swp/document-service.ts')
-rw-r--r--lib/swp/document-service.ts76
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/swp/document-service.ts b/lib/swp/document-service.ts
index 49e4da4c..f83488d9 100644
--- a/lib/swp/document-service.ts
+++ b/lib/swp/document-service.ts
@@ -1,5 +1,81 @@
"use server";
+/**
+ * SWP Document Service
+ *
+ * ## 목적
+ * SWP API 응답을 가공하여 프론트엔드에 최적화된 데이터 구조를 제공합니다.
+ *
+ * ## 역할
+ * 1. **데이터 변환**: API 응답을 UI 친화적 구조로 변환
+ * 2. **데이터 집계**: 여러 API 호출 결과를 조합 (예: 문서 + 파일 개수)
+ * 3. **비즈니스 로직**: 파일 다운로드, 취소 가능 여부 판단 등
+ * 4. **에러 처리**: API 실패 시 사용자 친화적 에러 메시지 반환
+ *
+ * ## 주요 함수
+ *
+ * ### 조회
+ * - `getDocumentList(projNo, vndrCd)`: 문서 목록 + 파일 개수 집계
+ * - `getDocumentDetail(projNo, docNo)`: Rev → Activity → File 3단계 트리 구조
+ *
+ * ### 액션
+ * - `cancelStandbyFile(boxSeq, actvSeq, userId)`: Standby 파일 취소 (SCW01만)
+ * - `downloadDocumentFile(projNo, ownDocNo, fileName)`: NFS에서 파일 다운로드
+ *
+ * ## 데이터 구조
+ *
+ * ### DocumentListItem (문서 목록)
+ * ```typescript
+ * {
+ * DOC_NO: string,
+ * DOC_TITLE: string,
+ * LTST_REV_NO: string,
+ * STAGE: string,
+ * fileCount: number, // 전체 파일 개수
+ * standbyFileCount: number, // 업로드 대기 중 (SCW01)
+ * ...
+ * }
+ * ```
+ *
+ * ### DocumentDetail (문서 상세)
+ * ```typescript
+ * {
+ * docNo: string,
+ * revisions: [
+ * {
+ * revNo: "04",
+ * stage: "IFC",
+ * activities: [
+ * {
+ * actvNo: "ACTV123",
+ * type: "External Outbox",
+ * files: [
+ * {
+ * fileNm: "drawing.pdf",
+ * stat: "COM01",
+ * canDownload: true,
+ * canCancel: false,
+ * ...
+ * }
+ * ]
+ * }
+ * ]
+ * }
+ * ]
+ * }
+ * ```
+ *
+ * ## 설계 원칙
+ * 1. **API 호출 최소화**: 필요한 데이터를 한 번에 조회 후 가공
+ * 2. **타입 안전성**: 모든 반환 타입을 명확히 정의
+ * 3. **UI 친화적**: 프론트엔드가 바로 사용 가능한 구조
+ * 4. **에러 복원력**: API 실패 시에도 부분 데이터 제공 시도
+ *
+ * @see lib/swp/api-client.ts - 저수준 API 호출
+ * @see lib/swp/vendor-actions.ts - 서버 액션 (권한 체크 추가)
+ * @see lib/swp/README.md - 전체 시스템 문서
+ */
+
import {
fetchGetVDRDocumentList,
fetchGetExternalInboxList,