summaryrefslogtreecommitdiff
path: root/lib/pos/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pos/index.ts')
-rw-r--r--lib/pos/index.ts164
1 files changed, 164 insertions, 0 deletions
diff --git a/lib/pos/index.ts b/lib/pos/index.ts
new file mode 100644
index 00000000..7611d5c5
--- /dev/null
+++ b/lib/pos/index.ts
@@ -0,0 +1,164 @@
+// POS 관련 모든 기능을 하나로 통합하는 인덱스 파일
+
+import { getEncryptDocumentumFile } from './get-pos';
+import { createDownloadUrl } from './download-pos-file';
+import { getDcmtmIdByMaterialCode } from './get-dcmtm-id';
+import type { PosFileInfo } from './types';
+
+export {
+ getEncryptDocumentumFile
+} from './get-pos';
+
+export {
+ downloadPosFile,
+ createDownloadUrl
+} from './download-pos-file';
+
+export {
+ getDcmtmIdByMaterialCode,
+ getFirstDcmtmId
+} from './get-dcmtm-id';
+
+export {
+ syncRfqPosFiles
+} from './sync-rfq-pos-files';
+
+// 타입들은 ./types 에서 export
+export type * from './types';
+
+/**
+ * POS 파일을 가져와서 다운로드 URL을 생성하는 통합 함수
+ *
+ * @example
+ * ```typescript
+ * const result = await getPosFileAndCreateDownloadUrl({
+ * objectID: "0900746983f2e12a"
+ * });
+ *
+ * if (result.success && result.downloadUrl) {
+ * // 클라이언트에서 다운로드 링크 사용
+ * window.open(result.downloadUrl, '_blank');
+ * }
+ * ```
+ */
+export async function getPosFileAndCreateDownloadUrl(params: {
+ objectID: string;
+ sabun?: string;
+ appCode?: string;
+ fileCreateMode?: number;
+ securityLevel?: string;
+ isDesign?: boolean;
+}): Promise<{
+ success: boolean;
+ downloadUrl?: string;
+ fileName?: string;
+ error?: string;
+}> {
+ try {
+ // 1. POS에서 파일 경로 가져오기
+ const posResult = await getEncryptDocumentumFile(params);
+
+ if (!posResult.success || !posResult.result) {
+ return {
+ success: false,
+ error: posResult.error || 'POS에서 파일 정보를 가져올 수 없습니다.',
+ };
+ }
+
+ // 2. 다운로드 URL 생성
+ const downloadUrl = await createDownloadUrl(posResult.result);
+
+ // 파일명 추출 (경로의 마지막 부분)
+ const fileName = posResult.result.split(/[\\\/]/).pop() || 'unknown';
+
+ return {
+ success: true,
+ downloadUrl,
+ fileName,
+ };
+ } catch (error) {
+ return {
+ success: false,
+ error: error instanceof Error ? error.message : 'Unknown error',
+ };
+ }
+}
+
+/**
+ * 자재코드부터 POS 파일 다운로드까지 전체 워크플로우를 처리하는 통합 함수
+ *
+ * @example
+ * ```typescript
+ * const result = await getPosFileByMaterialCode({
+ * materialCode: "SN2693A6410100001"
+ * });
+ *
+ * if (result.success && result.downloadUrl) {
+ * // 클라이언트에서 다운로드 링크 사용
+ * window.open(result.downloadUrl, '_blank');
+ * }
+ * ```
+ */
+export async function getPosFileByMaterialCode(params: {
+ materialCode: string;
+ /**
+ * 여러 파일이 있을 경우 선택할 파일 인덱스 (기본값: 0)
+ */
+ fileIndex?: number;
+}): Promise<{
+ success: boolean;
+ downloadUrl?: string;
+ fileName?: string;
+ availableFiles?: PosFileInfo[];
+ error?: string;
+}> {
+ try {
+ const { materialCode, fileIndex = 0 } = params;
+
+ // 1. 자재코드로 DCMTM_ID 조회
+ const dcmtmResult = await getDcmtmIdByMaterialCode({ materialCode });
+
+ if (!dcmtmResult.success || !dcmtmResult.files || dcmtmResult.files.length === 0) {
+ return {
+ success: false,
+ error: dcmtmResult.error || '해당 자재코드에 대한 POS 파일을 찾을 수 없습니다.',
+ };
+ }
+
+ // 선택된 파일이 범위를 벗어나는지 확인
+ if (fileIndex >= dcmtmResult.files.length) {
+ return {
+ success: false,
+ error: `파일 인덱스가 범위를 벗어났습니다. 사용 가능한 파일 수: ${dcmtmResult.files.length}`,
+ availableFiles: dcmtmResult.files,
+ };
+ }
+
+ const selectedFile = dcmtmResult.files[fileIndex];
+
+ // 2. DCMTM_ID로 POS 파일 정보 가져오기
+ const posResult = await getPosFileAndCreateDownloadUrl({
+ objectID: selectedFile.dcmtmId,
+ });
+
+ if (!posResult.success) {
+ return {
+ success: false,
+ error: posResult.error,
+ availableFiles: dcmtmResult.files,
+ };
+ }
+
+ return {
+ success: true,
+ downloadUrl: posResult.downloadUrl,
+ fileName: selectedFile.fileName, // 오라클에서 가져온 파일명 사용
+ availableFiles: dcmtmResult.files,
+ };
+ } catch (error) {
+ return {
+ success: false,
+ error: error instanceof Error ? error.message : 'Unknown error',
+ };
+ }
+}