From 425d04767c62225e32bd39d54472af43b7a145fe Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:49:49 +0900 Subject: [PATCH 01/16] =?UTF-8?q?feat:=20useHouseData=20=ED=9B=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=83=81=ED=83=9C=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/main/store/index.ts | 1 + src/features/main/store/useHouseData.ts | 71 +++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/features/main/store/useHouseData.ts diff --git a/src/features/main/store/index.ts b/src/features/main/store/index.ts index c88c0b6..cea6429 100644 --- a/src/features/main/store/index.ts +++ b/src/features/main/store/index.ts @@ -1 +1,2 @@ export * from './useMapAddress'; +export * from './useHouseData'; diff --git a/src/features/main/store/useHouseData.ts b/src/features/main/store/useHouseData.ts new file mode 100644 index 0000000..63ae90c --- /dev/null +++ b/src/features/main/store/useHouseData.ts @@ -0,0 +1,71 @@ +import { create } from 'zustand'; +import { devtools } from 'zustand/middleware'; + +import type { Landlord, LandlordPlace, LandlordTrust, RiskSummary } from '@/entities'; + +export type HouseDiagnosisData = { + riskSummary: RiskSummary; + landlord: Landlord; + landlordTrust: LandlordTrust; + landlordPlaces: LandlordPlace[]; +}; + +// API 응답 형태 +export type ApiResponse = { + data: HouseDiagnosisData; + status: string; + serverDateTime: string; + errorCode: string | null; + errorMessage: string | null; +}; + +type HouseDataState = { + // 상태 + diagnosisData: HouseDiagnosisData | null; + isLoading: boolean; + error: string | null; + + // 액션 + setDiagnosisData: (data: HouseDiagnosisData | ApiResponse) => void; + clearDiagnosisData: () => void; + resetState: () => void; + setLoading: (loading: boolean) => void; + setError: (error: string | null) => void; +}; + +export const useHouseData = create()( + devtools( + (set) => ({ + // 초기 상태 + diagnosisData: null, + isLoading: false, + error: null, + + // 액션들 + setDiagnosisData: (data: HouseDiagnosisData | ApiResponse) => { + // API 응답 형태인지 확인하고 적절히 처리 + const processedData = 'data' in data ? data.data : data; + set({ diagnosisData: processedData }); + }, + + clearDiagnosisData: () => { + set({ diagnosisData: null }); + }, + + resetState: () => { + set({ diagnosisData: null }); + }, + + setLoading: (loading: boolean) => { + set({ isLoading: loading }); + }, + + setError: (error: string | null) => { + set({ error }); + }, + }), + { + name: 'house-data-store', + }, + ), +); From 498526a5d239c1c9ccf883ede0524b926f7ec1dd Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:50:06 +0900 Subject: [PATCH 02/16] =?UTF-8?q?feat:=20=EC=9C=84=ED=97=98=EB=8F=84=20?= =?UTF-8?q?=EB=B6=84=EC=84=9D=20=ED=83=80=EC=9E=85=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entities/chart/types/risk-analysis.type.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/entities/chart/types/risk-analysis.type.ts b/src/entities/chart/types/risk-analysis.type.ts index f0fd2ce..9fb6d74 100644 --- a/src/entities/chart/types/risk-analysis.type.ts +++ b/src/entities/chart/types/risk-analysis.type.ts @@ -2,19 +2,17 @@ * 위험도 분석 관련 entities */ -// 위험 요인 -export type RiskFactor = { +export type Factor = { name: string; percent: number; }; -// 위험도 요약 export type RiskSummary = { score: number; - factors: RiskFactor[]; + grade: string; + factors: Factor[]; }; -// 임대인 정보 export type Landlord = { landlordId: number; name: string; @@ -25,7 +23,6 @@ export type Landlord = { updatedAt: string; }; -// 임대인 신뢰도 export type LandlordTrust = { trustScore: number; subrogationCount: number; @@ -35,7 +32,6 @@ export type LandlordTrust = { grade: string; }; -// 임대인 소유 매물 export type LandlordPlace = { placeId: number; label: string; From 8d760c16cbaeb29eb8d05fa9bd849c5dfc8e8005 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:51:03 +0900 Subject: [PATCH 03/16] =?UTF-8?q?feat:=20=EC=A7=84=EB=8B=A8=20API=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=20=EB=B0=8F=20=EC=9D=91=EB=8B=B5=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/main/apis/diagnosis.api.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/features/main/apis/diagnosis.api.ts b/src/features/main/apis/diagnosis.api.ts index 6448de0..58bc7e7 100644 --- a/src/features/main/apis/diagnosis.api.ts +++ b/src/features/main/apis/diagnosis.api.ts @@ -1,22 +1,30 @@ +import type { Landlord, LandlordPlace, LandlordTrust, RiskSummary } from '@/entities'; import { fetchInstance } from '@/shared'; import type { HouseType } from '../types'; export const DIAGNOSIS_API_PATH = '/api/diagnosis'; -interface DiagnosisApiResponse { +interface DiagnosisApiRequest { address: string; addressDetail: string; houseType: HouseType; deposit: number; } +interface DiagnosisApiResponse { + riskSummary: RiskSummary; + landlord: Landlord; + landlordTrust: LandlordTrust; + landlordPlaces: LandlordPlace[]; +} + export const diagnosisApi = async ({ address, addressDetail, houseType, deposit, -}: DiagnosisApiResponse) => { +}: DiagnosisApiRequest) => { const response = await fetchInstance.post(DIAGNOSIS_API_PATH, { address, addressDetail, From 493cccee644b1b8ca68325b7c91cb3cfb475bc6c Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:51:16 +0900 Subject: [PATCH 04/16] =?UTF-8?q?feat:=20HOUSE=5FTYPE=5FOPTIONS=EC=97=90?= =?UTF-8?q?=EC=84=9C=20'APARTMENT'=20=EA=B0=92=EC=9D=84=20'APT'=EB=A1=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/main/constants/house-type.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/main/constants/house-type.ts b/src/features/main/constants/house-type.ts index 8b5091a..16b0851 100644 --- a/src/features/main/constants/house-type.ts +++ b/src/features/main/constants/house-type.ts @@ -5,6 +5,6 @@ export const HOUSE_TYPE_OPTIONS = [ { value: 'ONE_ROOM', label: '원룸' }, { value: 'TWO_ROOM', label: '투룸' }, { value: 'OFFICETEL', label: '오피스텔' }, - { value: 'APARTMENT', label: '아파트' }, + { value: 'APT', label: '아파트' }, { value: 'ETC', label: '기타' }, ] as const; From 4355502140992799892dfb553de39cbbdb384a73 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:51:58 +0900 Subject: [PATCH 05/16] =?UTF-8?q?feat:=20=EC=9C=84=ED=97=98=20=EC=9A=94?= =?UTF-8?q?=EC=86=8C=20=ED=83=80=EC=9E=85=EC=9D=84=20RiskFactor=EC=97=90?= =?UTF-8?q?=EC=84=9C=20Factor=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/components/features/chart/RiskFactorsBox.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/features/main/components/features/chart/RiskFactorsBox.tsx b/src/features/main/components/features/chart/RiskFactorsBox.tsx index c27e213..0d770a0 100644 --- a/src/features/main/components/features/chart/RiskFactorsBox.tsx +++ b/src/features/main/components/features/chart/RiskFactorsBox.tsx @@ -1,7 +1,7 @@ -import type { RiskFactor } from '@/entities'; +import type { Factor } from '@/entities'; type Props = { - riskFactors: RiskFactor[]; + riskFactors: Factor[]; }; export const RiskFactorsBox = ({ riskFactors }: Props) => { From 4173a3cb6c785a4ef8b22b907c6161c423e9a068 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:52:09 +0900 Subject: [PATCH 06/16] =?UTF-8?q?feat:=20=EC=A7=84=EB=8B=A8=20=ED=8F=BC?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A0=84?= =?UTF-8?q?=EC=86=A1=20=EC=84=B1=EA=B3=B5=20=EC=8B=9C=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=EA=B4=80=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/components/features/form/DiagnosticForm.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/features/main/components/features/form/DiagnosticForm.tsx b/src/features/main/components/features/form/DiagnosticForm.tsx index 8e9919a..6c00bf6 100644 --- a/src/features/main/components/features/form/DiagnosticForm.tsx +++ b/src/features/main/components/features/form/DiagnosticForm.tsx @@ -7,6 +7,7 @@ import { Button, Form } from '@/shared'; import { diagnosisApi } from '../../../apis'; import { type SearchAddressType, searchAddressSchema } from '../../../model'; +import { useHouseData } from '../../../store'; import type { HouseType } from '../../../types'; import { AddressField, @@ -17,6 +18,8 @@ import { } from '../../common'; export const DiagnosticForm = () => { + const { setDiagnosisData } = useHouseData(); + const form = useForm({ resolver: zodResolver(searchAddressSchema), defaultValues: { @@ -35,6 +38,9 @@ export const DiagnosticForm = () => { houseType: data.houseType as HouseType, deposit: data.deposit, }), + onSuccess: (data) => { + setDiagnosisData(data); + }, }); const onSubmit = (data: SearchAddressType) => { From 1e19a62eb176d895889d0dd1021fb15ac43e95da Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:52:19 +0900 Subject: [PATCH 07/16] =?UTF-8?q?feat:=20GradeBox=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=EC=97=90=20gradeData=20prop=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EA=B8=B0=EB=B3=B8=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../features/reliability/GradeBox.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/features/main/components/features/reliability/GradeBox.tsx b/src/features/main/components/features/reliability/GradeBox.tsx index 6a8aea1..41fb702 100644 --- a/src/features/main/components/features/reliability/GradeBox.tsx +++ b/src/features/main/components/features/reliability/GradeBox.tsx @@ -1,21 +1,30 @@ +import type { LandlordTrust } from '@/entities'; import { getTrustGradeColorClass } from '@/shared'; import { LANDLORD_TRUST_DATA } from '../../../mock'; -export const GradeBox = () => { +type Props = { + gradeData: LandlordTrust; +}; + +export const GradeBox = ({ gradeData }: Props) => { + const data = gradeData || LANDLORD_TRUST_DATA; + return (

