From ff0ee3757c9f370b97f96c93e516d8bea5206fd4 Mon Sep 17 00:00:00 2001 From: gahusb Date: Tue, 7 Apr 2026 04:43:15 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=ED=94=84=EB=A1=9C=ED=95=84=20preferred?= =?UTF-8?q?=5Fregions/types=20=EB=B0=B0=EC=97=B4=20=EB=B3=80=ED=99=98=20+?= =?UTF-8?q?=20=ED=95=84=EC=88=98=20=EC=9E=85=EB=A0=A5=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 쉼표 구분 문자열 → List[str] 변환 (백엔드 422 에러 수정) - API 응답 배열 → 표시용 문자열 변환 - 매칭 필수 필드에 * 표시 (무주택, 세대주, 납입기간, 가족수, 선호지역) Co-Authored-By: Claude Opus 4.6 --- src/pages/subscription/Subscription.jsx | 36 +++++++++++++++++++------ 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/pages/subscription/Subscription.jsx b/src/pages/subscription/Subscription.jsx index 5a02495..a74c55e 100644 --- a/src/pages/subscription/Subscription.jsx +++ b/src/pages/subscription/Subscription.jsx @@ -742,7 +742,10 @@ function ProfileTab() { try { const data = await apiGet('/api/realestate/profile'); if (data && Object.keys(data).length > 0) { - setProfile({ ...DEFAULT_PROFILE, ...data }); + const display = { ...DEFAULT_PROFILE, ...data }; + if (Array.isArray(display.preferred_regions)) display.preferred_regions = display.preferred_regions.join(', '); + if (Array.isArray(display.preferred_types)) display.preferred_types = display.preferred_types.join(', '); + setProfile(display); } } catch (e) { console.error('Profile load error:', e); @@ -775,9 +778,24 @@ function ProfileTab() { payload[k] = null; } }); + // Convert comma-separated strings to arrays + payload.preferred_regions = typeof payload.preferred_regions === 'string' + ? payload.preferred_regions.split(',').map(s => s.trim()).filter(Boolean) + : (payload.preferred_regions || []); + payload.preferred_types = typeof payload.preferred_types === 'string' + ? payload.preferred_types.split(',').map(s => s.trim()).filter(Boolean) + : (payload.preferred_types || []); + // Send empty arrays as null + if (payload.preferred_regions.length === 0) payload.preferred_regions = null; + if (payload.preferred_types.length === 0) payload.preferred_types = null; + const updated = await apiPut('/api/realestate/profile', payload); if (updated && Object.keys(updated).length > 0) { - setProfile({ ...DEFAULT_PROFILE, ...updated }); + // Convert arrays back to comma-separated strings for display + const display = { ...DEFAULT_PROFILE, ...updated }; + if (Array.isArray(display.preferred_regions)) display.preferred_regions = display.preferred_regions.join(', '); + if (Array.isArray(display.preferred_types)) display.preferred_types = display.preferred_types.join(', '); + setProfile(display); } setMessage('저장 완료'); setTimeout(() => setMessage(''), 2000); @@ -789,6 +807,8 @@ function ProfileTab() { } }; + const reqMark = *; + if (loading) return
불러오는 중...
; return ( @@ -797,7 +817,7 @@ function ProfileTab() {

프로필

내 청약 프로필

-

자격 조건과 선호 조건을 설정하면 공고 매칭에 활용됩니다.

+

자격 조건과 선호 조건을 설정하면 공고 매칭에 활용됩니다. * 필수 입력

{message && ( @@ -853,11 +873,11 @@ function ProfileTab() {