diff options
Diffstat (limited to 'lib/forms')
| -rw-r--r-- | lib/forms/services.ts | 110 |
1 files changed, 105 insertions, 5 deletions
diff --git a/lib/forms/services.ts b/lib/forms/services.ts index 57b7f000..a6ae2d83 100644 --- a/lib/forms/services.ts +++ b/lib/forms/services.ts @@ -1658,6 +1658,57 @@ export async function sendDataToSEDP( } /** + * Delete tag data from SEDP + */ +export async function deleteTagFromSEDP( + projectCode: string, + packageCode: string +): Promise<any> { + 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 deletePayload = { + ProjectNo: projectCode, + ToolID: "eVCP", + Scope: packageCode, + RevNo: "00" + }; + + console.log("Deleting tag from SEDP:", JSON.stringify(deletePayload, null, 2)); + + // Make the API call + const response = await fetch( + `${SEDP_API_BASE_URL}/AdapterData/Delete`, + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'accept': '*/*', + 'ApiKey': apiKey, + 'ProjectNo': projectCode + }, + body: JSON.stringify(deletePayload) + } + ); + + if (!response.ok) { + const errorText = await response.text(); + throw new Error(`SEDP Delete API request failed: ${response.status} ${response.statusText} - ${errorText}`); + } + + const data = await response.json(); + return data; + } catch (error: any) { + console.error('Error calling SEDP Delete API:', error); + throw new Error(`Failed to delete tag from SEDP API: ${error.message || 'Unknown error'}`); + } +} + +/** * Server action to send form data to SEDP */ export async function sendFormDataToSEDP( @@ -1793,15 +1844,19 @@ export async function deleteFormDataByTags({ formCode, contractItemId, tagIdxs, + projectId, }: { formCode: string contractItemId: number tagIdxs: string[] + projectId?: number }): Promise<{ error?: string success?: boolean deletedCount?: number deletedTagsCount?: number + sedpDeleteSuccess?: boolean + sedpDeleteError?: string }> { try { // 입력 검증 @@ -1811,7 +1866,7 @@ export async function deleteFormDataByTags({ } } - console.log(`[DELETE ACTION] Deleting tags for formCode: ${formCode}, contractItemId: ${contractItemId}, tagNos:`, tagIdxs) + console.log(`[DELETE ACTION] Deleting tags for formCode: ${formCode}, contractItemId: ${contractItemId}, tagIdxs:`, tagIdxs) // 트랜잭션으로 안전하게 처리 const result = await db.transaction(async (tx) => { @@ -1833,13 +1888,13 @@ export async function deleteFormDataByTags({ } const currentEntry = currentEntryResult[0] - let currentData = Array.isArray(currentEntry.data) ? currentEntry.data : [] + const currentData = Array.isArray(currentEntry.data) ? currentEntry.data : [] console.log(`[DELETE ACTION] Current data count: ${currentData.length}`) // 2. 삭제할 항목들 필터링 (formEntries에서) - const updatedData = currentData.filter((item: any) => - !tagIdxs.includes(item.TAG_IDX) + const updatedData = currentData.filter((item: Record<string, unknown>) => + !tagIdxs.includes(item.TAG_IDX as string) ) const deletedFromFormEntries = currentData.length - updatedData.length @@ -1888,7 +1943,49 @@ export async function deleteFormDataByTags({ } }) - // 5. 캐시 무효화 + // 5. SEDP에서도 삭제 (projectId가 제공된 경우) + let sedpDeleteSuccess = false + let sedpDeleteError: string | undefined + + if (projectId) { + try { + console.log(`[DELETE ACTION] Attempting to delete from SEDP for projectId: ${projectId}`) + + // Get packageCode from contractItem + const contractItem = await db.query.contractItems.findFirst({ + where: eq(contractItems.id, contractItemId), + }) + + if (contractItem) { + const item = await db.query.items.findFirst({ + where: eq(items.id, contractItem.itemId), + }) + + if (item?.packageCode) { + // Get project code + const projectCode = await getProjectCodeById(projectId) + + // Call SEDP delete API + await deleteTagFromSEDP(projectCode, item.packageCode) + + sedpDeleteSuccess = true + console.log(`[DELETE ACTION] Successfully deleted from SEDP for packageCode: ${item.packageCode}`) + } else { + sedpDeleteError = "Package code not found" + console.warn(`[DELETE ACTION] Package code not found for contractItemId: ${contractItemId}`) + } + } else { + sedpDeleteError = "Contract item not found" + console.warn(`[DELETE ACTION] Contract item not found for contractItemId: ${contractItemId}`) + } + } catch (sedpError) { + sedpDeleteError = sedpError instanceof Error ? sedpError.message : "SEDP delete failed" + console.error(`[DELETE ACTION] SEDP delete error:`, sedpError) + // SEDP 삭제 실패는 경고로만 처리 (로컬 삭제는 성공했으므로) + } + } + + // 6. 캐시 무효화 const cacheKey = `form-data-${formCode}-${contractItemId}` revalidateTag(cacheKey) revalidateTag(`tags-${contractItemId}`) @@ -1898,11 +1995,14 @@ export async function deleteFormDataByTags({ console.log(`[DELETE ACTION] Transaction completed successfully`) console.log(`[DELETE ACTION] FormEntries deleted: ${result.deletedFromFormEntries}`) console.log(`[DELETE ACTION] Tags deleted: ${result.deletedTagsCount}`) + console.log(`[DELETE ACTION] SEDP delete success: ${sedpDeleteSuccess}`) return { success: true, deletedCount: result.deletedFromFormEntries, deletedTagsCount: result.deletedTagsCount, + sedpDeleteSuccess, + sedpDeleteError, } } catch (error) { |
