feat: I/I 분석결과 페이지 파일 삭제 시 첨부파일(.inp) 삭제 기능 구현

This commit is contained in:
swcho
2025-06-11 17:40:43 +09:00
parent a4f9842ed0
commit f12c0d5ee2
4 changed files with 124 additions and 0 deletions
@@ -16,6 +16,7 @@ export const ENDPOINT = {
ATTACHMENTS: "/attach-service/api/v1/atfl/attachments",
DOWNLOAD: "/attach-service/api/v1/atflcd/download",
STREAM_VIDEO: "/attach-service/api/v1/stream/video",
DELETE_FILE_BY_ATFLCD: "/attach-service/api/v1/atfl/attachments/atflCd",
},
};
@@ -0,0 +1,109 @@
import { getCookie } from "@utils";
import { ENDPOINT } from "../api/attachment/attachment-service";
const AUTH_USER_ID = process.env.NEXT_PUBLIC_AUTH_USER_ID || "token-id";
const CLAIM_NAME = process.env.NEXT_PUBLIC_CLAIM_NAME || "Authorization";
type DeleteOptions = {
handleDeleteStart?: () => void;
handleDeleteSuccess?: (response: Response) => void;
handleDeleteError?: (error: Error) => void;
};
export const handleDelete = async (
atflCd: string,
options?: DeleteOptions
): Promise<void> => {
if (!atflCd) {
const error = new Error("첨부파일 코드가 필요합니다.");
options?.handleDeleteError?.(error);
throw error;
}
try {
options?.handleDeleteStart?.();
const response = await fetch(
`${ENDPOINT.ATTACH_SERVICE.DELETE_FILE_BY_ATFLCD}/${atflCd}`,
{
method: "DELETE",
headers: {
"Content-Type": "application/json",
[CLAIM_NAME]: getCookie(CLAIM_NAME) ?? "",
[AUTH_USER_ID]: getCookie(AUTH_USER_ID) ?? "",
},
}
);
if (!response.ok) {
throw new Error(`파일 삭제 실패: ${response.status} ${response.statusText}`);
}
options?.handleDeleteSuccess?.(response);
console.log("파일 삭제 완료:", atflCd);
} catch (error) {
const deleteError = error instanceof Error
? error
: new Error("파일 삭제 중 알 수 없는 오류가 발생했습니다.");
console.error("파일 삭제 오류:", deleteError);
options?.handleDeleteError?.(deleteError);
throw deleteError;
}
};
// 여러 파일을 삭제하는 함수
// export const handleMultipleDelete = async (
// atflCds: string[],
// options?: DeleteOptions & {
// handleProgress?: (completed: number, total: number) => void;
// }
// ): Promise<void> => {
// if (!atflCds || atflCds.length === 0) {
// const error = new Error("삭제할 파일이 없습니다.");
// options?.handleDeleteError?.(error);
// throw error;
// }
// try {
// options?.handleDeleteStart?.();
// const deletePromises = atflCds.map(async (atflCd, index) => {
// try {
// await handleDelete(atflCd);
// options?.handleProgress?.(index + 1, atflCds.length);
// return { success: true, atflCd };
// } catch (error) {
// return { success: false, atflCd, error };
// }
// });
// const results = await Promise.allSettled(deletePromises);
// const failedDeletes = results
// .filter((result): result is PromiseFulfilledResult<{ success: false; atflCd: string; error: any }> =>
// result.status === 'fulfilled' && !result.value.success
// )
// .map(result => result.value);
// if (failedDeletes.length > 0) {
// const error = new Error(
// `일부 파일 삭제 실패: ${failedDeletes.map(f => f.atflCd).join(', ')}`
// );
// options?.handleDeleteError?.(error);
// throw error;
// }
// options?.handleDeleteSuccess?.(new Response());
// console.log("모든 파일 삭제 완료:", atflCds);
// } catch (error) {
// const deleteError = error instanceof Error
// ? error
// : new Error("파일 삭제 중 알 수 없는 오류가 발생했습니다.");
// console.error("파일 삭제 오류:", deleteError);
// options?.handleDeleteError?.(deleteError);
// throw deleteError;
// }
// };
+7
View File
@@ -6,6 +6,7 @@ import { useState } from 'react'
import { useForm } from 'react-hook-form'
import { z } from 'zod'
import BaseLayout from '../BaseLayout'
import { handleDelete } from '@/components/lib/utils/fileDeleteUtil'
const formSchema = z.object({
@@ -171,6 +172,12 @@ const Result = () => {
// 삭제 API 호출
const response1 = await deleteData(`v1/rdiiAnlsRslt/${selectedRowData.rainInfwtAnlsSn}`);
const response2 = await deleteData(`v1/rdiiAnls/${selectedRowData.rainInfwtAnlsSn}`);
// 첨부파일(inp파일) 삭제 API 호출
handleDelete(selectedRowData.atflCd, {
handleDeleteStart: () => console.log("파일 삭제 시작"),
handleDeleteSuccess: (response) => console.log("파일 삭제 성공:", response),
handleDeleteError: (error) => console.error("파일 삭제 실패:", error),
});
console.log("File delete response1:", response1);
console.log("File delete response2:", response2);
+7
View File
@@ -6,6 +6,7 @@ import { useState } from 'react'
import { useForm } from 'react-hook-form'
import { z } from 'zod'
import BaseLayout from '../BaseLayout'
import { handleDelete } from '@/components/lib/utils/fileDeleteUtil'
const formSchema = z.object({
@@ -171,6 +172,12 @@ const Result = () => {
// 삭제 API 호출
const response1 = await deleteData(`v1/inftwtAnlsRslt/${selectedRowData.inftwtAnlsSn}`);
const response2 = await deleteData(`v1/inftwtAnls/${selectedRowData.inftwtAnlsSn}`);
// 첨부파일(inp파일) 삭제 API 호출
handleDelete(selectedRowData.atflCd, {
handleDeleteStart: () => console.log("파일 삭제 시작"),
handleDeleteSuccess: (response) => console.log("파일 삭제 성공:", response),
handleDeleteError: (error) => console.error("파일 삭제 실패:", error),
});
console.log("File delete response1:", response1);
console.log("File delete response2:", response2);