From 18c2e641822d7bdb8fdd87077e68f7971fbf0f83 Mon Sep 17 00:00:00 2001 From: TradeIn Deploy Date: Fri, 22 May 2026 13:20:53 +0500 Subject: [PATCH] =?UTF-8?q?fix(tradein):=20GET=20/estimate/{id}=20=D0=B2?= =?UTF-8?q?=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D0=B5=D1=82=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D1=8B=D0=B9=20=D0=BD=D0=B0=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При открытии оценки по ссылке (?id=) или перезагрузке страницы get_estimate отдавал огрызок: без sources_used, confidence_explanation, target_address, координат, data_freshness_minutes. Из-за этого карточка «Сбор данных по квартире» пустела до «0 / 7 источников · ожидает запрос» — хотя данные в БД есть. Теперь SELECT и ответ включают полный набор полей AggregatedEstimate. period_months 24 → 12 (совпадает с estimator / DEALS_PERIOD_MONTHS). --- tradein-mvp/backend/app/api/v1/trade_in.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tradein-mvp/backend/app/api/v1/trade_in.py b/tradein-mvp/backend/app/api/v1/trade_in.py index 66d63588..219d0221 100644 --- a/tradein-mvp/backend/app/api/v1/trade_in.py +++ b/tradein-mvp/backend/app/api/v1/trade_in.py @@ -297,8 +297,9 @@ def get_estimate( text( """ SELECT id, median_price, range_low, range_high, median_price_per_m2, - confidence, n_analogs, analogs, actual_deals, expires_at, - address, area_m2, rooms + confidence, confidence_explanation, n_analogs, + analogs, actual_deals, sources_used, data_freshness_minutes, + expires_at, address, lat, lon FROM trade_in_estimates WHERE id = CAST(:id AS uuid) AND expires_at > NOW() @@ -313,6 +314,9 @@ def get_estimate( analogs = [AnalogLot(**a) for a in (row.analogs or [])] actual_deals = [AnalogLot(**a) for a in (row.actual_deals or [])] + # ВАЖНО: возвращаем ПОЛНЫЙ набор полей. Раньше эндпоинт отдавал огрызок + # без sources_used / confidence_explanation / координат — и при открытии + # оценки по ссылке (?id=) карточка источников пустела до «0/7». return AggregatedEstimate( estimate_id=row.id, median_price_rub=row.median_price, @@ -320,11 +324,17 @@ def get_estimate( range_high_rub=row.range_high, median_price_per_m2=row.median_price_per_m2, confidence=row.confidence, + confidence_explanation=row.confidence_explanation, n_analogs=row.n_analogs, - period_months=24, + period_months=12, analogs=analogs, actual_deals=actual_deals, expires_at=row.expires_at, + target_address=row.address, + target_lat=row.lat, + target_lon=row.lon, + sources_used=row.sources_used or [], + data_freshness_minutes=row.data_freshness_minutes, )