"use server"; import { getSEDPToken } from "@/lib/sedp/sedp-token"; interface SEDPTagData { [tableName: string]: Array<{ TAG_NO: string; TAG_DESC: string; ATTRIBUTES: Array<{ ATT_ID: string; VALUE: string; }>; }>; } interface SEDPTemplateData { templateId: string; content: string; projectNo: string; regTypeId: string; [key: string]: any; } /** * SEDP에서 태그 데이터를 가져오는 서버 액션 */ export async function fetchTagDataFromSEDP( projectCode: string, formCode: string ): Promise { try { // Get the token const apiKey = await getSEDPToken(); // Define the API base URL const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/api'; // Make the API call const response = await fetch( `${SEDP_API_BASE_URL}/Data/GetPubData`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'accept': '*/*', 'ApiKey': apiKey, 'ProjectNo': projectCode }, body: JSON.stringify({ ProjectNo: projectCode, REG_TYPE_ID: formCode, ContainDeleted: false }) } ); if (!response.ok) { const errorText = await response.text(); throw new Error(`SEDP API request failed: ${response.status} ${response.statusText} - ${errorText}`); } const data = await response.json(); return data as SEDPTagData; } catch (error: unknown) { console.error('Error calling SEDP API:', error); const errorMessage = error instanceof Error ? error.message : 'Unknown error'; throw new Error(`Failed to fetch data from SEDP API: ${errorMessage}`); } } /** * SEDP에서 템플릿 데이터를 가져오는 서버 액션 */ export async function fetchTemplateFromSEDP( projectCode: string, formCode: string ): Promise { try { // Get the token const apiKey = await getSEDPToken(); // Define the API base URL const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/api'; const responseAdapter = await fetch( `${SEDP_API_BASE_URL}/AdapterDataMapping/GetByToolID`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'accept': '*/*', 'ApiKey': apiKey, 'ProjectNo': projectCode }, body: JSON.stringify({ ProjectNo: projectCode, "TOOL_ID": "eVCP" }) } ); if (!responseAdapter.ok) { throw new Error(`새 레지스터 요청 실패: ${responseAdapter.status} ${responseAdapter.statusText}`); } const dataAdapter = await responseAdapter.json(); const templateList = dataAdapter.find(v => v.REG_TYPE_ID === formCode)?.MAP_TMPLS || []; // 각 TMPL_ID에 대해 API 호출 const templatePromises = templateList.map(async (tmplId: string) => { const response = await fetch( `${SEDP_API_BASE_URL}/Template/GetByID`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'accept': '*/*', 'ApiKey': apiKey, 'ProjectNo': projectCode }, body: JSON.stringify({ WithContent: true, ProjectNo: projectCode, TMPL_ID: tmplId }) } ); if (!response.ok) { const errorText = await response.text(); throw new Error(`SEDP Template API request failed for TMPL_ID ${tmplId}: ${response.status} ${response.statusText} - ${errorText}`); } const data = await response.json(); return data as SEDPTemplateData; }); // 모든 API 호출을 병렬로 실행하고 결과를 수집 const templates = await Promise.all(templatePromises); // null이나 undefined가 아닌 값들만 필터링 (응답이 없는 경우 제외) const validTemplates = templates.filter(template => template != null); return validTemplates; } catch (error: unknown) { console.error('Error calling SEDP Template API:', error); const errorMessage = error instanceof Error ? error.message : 'Unknown error'; throw new Error(`Failed to fetch template from SEDP API: ${errorMessage}`); } }