gendesign/tradein-mvp/backend/app/api
bot-backend 5b13e517e5 fix(tradein): rehydrate POST-only fields on GET /estimate/{id} (#696)
POST /estimate возвращает price_trend, last_scraped_at, avito_imv и
dkp_corridor, но GET /{id} (shared-link, PDF reopen, ?id= restore) отдавал
их null — house_id не ререзолвился в GET-хендлере, derived-поля терялись.

Пересчитываем в хендлере из персистированного состояния (DDL не требуется):
- target_house_id ререзолвится по address (tradein_normalize_short_addr) с
  geo-fallback 100м — тот же паттерн, что в placement-history/house-analytics;
- price_trend / avito_imv (display-only anchor) / dkp_corridor — через
  существующие estimator-хелперы _fetch_price_trend / _fetch_house_imv_anchor /
  _fetch_dkp_corridor;
- last_scraped_at реконструируется как created_at − data_freshness_minutes
  (оба поля персистятся; эквивалентно max(scraped_at) на момент POST).

Всё best-effort: None при отсутствии данных — без регрессий относительно
прежнего поведения. cian_valuation / est_days_on_market тоже POST-only на GET
(вне scope #696 — потенциальный follow-up).

Closes #696
2026-05-30 13:32:59 +03:00
..
v1 fix(tradein): rehydrate POST-only fields on GET /estimate/{id} (#696) 2026-05-30 13:32:59 +03:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00