feat(market): contract views market.v_* over producer tables (#2130) #2141

Merged
lekss361 merged 1 commit from feat/market-contract-views into main 2026-07-02 14:03:00 +00:00
Owner

Закрывает #2130 (часть Epic #2127).

Что

5 CREATE OR REPLACE VIEW в схеме market поверх сырых producer-таблиц — стабильный публичный контракт данных для внешних потребителей (изолирует от churn внутренней схемы). Гранты НЕ трогает (перенацеливание reader на view + revoke сырых = #2138).

  • market.v_houses, market.v_house_sources, market.v_houses_price_dynamics, market.v_house_reliability_checks, market.v_house_reviews

Дизайн контракта

  • Все колонки перечислены ЯВНО (не SELECT *) — в этом смысл стабильного контракта.
  • Покрытие сверено с реальным consumer: _SOURCE_SQL в backend/app/services/etl/newbuilding_crossload.py (единственный текущий читатель; premises_lookup/competitors эти таблицы не читают).
  • Намеренно исключены producer-internal churny поля (dadata_qc_*, *_validated_at, imv_status, raw_payload, снапшот-поля) — контракт отдаёт content, не кухню.

Файл

  • tradein-mvp/backend/data/sql/154_market_contract_views.sql — idempotent, BEGIN/COMMIT, шапка документирует контракт

Risk

CREATE OR REPLACE VIEW на проде может блокироваться долгим ридером (известный инцидент) — убить фоновые тяжёлые SELECT перед мержем/деплоем.

Закрывает #2130 (часть Epic #2127). ## Что 5 `CREATE OR REPLACE VIEW` в схеме `market` поверх сырых producer-таблиц — стабильный публичный контракт данных для внешних потребителей (изолирует от churn внутренней схемы). Гранты НЕ трогает (перенацеливание reader на view + revoke сырых = #2138). - `market.v_houses`, `market.v_house_sources`, `market.v_houses_price_dynamics`, `market.v_house_reliability_checks`, `market.v_house_reviews` ## Дизайн контракта - Все колонки перечислены ЯВНО (не `SELECT *`) — в этом смысл стабильного контракта. - Покрытие сверено с реальным consumer: `_SOURCE_SQL` в `backend/app/services/etl/newbuilding_crossload.py` (единственный текущий читатель; `premises_lookup`/`competitors` эти таблицы не читают). - Намеренно исключены producer-internal churny поля (`dadata_qc_*`, `*_validated_at`, `imv_status`, `raw_payload`, снапшот-поля) — контракт отдаёт content, не кухню. ## Файл - `tradein-mvp/backend/data/sql/154_market_contract_views.sql` — idempotent, BEGIN/COMMIT, шапка документирует контракт ## Risk `CREATE OR REPLACE VIEW` на проде может блокироваться долгим ридером (известный инцидент) — убить фоновые тяжёлые SELECT перед мержем/деплоем.
lekss361 added 1 commit 2026-07-02 13:52:47 +00:00
feat(market): contract views market.v_* over producer tables (#2130)
All checks were successful
CI / changes (pull_request) Successful in 9s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2296d33d28
lekss361 added the
data
scope/db
status/review
tradein
labels 2026-07-02 13:52:52 +00:00
lekss361 merged commit e2bb5061f9 into main 2026-07-02 14:03:00 +00:00
lekss361 deleted branch feat/market-contract-views 2026-07-02 14:03:00 +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#2141
No description provided.