feat(tradein/avito): house-поля с детальной страницы доезжают в houses (#3036) #3040

Merged
bot-backend merged 2 commits from feat/3036-detail-house-params into main 2026-08-21 14:48:36 +00:00
Collaborator

Summary

  • save_detail_enrichment (единственная точка: пайплайн ×2 + avito_detail_backfill) после UPDATE listings делает второй оператор fill-only UPDATE houses … FROM listings WHERE l.house_id_fk = h.id: COALESCE(houses.X, новое) для has_concierge, closed_yard, total_floors (из total_floors_house), house_type. Под SAVEPOINT — отказ не роняет обогащение листинга; если с карточки house-полей не пришло — оператора нет.
  • Это ровно «перестать выбрасывать уже распарсенное» из постановки: парсер и раньше извлекал эти поля, но писал в listings только house_type/house_url.
  • Лифты не пишутся: в houses нет колонок passenger_lifts_count/cargo_lifts_countconflict_resolution.HOUSE_FIELD_SOURCES их объявляет, схема на проде их не знает (проверено information_schema). Отдельный пункт.

Test plan

  • Юнит с подменным Session: второй оператор, fill-only по 4 колонкам, SAVEPOINT, без лифтов, без house-полей → без оператора, листинг не найден → дом не трогаем. На origin/main 2/4 красных по значению, контроли зелёные.
  • Live-тест (CI БД #2745; локально skip, в allowlist): дом+листинг → fill; вторая карточка с другими значениями — не затирает; листинг без привязки — дом не тронут.
  • Прод: SELECT count(*) FILTER (WHERE has_concierge IS NOT NULL), count(*) FILTER (WHERE closed_yard IS NOT NULL) FROM houses — сейчас 5 / 19; рост начнётся с первых успешных detail-обогащений после деплоя. Оговорка: detail Авито сейчас отказывает в 91–96 % (#3035/#2827), так что эффект появится, когда карточки снова будут открываться; исторические 10 051 карточки без повторного скачивания не дообогатить.

Refs #3036

## Summary - `save_detail_enrichment` (единственная точка: пайплайн ×2 + `avito_detail_backfill`) после `UPDATE listings` делает второй оператор **fill-only** `UPDATE houses … FROM listings WHERE l.house_id_fk = h.id`: `COALESCE(houses.X, новое)` для `has_concierge`, `closed_yard`, `total_floors` (из `total_floors_house`), `house_type`. Под SAVEPOINT — отказ не роняет обогащение листинга; если с карточки house-полей не пришло — оператора нет. - Это ровно «перестать выбрасывать уже распарсенное» из постановки: парсер и раньше извлекал эти поля, но писал в listings только `house_type/house_url`. - **Лифты не пишутся**: в `houses` нет колонок `passenger_lifts_count`/`cargo_lifts_count` — `conflict_resolution.HOUSE_FIELD_SOURCES` их объявляет, схема на проде их не знает (проверено `information_schema`). Отдельный пункт. ## Test plan - [x] Юнит с подменным Session: второй оператор, fill-only по 4 колонкам, SAVEPOINT, без лифтов, без house-полей → без оператора, листинг не найден → дом не трогаем. На origin/main 2/4 красных по значению, контроли зелёные. - [x] Live-тест (CI БД #2745; локально skip, в allowlist): дом+листинг → fill; вторая карточка с другими значениями — не затирает; листинг без привязки — дом не тронут. - [ ] Прод: `SELECT count(*) FILTER (WHERE has_concierge IS NOT NULL), count(*) FILTER (WHERE closed_yard IS NOT NULL) FROM houses` — сейчас 5 / 19; рост начнётся с первых успешных detail-обогащений после деплоя. **Оговорка:** detail Авито сейчас отказывает в 91–96 % (#3035/#2827), так что эффект появится, когда карточки снова будут открываться; исторические 10 051 карточки без повторного скачивания не дообогатить. Refs #3036
bot-backend added 1 commit 2026-08-21 14:22:22 +00:00
feat(tradein/avito): house-поля с детальной страницы доезжают в houses (#3036)
Some checks failed
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
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
CI Trade-In / backend-tests (pull_request) Failing after 4m35s
9246033795
Почему: detail-парсер извлекал has_concierge/closed_yard/total_floors_house/
house_type на каждой карточке и выбрасывал всё, кроме house_type/house_url
для listings (комментарий в шапке: «собираются но НЕ сохраняются, Stage 2c»,
а Stage 2c почти не отрабатывает). На проде при 10 051 обогащённых карточках
с привязкой к дому has_concierge заполнен у 5 домов из 10 131, closed_yard —
у 19; при этом API отдаёт эти поля, и «неизвестно» читается как «нет».

Что: в save_detail_enrichment — единственной точке для пайплайна (×2) и
бэкфилла — вторым оператором fill-only UPDATE houses … FROM listings WHERE
house_id_fk = h.id: COALESCE(houses.X, новое) для has_concierge, closed_yard,
total_floors, house_type; под SAVEPOINT (отказ не роняет обогащение
листинга); нет house-полей с карточки — оператора нет. Лифты не пишутся:
колонок в houses нет (conflict_resolution их объявляет, схема — нет).

Тесты: подменный Session — второй оператор, fill-only, SAVEPOINT, без
лифтов, без полей — без оператора, листинг не найден — дом не трогаем (на
main красный по значению); live (CI БД): fill → не затирает → без привязки
дом не тронут.

Refs #3036
Light1YT added 1 commit 2026-08-21 14:35:33 +00:00
test(tradein): #3036 live-тест — обязательные url/source_url/dedup_hash в фикстурах houses/listings (NOT NULL без дефолта на проде; локально тест пропускался)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
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
CI Trade-In / backend-tests (pull_request) Successful in 4m24s
2f28f0166e
bot-backend merged commit 17a6dae3a4 into main 2026-08-21 14:48:36 +00:00
bot-backend deleted branch feat/3036-detail-house-params 2026-08-21 14:48:37 +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#3040
No description provided.