From ed81f73f13aff49698e21547a1fa7c9f3195c3fa Mon Sep 17 00:00:00 2001 From: gahusb Date: Thu, 9 Jul 2026 14:37:22 +0900 Subject: [PATCH] =?UTF-8?q?feat(listings):=20realestate=20=EC=8B=A4?= =?UTF-8?q?=EB=A7=A4=EB=AC=BC/=EC=95=88=EC=A0=84=EB=A7=88=EC=A7=84/?= =?UTF-8?q?=EC=98=88=EC=82=B0=20API=20=ED=97=AC=ED=8D=BC=208=EC=A2=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS --- src/api.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/api.js b/src/api.js index 604f502..616fc93 100644 --- a/src/api.js +++ b/src/api.js @@ -862,3 +862,23 @@ export const getWatchlist = () => apiGet('/api/stock/watchlist'); export const addWatchlist = (body) => apiPost('/api/stock/watchlist', body); export const removeWatchlist = (ticker) => apiDelete(`/api/stock/watchlist/${encodeURIComponent(ticker)}`); export const getTradeAlerts = (days = 7) => apiGet(`/api/stock/trade-alerts?days=${days}`); + +// ── Realestate Listings / 안전마진 / 예산 (실매물) ── +// GET /api/realestate/listings → { listings: [...] } (+판정 join) +export const getListings = ({ dong, deal_type, tier, matched_only, page = 1, size = 20 } = {}) => { + const q = new URLSearchParams(); + if (dong) q.set('dong', dong); + if (deal_type) q.set('deal_type', deal_type); + if (tier) q.set('tier', tier); + if (matched_only) q.set('matched_only', 'true'); + q.set('page', String(page)); + q.set('size', String(size)); + return apiGet(`/api/realestate/listings?${q.toString()}`); +}; +export const collectListings = () => apiPost('/api/realestate/listings/collect'); +export const getListingsCollectStatus = () => apiGet('/api/realestate/listings/collect/status'); +export const getListingsCriteria = () => apiGet('/api/realestate/listings/criteria'); +export const putListingsCriteria = (body) => apiPut('/api/realestate/listings/criteria', body); +export const getListingsMatches = () => apiGet('/api/realestate/listings/matches'); +export const safetyCheck = (body) => apiPost('/api/realestate/safety-check', body); +export const budgetCalc = (body) => apiPost('/api/realestate/budget', body);