Closes Stage 1 of AvitoScraper_v2 plan. - 009_houses.sql: CREATE TABLE houses (multi-source: avito/cian, geom trigger, 24 cols) - 010_houses_alter.sql: + 15 cols (material_walls, parking_type, rating_distribution, raw_characteristics, ...) - 011_listings_alter.sql: + 24 cols (house linking, kitchen_area_m2, owners_count, owners_at_least, metro_stations, detail_enriched_at, domoteka/Rosreestr badges, 8 partial indexes) - 012_sellers.sql: CREATE TABLE sellers (Avito seller cache, no logos) - 013_listings_alter_seller.sql: listings.seller_id_fk FK - 014_house_reviews.sql: CREATE TABLE house_reviews (textSections main/pros/cons, no images) - 015_scrape_runs.sql: CREATE TABLE scrape_runs (status CHECK enum, heartbeat, zombie partial idx) - 016_listings_snapshots.sql: CREATE TABLE listings_snapshots (append-only, PK listing_id+date) - 017_house_placement_history.sql: CREATE TABLE house_placement_history (removed_date from IMV only) - 018_avito_imv_evaluations.sql: CREATE TABLE + cache_key col + imv_cache_key_idx (TTL 24h lookup) All migrations: BEGIN/COMMIT, IF NOT EXISTS idempotent, PostGIS geom triggers reuse listings_set_geom(). Smoke tested locally: 7 new tables, 34 indexes, 14 listings columns verified. Refs: decisions/Schema_Avito_Houses_Listings_History.md (sec 4.2, 4.3, 4.4, 6, 7, 13, 25, 29) Refs: decisions/AvitoScraper_v2_Implementation_Plan.md Stage 1
58 lines
3.5 KiB
PL/PgSQL
58 lines
3.5 KiB
PL/PgSQL
-- 010_houses_alter.sql
|
||
-- ALTER TABLE houses — добавить 15+ полей из Houses Catalog endpoint
|
||
-- (material_walls, parking_type, rating_distribution, raw_characteristics, etc.)
|
||
--
|
||
-- Dependencies: 009_houses.sql (houses table must exist)
|
||
-- Apply after: 009_houses.sql
|
||
-- Apply before: 011_listings_alter.sql
|
||
--
|
||
-- Source: decisions/Schema_Avito_Houses_Listings_History.md sec 25
|
||
--
|
||
-- Идемпотентно: ADD COLUMN IF NOT EXISTS безопасен при повторном запуске.
|
||
|
||
BEGIN;
|
||
|
||
ALTER TABLE houses
|
||
-- Идентификатор хеша (из Avito internal base64-encoded ID)
|
||
ADD COLUMN IF NOT EXISTS avito_id_hash text, -- base64 "MTE3LjM3MDg5MA"
|
||
|
||
-- Адрес (два формата)
|
||
ADD COLUMN IF NOT EXISTS short_address text, -- "Свердловская область, Екатеринбург"
|
||
ADD COLUMN IF NOT EXISTS full_address text, -- полный с улицей
|
||
|
||
-- Материалы и конструкция
|
||
ADD COLUMN IF NOT EXISTS material_walls text, -- "Монолитный" / "Железобетонные"
|
||
ADD COLUMN IF NOT EXISTS material_floors text, -- "Железобетонные перекрытия"
|
||
|
||
-- Инженерные системы
|
||
ADD COLUMN IF NOT EXISTS hot_water text, -- "Центральное" / "Автономное"
|
||
|
||
-- Парковка и придомовая территория
|
||
ADD COLUMN IF NOT EXISTS parking_type text, -- "Подземная / За шлагбаумом во дворе"
|
||
ADD COLUMN IF NOT EXISTS has_playground boolean, -- "Детская площадка"
|
||
|
||
-- Застройщик
|
||
ADD COLUMN IF NOT EXISTS developer_name text, -- "ЛСР Недвижимость" (может быть NULL)
|
||
ADD COLUMN IF NOT EXISTS developer_key text, -- Avito internal key застройщика
|
||
|
||
-- Инфраструктура
|
||
ADD COLUMN IF NOT EXISTS infrastructure_summary text, -- "Больница, детский сад, магазин, школа"
|
||
ADD COLUMN IF NOT EXISTS infrastructure_walk_distance text, -- "в 5 минутах ходьбы"
|
||
|
||
-- Рейтинг (детальный) — дополняет houses.rating (numeric(2,1))
|
||
ADD COLUMN IF NOT EXISTS rating_score numeric(4,2), -- 4.666 (точное значение до сотых)
|
||
ADD COLUMN IF NOT EXISTS rating_string text, -- "4,7" (как отображает Avito)
|
||
ADD COLUMN IF NOT EXISTS rating_distribution jsonb, -- [{score:5,count:4},{score:4,count:1},...]
|
||
|
||
-- Карта и дополнительные данные
|
||
ADD COLUMN IF NOT EXISTS map_pins jsonb, -- перезапись поля из 009 (соседние дома + POI)
|
||
ADD COLUMN IF NOT EXISTS raw_characteristics jsonb; -- весь expandParams — для retrofit новых полей
|
||
|
||
COMMENT ON COLUMN houses.rating_score IS
|
||
'Точный рейтинг до сотых (напр. 4.666). Avito округляет до 4.7 для отображения (rating_string).';
|
||
COMMENT ON COLUMN houses.rating_distribution IS
|
||
'Распределение оценок: [{score: 5, count: 4}, {score: 4, count: 1}, ...] из Houses Catalog.';
|
||
COMMENT ON COLUMN houses.raw_characteristics IS
|
||
'Сырые expandParams из Houses Catalog для retrofit новых полей без re-scrape.';
|
||
|
||
COMMIT;
|