feat(domrf): persist domrf_kn_objects.free_flats (#950 PR A) #1002

Merged
Light1YT merged 1 commit from feat/950a-domrf-free-flats into main 2026-06-02 20:06:29 +00:00
Owner

Site Finder v2 / EPIC 6 (3-layer склад) — #950 Step 1 / PR A. Детерминированный, без LLM. Часть #944.

Парсит freeFlatsInfo.numberFlats (кол-во квартир ЖК в текущей продаже) → новая nullable domrf_kn_objects.free_flats INT, sibling price_min_rub. Миграция 124 добавляет колонку + бэкфиллит историю из сохранённого raw-payload (domrf_raw_endpoints, тот же jsonb_array_elements-паттерн, что уже на проде в миграции 121) — без ре-скрейпа. Digit-cap {1,9}/{1,18} гарантирует, что CAST не переполнит int4/bigint на deploy-gate.

Разблокирует object-level Layer2: hidden = flat_count (всего по ПД) − free_flats (выставлено).

code-reviewer opus (deploy-gate safety: shape прод-доказана мигр.121, overflow закрыт digit-cap, idempotent, non-destructive). _to_int: bool→None, 0 сохраняется, overflow-safe. Refs #950

**Site Finder v2 / EPIC 6 (3-layer склад) — #950 Step 1 / PR A.** Детерминированный, без LLM. Часть #944. Парсит `freeFlatsInfo.numberFlats` (кол-во квартир ЖК **в текущей продаже**) → новая nullable `domrf_kn_objects.free_flats INT`, sibling `price_min_rub`. Миграция 124 добавляет колонку + бэкфиллит историю из сохранённого raw-payload (`domrf_raw_endpoints`, тот же `jsonb_array_elements`-паттерн, что **уже на проде** в миграции 121) — без ре-скрейпа. Digit-cap `{1,9}/{1,18}` гарантирует, что CAST не переполнит int4/bigint на deploy-gate. **Разблокирует object-level Layer2:** `hidden = flat_count (всего по ПД) − free_flats (выставлено)`. code-reviewer opus ✅ (deploy-gate safety: shape прод-доказана мигр.121, overflow закрыт digit-cap, idempotent, non-destructive). _to_int: bool→None, 0 сохраняется, overflow-safe. Refs #950
Light1YT added 1 commit 2026-06-02 20:06:27 +00:00
Parse freeFlatsInfo.numberFlats (currently-listed flat count) from the
kn-API payload into a new nullable free_flats INT, mirroring price_min_rub
(extraction via _to_int, UPSERT column/bind, ON CONFLICT overwrite). _to_int
rejects bool, preserves 0, truncates float, and is overflow-safe.

Migration 124 adds the column + COMMENT and backfills historical rows
deterministically from the stored raw payload (domrf_raw_endpoints, section
kn_api) without re-scraping — same jsonb_array_elements pattern already
proven on prod in migration 121, plus a {1,9}/{1,18} digit-cap so a stray
numeric string can never overflow int4/bigint at the deploy gate.

Unblocks object-level Layer2 (Site Finder v2 EPIC 6): hidden = flat_count
(total PD) − free_flats (listed now).
Light1YT merged commit 420cda2831 into main 2026-06-02 20:06:29 +00:00
Light1YT deleted branch feat/950a-domrf-free-flats 2026-06-02 20:06:30 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1002
No description provided.