gendesign/tradein-mvp/backend/data/sql/020_houses_alter_cian.sql
lekss361 1ad2565af1 feat(tradein): SQL migrations 019-028 — Cian schema + matching + cookies
- 019: ALTER listings (windows_view_type, wcs counts, ceiling_height,
       repair_type, views, living_area, bedrooms, balconies, loggias,
       description_minhash, cadastral_number, phones, bargain_allowed,
       sale_type, house_source/ext_id, metro_stations)
- 020: ALTER houses (BTI: series_name, entrances, flat_count, is_emergency,
       heat/gas/overlap types; Cian: cian_internal_house_id,
       management_company_id, transport_accessibility_rate,
       advantages/banks/builders/houses_by_turn jsonb + GIN indexes)
- 021: CREATE management_companies + FK to houses.management_company_id
- 022: CREATE agents table + agent_id_fk on listings
- 023: CREATE offer_price_history (per-listing price change timeline)
- 024: CREATE houses_price_dynamics (monthly price/sqm series)
- 025: CREATE house_reliability_checks (наш.дом.рф checks)
- 026: CREATE external_valuations (unified Avito IMV + Cian Valuation cache)
- 027: CREATE EXTENSION pgcrypto + cian_session_cookies (encrypted)
- 028: CREATE house_sources, listing_sources, house_address_aliases
       + address_fingerprint/canonical/merged_into alters

Refs: decisions/CianScraper_v1_Implementation_Plan.md Stage 1
      decisions/Schema_Cian_SERP_Inventory.md sec 16, 20.3, 26
      decisions/Cross_Source_Matching_Strategy.md sec 2
2026-05-23 15:14:49 +03:00

69 lines
3.5 KiB
PL/PgSQL

-- 020_houses_alter_cian.sql
-- Purpose: Add Cian-specific and BTI columns to houses table.
-- Dependencies:
-- - houses table: 009_houses.sql
-- - management_companies table: 021_management_companies.sql
-- NOTE: management_company_id FK added here but the REFERENCES target (management_companies)
-- must exist first. Apply 021 BEFORE adding the FK column, OR apply 020 without the FK
-- and add FK separately. To keep idempotent ordering: management_companies is created in 021,
-- so 021 must be applied before 020 in production. Alternatively, add FK in 021 via ALTER.
-- DECISION: management_company_id column added without FK here; FK constraint added in 021
-- after management_companies table is created. This file only adds plain bigint column.
-- Deploy order: Apply after 019. Apply 021 after 020 to complete FK wiring.
--
-- Sources: Schema_Cian_SERP_Inventory sec 16.5, 20.3, 26.3
BEGIN;
ALTER TABLE houses
-- BTI data (from offerData.bti.houseData — вторичка detail page)
ADD COLUMN IF NOT EXISTS series_name text, -- 'I-447' / 'II-49' / etc (Cian BTI)
ADD COLUMN IF NOT EXISTS entrances int, -- подъездов в доме
ADD COLUMN IF NOT EXISTS flat_count int, -- квартир в доме (liquidity proxy)
ADD COLUMN IF NOT EXISTS is_emergency boolean, -- аварийный дом (red flag!)
ADD COLUMN IF NOT EXISTS heat_supply_type text, -- central/individual/none
ADD COLUMN IF NOT EXISTS gas_supply_type text, -- central/none
ADD COLUMN IF NOT EXISTS overlap_type text, -- concrete/wood/steel
-- Cian newbuilding / valuation specific
ADD COLUMN IF NOT EXISTS cian_internal_house_id bigint, -- Cian's houseId (filters.houseId)
ADD COLUMN IF NOT EXISTS management_company_id bigint, -- FK to management_companies(id) added in 021
ADD COLUMN IF NOT EXISTS transport_accessibility_rate int, -- 0-10 transport score
-- Cian newbuilding jsonb arrays
ADD COLUMN IF NOT EXISTS advantages jsonb, -- typed advantage list
ADD COLUMN IF NOT EXISTS banks jsonb, -- банки-партнёры (ipoteka)
ADD COLUMN IF NOT EXISTS builders jsonb, -- застройщики (может быть несколько)
ADD COLUMN IF NOT EXISTS houses_by_turn jsonb; -- группировка корпусов по очередям
-- Partial index on series_name for BTI series analytics
CREATE INDEX IF NOT EXISTS houses_series_idx
ON houses (series_name)
WHERE series_name IS NOT NULL;
-- Partial index for emergency flag (rare, useful for risk filter)
CREATE INDEX IF NOT EXISTS houses_emergency_idx
ON houses (is_emergency)
WHERE is_emergency = true;
-- Partial index for Cian internal house ID (cross-source matching)
CREATE INDEX IF NOT EXISTS houses_cian_iid_idx
ON houses (cian_internal_house_id)
WHERE cian_internal_house_id IS NOT NULL;
-- GIN on advantages for feature-based filtering
CREATE INDEX IF NOT EXISTS houses_advantages_gin_idx
ON houses USING GIN (advantages)
WHERE advantages IS NOT NULL;
-- GIN on banks
CREATE INDEX IF NOT EXISTS houses_banks_gin_idx
ON houses USING GIN (banks)
WHERE banks IS NOT NULL;
-- GIN on builders
CREATE INDEX IF NOT EXISTS houses_builders_gin_idx
ON houses USING GIN (builders)
WHERE builders IS NOT NULL;
COMMIT;