From 29c257c9f8f6f69e51396acc81d093e0a9f5b58a Mon Sep 17 00:00:00 2001 From: hskwon Date: Tue, 20 Jan 2026 09:27:37 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EA=B3=84=EC=95=BD=EA=B4=80=EB=A6=AC=20A?= =?UTF-8?q?PI=20=EC=9D=91=EB=8B=B5=20=ED=8C=8C=EC=8B=B1=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Laravel ApiResponse 래퍼 구조 반영 ({ success, data }) - getContractList: response.data.data로 페이지네이션 데이터 접근 - getContractStats: response.data로 통계 데이터 접근 - getContractStageCounts: response.data로 단계별 건수 접근 - getContract/getContractDetail: response.data로 단건 데이터 접근 - createContract/updateContract: response.data로 생성/수정 결과 접근 --- .../business/construction/contract/actions.ts | 80 ++++++++++++------- 1 file changed, 51 insertions(+), 29 deletions(-) diff --git a/src/components/business/construction/contract/actions.ts b/src/components/business/construction/contract/actions.ts index 0f3fac34..1431a45a 100644 --- a/src/components/business/construction/contract/actions.ts +++ b/src/components/business/construction/contract/actions.ts @@ -215,23 +215,27 @@ export async function getContractList(filter?: ContractFilter): Promise<{ } const response = await apiClient.get<{ - data: ApiContract[]; - current_page: number; - per_page: number; - total: number; - last_page: number; + success: boolean; + data: { + data: ApiContract[]; + current_page: number; + per_page: number; + total: number; + last_page: number; + }; }>('/construction/contracts', { params: queryParams }); - const items = (response.data || []).map(transformContract); + const paginatedData = response.data; + const items = (paginatedData.data || []).map(transformContract); return { success: true, data: { items, - total: response.total || 0, - page: response.current_page || 1, - size: response.per_page || 20, - totalPages: response.last_page || 1, + total: paginatedData.total || 0, + page: paginatedData.current_page || 1, + size: paginatedData.per_page || 20, + totalPages: paginatedData.last_page || 1, }, }; } catch (error) { @@ -250,14 +254,18 @@ export async function getContractStats(): Promise<{ error?: string; }> { try { - const response = await apiClient.get('/construction/contracts/stats'); + const response = await apiClient.get<{ + success: boolean; + data: ApiContractStats; + }>('/construction/contracts/stats'); + const statsData = response.data; return { success: true, data: { - total: response.total_count || 0, - pending: response.pending_count || 0, - completed: response.completed_count || 0, + total: statsData.total_count || 0, + pending: statsData.pending_count || 0, + completed: statsData.completed_count || 0, }, }; } catch (error) { @@ -276,17 +284,21 @@ export async function getContractStageCounts(): Promise<{ error?: string; }> { try { - const response = await apiClient.get('/construction/contracts/stage-counts'); + const response = await apiClient.get<{ + success: boolean; + data: ApiContractStageCount; + }>('/construction/contracts/stage-counts'); + const stageData = response.data; return { success: true, data: { - estimateSelected: response.estimate_selected || 0, - estimateProgress: response.estimate_progress || 0, - delivery: response.delivery || 0, - installation: response.installation || 0, - inspection: response.inspection || 0, - other: response.other || 0, + estimateSelected: stageData.estimate_selected || 0, + estimateProgress: stageData.estimate_progress || 0, + delivery: stageData.delivery || 0, + installation: stageData.installation || 0, + inspection: stageData.inspection || 0, + other: stageData.other || 0, }, }; } catch (error) { @@ -305,8 +317,10 @@ export async function getContract(id: string): Promise<{ error?: string; }> { try { - const response = await apiClient.get(`/construction/contracts/${id}`); - return { success: true, data: transformContract(response) }; + const response = await apiClient.get<{ success: boolean; data: ApiContract }>( + `/construction/contracts/${id}` + ); + return { success: true, data: transformContract(response.data) }; } catch (error) { console.error('계약 조회 오류:', error); return { success: false, error: '계약 정보를 찾을 수 없습니다.' }; @@ -323,8 +337,10 @@ export async function getContractDetail(id: string): Promise<{ error?: string; }> { try { - const response = await apiClient.get(`/construction/contracts/${id}`); - return { success: true, data: transformContractDetail(response) }; + const response = await apiClient.get<{ success: boolean; data: ApiContract }>( + `/construction/contracts/${id}` + ); + return { success: true, data: transformContractDetail(response.data) }; } catch (error) { console.error('계약 상세 조회 오류:', error); return { success: false, error: '계약 상세 정보를 불러오는데 실패했습니다.' }; @@ -342,8 +358,11 @@ export async function createContract(data: ContractFormData): Promise<{ }> { try { const apiData = transformToApiRequest(data); - const response = await apiClient.post('/construction/contracts', apiData); - return { success: true, data: transformContract(response) }; + const response = await apiClient.post<{ success: boolean; data: ApiContract }>( + '/construction/contracts', + apiData + ); + return { success: true, data: transformContract(response.data) }; } catch (error) { console.error('계약 등록 오류:', error); return { success: false, error: '계약 등록에 실패했습니다.' }; @@ -364,8 +383,11 @@ export async function updateContract( }> { try { const apiData = transformToApiRequest(data); - const response = await apiClient.put(`/construction/contracts/${id}`, apiData); - return { success: true, data: transformContract(response) }; + const response = await apiClient.put<{ success: boolean; data: ApiContract }>( + `/construction/contracts/${id}`, + apiData + ); + return { success: true, data: transformContract(response.data) }; } catch (error) { console.error('계약 수정 오류:', error); return { success: false, error: '계약 수정에 실패했습니다.' };