feat(sf-b4): GET /landing/stats — 5 KPI + paradox for landing page hero #331

Merged
lekss361 merged 6 commits from feat/sf-b4-landing-stats into main 2026-05-17 21:47:11 +00:00

6 commits

Author SHA1 Message Date
lekss361
2349d75cec fix(sf-b4): updated_at → snapshot_date for domrf_kn_objects (column doesn't exist)
Round-3 review caught second column mismatch. `domrf_kn_objects` has
`snapshot_date` (DATE NOT NULL), no `updated_at` — verified via
information_schema. CAST drop (snapshot_date is already DATE).
2026-05-18 00:44:36 +03:00
lekss361
b0d48164b6 fix(sf-b4): price_per_m2 → price_per_m2_rub (actual column name in objective_lots)
Worker used wrong column name in KPI 3 query — would always raise
UndefinedColumn at runtime and fall back to hardcoded defaults instead
of returning real data. Verified column name via vault
Objective_Data_Source_May17.md + earlier postgres MCP query.

Also resolves merge with hotfix #337 (pilot.py EmailStr drop) — no
actual conflict, just sync with new main.
2026-05-18 00:37:03 +03:00
lekss361
e6f3b764a4 Merge remote-tracking branch 'forgejo/main' into feat/sf-b4-landing-stats 2026-05-18 00:37:03 +03:00
lekss361
53598cc874 merge: resolve main.py conflict (keep landing + pilot + users routers) 2026-05-18 00:15:59 +03:00
lekss361
ab65f75041 merge: resolve main.py conflict (keep both landing + users routers) 2026-05-18 00:09:54 +03:00
lekss361
6d66c8b27f feat(sf-b4): GET /landing/stats — 5 KPI + paradox for landing page hero
New router backend/app/api/v1/landing.py with GET /api/v1/landing/stats.
Queries domrf_kn_objects, rosreestr_deals_* (pg_class), objective_lots,
objective_complex_mapping; falls back to hardcoded defaults on empty DB.
2026-05-18 00:02:02 +03:00