summaryrefslogtreecommitdiff
path: root/lib/forms/services.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/forms/services.ts')
-rw-r--r--lib/forms/services.ts110
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) {