임대인 신뢰도 등급

위험점수 : - {LANDLORD_TRUST_DATA.trustScore} + {data.trustScore}
- {LANDLORD_TRUST_DATA.grade} + {data.grade}
From 1c1aa47bd470176cb1b97fcd1a2a8d77b6f16272 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:52:29 +0900 Subject: [PATCH 08/16] =?UTF-8?q?feat:=20MultiHouseBox=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=EC=97=90=20multiHouseData=20prop=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B8=B0=EB=B3=B8=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../features/reliability/MultiHouseBox.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/features/main/components/features/reliability/MultiHouseBox.tsx b/src/features/main/components/features/reliability/MultiHouseBox.tsx index 2a34b74..ca6beea 100644 --- a/src/features/main/components/features/reliability/MultiHouseBox.tsx +++ b/src/features/main/components/features/reliability/MultiHouseBox.tsx @@ -1,12 +1,20 @@ +import type { LandlordTrust } from '@/entities'; + import { LANDLORD_TRUST_DATA } from '../../../mock'; -export const MultiHouseBox = () => { +type Props = { + multiHouseData: LandlordTrust; +}; + +export const MultiHouseBox = ({ multiHouseData }: Props) => { + const data = multiHouseData || LANDLORD_TRUST_DATA; + return (

다주택자

- {LANDLORD_TRUST_DATA.ownedUnsoldCount} + {data.ownedUnsoldCount}
From 29e2d074ab7f37f9fc9aefde65bfbb5bceb9364c Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:52:40 +0900 Subject: [PATCH 09/16] =?UTF-8?q?feat:=20ReasonBox=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=EC=97=90=EC=84=9C=20RELIABILITY=5FREASONS?= =?UTF-8?q?=EB=A5=BC=20data=20=EB=B3=80=EC=88=98=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=ED=95=98=EC=97=AC=20=EA=B0=80=EB=8F=85=EC=84=B1=20?= =?UTF-8?q?=ED=96=A5=EC=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/components/features/reliability/ReasonBox.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/features/main/components/features/reliability/ReasonBox.tsx b/src/features/main/components/features/reliability/ReasonBox.tsx index c424909..5988b5f 100644 --- a/src/features/main/components/features/reliability/ReasonBox.tsx +++ b/src/features/main/components/features/reliability/ReasonBox.tsx @@ -1,10 +1,12 @@ import { RELIABILITY_REASONS } from '../../../mock'; export const ReasonBox = () => { + const data = RELIABILITY_REASONS; + return (

임대인 신뢰도 등급 사유

- {RELIABILITY_REASONS.map((reason, index) => ( + {data.map((reason, index) => (
Date: Fri, 22 Aug 2025 21:52:56 +0900 Subject: [PATCH 10/16] =?UTF-8?q?feat:=20=EC=9C=84=ED=97=98=20=EB=B6=84?= =?UTF-8?q?=EC=84=9D=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EC=97=90=20grade=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/main/mock/risk-analysis.mock.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/features/main/mock/risk-analysis.mock.ts b/src/features/main/mock/risk-analysis.mock.ts index b3ff28f..e0aa6ff 100644 --- a/src/features/main/mock/risk-analysis.mock.ts +++ b/src/features/main/mock/risk-analysis.mock.ts @@ -9,6 +9,7 @@ export const TEMP_RISK_ANALYSIS_DATA: RiskAnalysisResponse[] = [ data: { riskSummary: { score: 50, + grade: 'B', factors: [ { name: '전세가율', percent: 12 }, { name: '가격하락', percent: 10 }, From 03d1e80f5b0e8e57084fb573a4c3ed0566cabeaa Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:53:07 +0900 Subject: [PATCH 11/16] =?UTF-8?q?feat:=20SubrogationPaymentBox=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=EC=97=90=20subrogationData=20prop?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../features/reliability/SubrogationPaymentBox.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/features/main/components/features/reliability/SubrogationPaymentBox.tsx b/src/features/main/components/features/reliability/SubrogationPaymentBox.tsx index c9977e8..811c50f 100644 --- a/src/features/main/components/features/reliability/SubrogationPaymentBox.tsx +++ b/src/features/main/components/features/reliability/SubrogationPaymentBox.tsx @@ -2,15 +2,19 @@ import { getSubrogationColorClass } from '@/shared'; import { LANDLORD_TRUST_DATA } from '../../../mock'; -export const SubrogationPaymentBox = () => { +type Props = { + subrogationData: number; +}; + +export const SubrogationPaymentBox = ({ subrogationData }: Props) => { + const data = subrogationData || LANDLORD_TRUST_DATA.subrogationCount; + return (

대위변제 이력

- - {LANDLORD_TRUST_DATA.subrogationCount} + + {data}
From 10ed2c635835cce18c777255874b891b36cffee7 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:53:20 +0900 Subject: [PATCH 12/16] =?UTF-8?q?feat:=20useMapAddress=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=EA=B4=80=EB=A6=AC=EC=97=90=20devtools=20=EB=AF=B8?= =?UTF-8?q?=EB=93=A4=EC=9B=A8=EC=96=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/main/store/useMapAddress.ts | 82 +++++++++++++----------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/src/features/main/store/useMapAddress.ts b/src/features/main/store/useMapAddress.ts index 1907946..b86e023 100644 --- a/src/features/main/store/useMapAddress.ts +++ b/src/features/main/store/useMapAddress.ts @@ -1,4 +1,5 @@ import { create } from 'zustand'; +import { devtools } from 'zustand/middleware'; import type { MapAddress } from '@/entities'; @@ -11,40 +12,47 @@ type MapAddressState = { updateAddress: (address: string) => void; }; -export const useMapAddress = create()((set, get) => ({ - mapAddress: null, - - setMapAddress: (address: MapAddress) => { - set({ mapAddress: address }); - }, - - clearMapAddress: () => { - set({ mapAddress: null }); - }, - - updateCoordinates: (latitude: number, longitude: number) => { - const currentAddress = get().mapAddress; - if (currentAddress) { - set({ - mapAddress: { - ...currentAddress, - latitude, - longitude, - }, - }); - } - }, - - updateAddress: (address: string) => { - const currentAddress = get().mapAddress; - - if (currentAddress) { - set({ - mapAddress: { - ...currentAddress, - address, - }, - }); - } - }, -})); +export const useMapAddress = create()( + devtools( + (set, get) => ({ + mapAddress: null, + + setMapAddress: (address: MapAddress) => { + set({ mapAddress: address }); + }, + + clearMapAddress: () => { + set({ mapAddress: null }); + }, + + updateCoordinates: (latitude: number, longitude: number) => { + const currentAddress = get().mapAddress; + if (currentAddress) { + set({ + mapAddress: { + ...currentAddress, + latitude, + longitude, + }, + }); + } + }, + + updateAddress: (address: string) => { + const currentAddress = get().mapAddress; + + if (currentAddress) { + set({ + mapAddress: { + ...currentAddress, + address, + }, + }); + } + }, + }), + { + name: 'map-address-store', // Redux DevTools에서 표시될 이름 + }, + ), +); From 9c40c4384c3b71ba0dd7061266df711765325bf1 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:53:31 +0900 Subject: [PATCH 13/16] =?UTF-8?q?feat:=20LandlordReliabilitySection=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EC=97=90=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=A1=9C=EB=94=A9=20=EB=B0=8F=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=EC=A7=84=EB=8B=A8=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=B0=98=EC=9C=BC=EB=A1=9C=20GradeBox,=20SubrogationPaymentBox?= =?UTF-8?q?,=20MultiHouseBox=EC=97=90=20props=20=EC=A0=84=EB=8B=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/ui/LandlordReliabilitySection.tsx | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/features/main/ui/LandlordReliabilitySection.tsx b/src/features/main/ui/LandlordReliabilitySection.tsx index b049c0e..cb432de 100644 --- a/src/features/main/ui/LandlordReliabilitySection.tsx +++ b/src/features/main/ui/LandlordReliabilitySection.tsx @@ -1,13 +1,27 @@ +import { Spinner } from '@/shared'; + import { GradeBox, MultiHouseBox, ReasonBox, SubrogationPaymentBox } from '../components'; +import { useHouseData } from '../store'; export const LandlordReliabilitySection = () => { + const { diagnosisData, isLoading, error } = useHouseData(); + + if (isLoading) return ; + + if (error) return
{error}
; + + if (!diagnosisData?.landlordTrust) + return ( +
데이터가 없습니다. 임대인 신뢰도 데이터를 조회해주세요.
+ ); + return (
- + - - + +
); From 12ae6417357a8e73edf884e6135939e34579ae17 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 21:53:41 +0900 Subject: [PATCH 14/16] =?UTF-8?q?feat:=20RiskAnalysisSummarySection=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EC=97=90=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=A1=9C=EB=94=A9=20=EB=B0=8F=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=EC=A7=84=EB=8B=A8=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=B0=98=EC=9C=BC=EB=A1=9C=20=EC=9C=84=ED=97=98=EB=8F=84=20?= =?UTF-8?q?=EB=B0=8F=20=EC=9C=84=ED=97=98=20=EC=9A=94=EC=9D=B8=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/ui/RiskAnalysisSummarySection.tsx | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/features/main/ui/RiskAnalysisSummarySection.tsx b/src/features/main/ui/RiskAnalysisSummarySection.tsx index 32f2183..f579daf 100644 --- a/src/features/main/ui/RiskAnalysisSummarySection.tsx +++ b/src/features/main/ui/RiskAnalysisSummarySection.tsx @@ -1,21 +1,32 @@ +import { Spinner } from '@/shared'; + import { RiskChartBox, RiskFactorsBox } from '../components'; -import { DEFAULT_RISK_ANALYSIS_DATA } from '../mock'; +import { DEFAULT_RISK_ANALYSIS_DATA } from '../mock/risk-analysis.mock'; +import { useHouseData } from '../store'; export const RiskAnalysisSummarySection = () => { - // 현재 사용할 임시 데이터 - const currentData = DEFAULT_RISK_ANALYSIS_DATA; // 사진과 일치하는 기본 데이터 + const { diagnosisData, isLoading, error } = useHouseData(); + + if (isLoading) return ; + + if (error) return
{error}
; + + // 진단 데이터가 없으면 mock 데이터 사용 + const data = diagnosisData || DEFAULT_RISK_ANALYSIS_DATA.data; + + // 데이터 구조 검증 + if (!data?.riskSummary?.score || !data?.riskSummary?.factors) { + return
데이터 구조가 올바르지 않습니다.
; + } return (
{/* 메인 위험도 분석 섹션 */}
{/* 왼쪽: 위험도 게이지 */} - + {/* 오른쪽: 핵심 위험 요인 */} - +
); From 80c3b86fa027826b7fd657e1ccf17b416b5e58ca Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 22:02:35 +0900 Subject: [PATCH 15/16] =?UTF-8?q?feat:=20useHouseData=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=EA=B4=80=EB=A6=AC=EC=97=90=EC=84=9C=20resetState=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=88=98=EC=A0=95,=20=EB=A1=9C?= =?UTF-8?q?=EB=94=A9=20=EB=B0=8F=20=EC=98=A4=EB=A5=98=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/main/store/useHouseData.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/main/store/useHouseData.ts b/src/features/main/store/useHouseData.ts index 63ae90c..4e8e0ca 100644 --- a/src/features/main/store/useHouseData.ts +++ b/src/features/main/store/useHouseData.ts @@ -53,7 +53,7 @@ export const useHouseData = create()( }, resetState: () => { - set({ diagnosisData: null }); + set({ diagnosisData: null, isLoading: false, error: null }); }, setLoading: (loading: boolean) => { From d4be253088c94cbb16c5a93a5c9bd2ef2d9defdc Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Fri, 22 Aug 2025 22:02:48 +0900 Subject: [PATCH 16/16] =?UTF-8?q?fix:=20RiskAnalysisSummarySection=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EA=B5=AC=EC=A1=B0=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95,=20score?= =?UTF-8?q?=EA=B0=80=20null=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/main/ui/RiskAnalysisSummarySection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/main/ui/RiskAnalysisSummarySection.tsx b/src/features/main/ui/RiskAnalysisSummarySection.tsx index f579daf..f05cbe1 100644 --- a/src/features/main/ui/RiskAnalysisSummarySection.tsx +++ b/src/features/main/ui/RiskAnalysisSummarySection.tsx @@ -15,7 +15,7 @@ export const RiskAnalysisSummarySection = () => { const data = diagnosisData || DEFAULT_RISK_ANALYSIS_DATA.data; // 데이터 구조 검증 - if (!data?.riskSummary?.score || !data?.riskSummary?.factors) { + if (data?.riskSummary?.score === null || !data?.riskSummary?.factors) { return
데이터 구조가 올바르지 않습니다.
; }