From aa0c5d29f06bf9f35f85220dc5eceb8a6cc51e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=ED=98=81=EC=84=B1?= Date: Mon, 26 Jan 2026 11:01:43 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Step=201.2=20V2=20=EA=B2=AC=EC=A0=81=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20=ED=8E=98=EC=9D=B4=EC=A7=80=20API=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - test-new 페이지에서 Mock 저장을 실제 createQuote API 호출로 변경 - transformV2ToApi 함수로 V2 폼 데이터 변환 - 저장 후 실제 생성된 견적 ID로 상세 페이지 이동 - 에러 처리 및 사용자 피드백 유지 관련: docs/plans/quote-management-url-migration-plan.md --- .../sales/quote-management/test-new/page.tsx | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/app/[locale]/(protected)/sales/quote-management/test-new/page.tsx b/src/app/[locale]/(protected)/sales/quote-management/test-new/page.tsx index 90c78208..c825e714 100644 --- a/src/app/[locale]/(protected)/sales/quote-management/test-new/page.tsx +++ b/src/app/[locale]/(protected)/sales/quote-management/test-new/page.tsx @@ -13,6 +13,8 @@ import { QuoteRegistrationV2, QuoteFormDataV2 } from '@/components/quotes/QuoteR import { IntegratedDetailTemplate } from '@/components/templates/IntegratedDetailTemplate'; import { quoteCreateConfig } from '@/components/quotes/quoteConfig'; import { toast } from 'sonner'; +import { createQuote } from '@/components/quotes/actions'; +import { transformV2ToApi } from '@/components/quotes/types'; export default function QuoteTestNewPage() { const router = useRouter(); @@ -25,20 +27,29 @@ export default function QuoteTestNewPage() { const handleSave = useCallback(async (data: QuoteFormDataV2, saveType: 'temporary' | 'final') => { setIsSaving(true); try { - // TODO: API 연동 시 실제 저장 로직 구현 - console.log('[테스트] 저장 데이터:', data); - console.log('[테스트] 저장 타입:', saveType); + // V2 폼 데이터를 API 형식으로 변환 + const updatedData = { ...data, status: saveType }; + const apiData = transformV2ToApi(updatedData); - // 테스트용 지연 - await new Promise((resolve) => setTimeout(resolve, 1000)); + console.log('[QuoteTestNewPage] 저장 데이터:', apiData); + console.log('[QuoteTestNewPage] 저장 타입:', saveType); - toast.success(`[테스트] ${saveType === 'temporary' ? '임시' : '최종'} 저장 완료`); + // API 호출 + const result = await createQuote(apiData); - // 저장 후 상세 페이지로 이동 (테스트용으로 ID=1 사용) - if (saveType === 'final') { - router.push('/sales/quote-management/test/1'); + if (!result.success) { + toast.error(result.error || '저장 중 오류가 발생했습니다.'); + return; + } + + toast.success(`${saveType === 'temporary' ? '임시' : '최종'} 저장 완료`); + + // 저장 후 상세 페이지로 이동 (실제 생성된 ID 사용) + if (result.data?.id) { + router.push(`/sales/quote-management/test/${result.data.id}`); } } catch (error) { + console.error('[QuoteTestNewPage] 저장 오류:', error); toast.error('저장 중 오류가 발생했습니다.'); } finally { setIsSaving(false);