feat(CEODashboard): Phase 4 - 카드/가지급금 관리 섹션 카드 API 연동

카드/가지급금 관리 섹션의 4개 카드(cm1~cm4)를 실제 API 데이터로 연동:

- cm1: 카드 사용액 - CardTransaction API (기존)
- cm2: 가지급금 - LoanDashboard API (신규 연동)
- cm3: 법인세 예상 가중 - TaxSimulation API (신규 연동)
- cm4: 대표자 종합세 예상 가중 - TaxSimulation API (신규 연동)

변경 사항:
- transformCardManagementResponse: LoanDashboard, TaxSimulation 파라미터 추가
- useCEODashboard: 3개 API 병렬 호출 (Promise.all)
- useCardManagement: 동일하게 다중 API 호출 적용
- 각 API 실패 시 fallback 데이터 사용 (graceful degradation)
This commit is contained in:
2026-01-23 09:04:56 +09:00
parent 1a0b1c4c48
commit 9cfd10a265
2 changed files with 67 additions and 18 deletions

View File

@@ -23,8 +23,15 @@ import type {
WelfareApiResponse,
WelfareDetailApiResponse,
ExpectedExpenseDashboardDetailApiResponse,
LoanDashboardApiResponse,
TaxSimulationApiResponse,
} from '@/lib/api/dashboard/types';
import {
fetchLoanDashboard,
fetchTaxSimulation,
} from '@/lib/api/dashboard/endpoints';
import {
transformDailyReportResponse,
transformReceivableResponse,
@@ -226,8 +233,18 @@ export function useCardManagement(fallbackData?: CardManagementData) {
setLoading(true);
setError(null);
const apiData = await fetchApi<CardTransactionApiResponse>('card-transactions/summary');
const transformed = transformCardManagementResponse(apiData, fallbackData);
// 3개 API 병렬 호출: 카드거래, 가지급금, 세금 시뮬레이션
const [cardApiData, loanResponse, taxResponse] = await Promise.all([
fetchApi<CardTransactionApiResponse>('card-transactions/summary'),
fetchLoanDashboard(),
fetchTaxSimulation(),
]);
// LoanDashboard와 TaxSimulation은 ApiResponse wrapper가 있으므로 data 추출
const loanData = loanResponse.success ? loanResponse.data : null;
const taxData = taxResponse.success ? taxResponse.data : null;
const transformed = transformCardManagementResponse(cardApiData, loanData, taxData, fallbackData);
setData(transformed);
} catch (err) {
@@ -1028,8 +1045,21 @@ export function useCEODashboard(options: UseCEODashboardOptions = {}): CEODashbo
try {
setCardManagementLoading(true);
setCardManagementError(null);
const apiData = await fetchApi<CardTransactionApiResponse>('card-transactions/summary');
setCardManagementData(transformCardManagementResponse(apiData, cardManagementFallback));
// 3개 API 병렬 호출: 카드거래, 가지급금, 세금 시뮬레이션
const [cardApiData, loanResponse, taxResponse] = await Promise.all([
fetchApi<CardTransactionApiResponse>('card-transactions/summary'),
fetchLoanDashboard(),
fetchTaxSimulation(),
]);
// LoanDashboard와 TaxSimulation은 ApiResponse wrapper가 있으므로 data 추출
const loanData = loanResponse.success ? loanResponse.data : null;
const taxData = taxResponse.success ? taxResponse.data : null;
setCardManagementData(
transformCardManagementResponse(cardApiData, loanData, taxData, cardManagementFallback)
);
} catch (err) {
setCardManagementError(err instanceof Error ? err.message : '데이터 로딩 실패');
} finally {