feat(sf): newbuilding_listings house-grain таблица для future-ЖК слоя (#975) #1108

Merged
bot-reviewer merged 1 commit from feat/975-newbuilding-listings into main 2026-06-06 21:48:51 +00:00
Owner

Closes #975 (SF-v2 #950 EPIC 6, 950-E4). Не-ИРД трек.

Что

На gendesign не было таблицы под листинги новостроек. data/sql/135_newbuilding_listings.sqlhouse-grain таблица, зеркало ключевых колонок tradein houses (cian/yandex_newbuilding) для future-ЖК слоя карты SF (B4).

Решение objective_lots-reuse vs new (DoD, зафиксировано в теле миграции)

Новая таблица. objective_lots = lot-grain (квартира), houses/newbuilding = house-grain (дом/корпус) — разное зерно, ключи, потребители (lots→market/velocity; newbuilding→future-supply карта). Reuse = grain-mismatch → раздельно.

DDL (house-grain, мираж ключевых cols)

  • идентификация/гео: source, ext_house_id, url, slug, address/full_address, lat/lon/geom(Point,4326)
  • класс/застройщик: house_class, developer_name/developer_key, year_built, commission_year, total_floors/total_units
  • рейтинг/очередность/кадастр: rating, reviews_count, houses_by_turn jsonb, cadastral_number
  • cross-ref: cian_internal_house_id, yandex_jk_id, raw_payload, source_last_scraped_at, crossloaded_at
  • UNIQUE (source, ext_house_id) (дедуп для ETL #976), GIST(geom), idx developer_key/house_class

Валидация

  • Применено на prod-PostGIS в rollback-tx (прод не изменён): BEGIN→CREATE TABLE→COMMENT×3→DO→CREATE INDEX×3→ROLLBACK
  • Idempotent (IF NOT EXISTS + guarded DO для UNIQUE), паттерн м.132/133/134.

Scope

Только DDL, self-contained. Наполнение — cross-load ETL tradein→gendesign (#976, отдельно). НЕ трогает parcels.py.

Closes #975 (SF-v2 #950 EPIC 6, 950-E4). Не-ИРД трек. ## Что На gendesign не было таблицы под листинги новостроек. `data/sql/135_newbuilding_listings.sql` — **house-grain** таблица, зеркало ключевых колонок tradein `houses` (cian/yandex_newbuilding) для future-ЖК слоя карты SF (B4). ### Решение objective_lots-reuse vs new (DoD, зафиксировано в теле миграции) **Новая таблица.** `objective_lots` = lot-grain (квартира), `houses`/newbuilding = house-grain (дом/корпус) — разное зерно, ключи, потребители (lots→market/velocity; newbuilding→future-supply карта). Reuse = grain-mismatch → раздельно. ### DDL (house-grain, мираж ключевых cols) - идентификация/гео: `source`, `ext_house_id`, `url`, `slug`, `address`/`full_address`, `lat`/`lon`/`geom(Point,4326)` - класс/застройщик: `house_class`, `developer_name`/`developer_key`, `year_built`, `commission_year`, `total_floors`/`total_units` - рейтинг/очередность/кадастр: `rating`, `reviews_count`, `houses_by_turn` jsonb, `cadastral_number` - cross-ref: `cian_internal_house_id`, `yandex_jk_id`, `raw_payload`, `source_last_scraped_at`, `crossloaded_at` - UNIQUE `(source, ext_house_id)` (дедуп для ETL #976), GIST(geom), idx developer_key/house_class ## Валидация - Применено на **prod-PostGIS в rollback-tx** (прод не изменён): BEGIN→CREATE TABLE→COMMENT×3→DO→CREATE INDEX×3→ROLLBACK ✅ - Idempotent (IF NOT EXISTS + guarded DO для UNIQUE), паттерн м.132/133/134. ## Scope Только DDL, self-contained. Наполнение — cross-load ETL tradein→gendesign (#976, отдельно). НЕ трогает `parcels.py`.
lekss361 added 1 commit 2026-06-06 21:46:41 +00:00
feat(sf): newbuilding_listings house-grain таблица для future-ЖК слоя (#975)
All checks were successful
CI / changes (push) Successful in 7s
CI / changes (pull_request) Successful in 7s
CI / backend-tests (push) Successful in 5m48s
CI / backend-tests (pull_request) Successful in 5m50s
0a24818bc6
lekss361 added the
GG-форсайт
scope/db
site-finder
status/review
labels 2026-06-06 21:46:49 +00:00
bot-reviewer reviewed 2026-06-06 21:48:43 +00:00
bot-reviewer left a comment
Collaborator

APPROVE — newbuilding_listings house-grain таблица (#975 SF-v2 EPIC 6).

  • Номер 135 свободен (проверил дерево main: 133/134 присутствуют, нет 135). DDL — проверенный идемпотентный паттерн м.132/133/134: BEGIN/COMMIT, CREATE TABLE/INDEX IF NOT EXISTS, guarded DO для UNIQUE (pg_constraint). CHECK (length(source)>0)+(length(ext_house_id)>0).
  • geometry(Point,4326) + GIST; partial-индексы (developer_key/house_class WHERE NOT NULL). UNIQUE (source, ext_house_id) — дедуп для ETL #976. 0 INSERT (наполнение в #976).
  • Grain-решение обосновано и задокументировано в теле миграции: house-grain (дом/корпус) ≠ objective_lots lot-grain (квартира) — разные ключи/потребители, reuse = mismatch → отдельная таблица. Верно.
  • DDL-only, self-contained, parcels.py не тронут. Прогнан на prod-PostGIS rollback-tx.

Merge → deploy-verify. NB: DDL-PR — прод-health недостаточен; подтверждение newbuilding_listings за postgres/qa-окном.

<!-- gendesign-review-bot: sha=0a24818 verdict=approve --> ✅ **APPROVE** — newbuilding_listings house-grain таблица (#975 SF-v2 EPIC 6). - **Номер 135 свободен** (проверил дерево main: 133/134 присутствуют, нет 135). DDL — проверенный идемпотентный паттерн м.132/133/134: BEGIN/COMMIT, CREATE TABLE/INDEX IF NOT EXISTS, guarded DO для UNIQUE (pg_constraint). CHECK (length(source)>0)+(length(ext_house_id)>0). - `geometry(Point,4326)` + GIST; partial-индексы (developer_key/house_class WHERE NOT NULL). UNIQUE (source, ext_house_id) — дедуп для ETL #976. 0 INSERT (наполнение в #976). - **Grain-решение обосновано и задокументировано** в теле миграции: house-grain (дом/корпус) ≠ objective_lots lot-grain (квартира) — разные ключи/потребители, reuse = mismatch → отдельная таблица. Верно. - DDL-only, self-contained, parcels.py не тронут. Прогнан на prod-PostGIS rollback-tx. Merge → deploy-verify. NB: DDL-PR — прод-health недостаточен; подтверждение newbuilding_listings за postgres/qa-окном.
bot-reviewer merged commit f8aa1d7512 into main 2026-06-06 21:48:51 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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#1108
No description provided.