60 lines
3.5 KiB
SQL
60 lines
3.5 KiB
SQL
-- DOM.RF lazy-load pages (housing, housing_dev, realization, mortgage_rates,
|
||
-- stat_series) — schema for the 5 pages that didn't capture on the first
|
||
-- scrape pass. Realization = 4 endpoints (rpp/total, /housing, /readyYear,
|
||
-- /developer) all share the same row shape, so a single wide table works.
|
||
|
||
-- ── REALIZATION ────────────────────────────────────────────────────────────
|
||
-- Per-region (and RF-level when region_code IS NULL) realization data from
|
||
-- /аналитика/api/rpp/{total,housing,readyYear,developer}. The "subject"
|
||
-- field is overloaded:
|
||
-- - total : RF code (always "100")
|
||
-- - housing : sold-progress bucket id ("0".."6")
|
||
-- - ready_year: year of planned readiness ("2026"..)
|
||
-- - developer: developer_id (e.g. "6208_0" = PRINZIP)
|
||
-- subject_desc carries the human-readable label.
|
||
CREATE TABLE IF NOT EXISTS domrf_realization (
|
||
snapshot_date DATE NOT NULL,
|
||
endpoint_type TEXT NOT NULL, -- 'total' | 'housing' | 'ready_year' | 'developer'
|
||
region_code INT NOT NULL DEFAULT -1, -- Rosstat code; -1 sentinel for RF-only call
|
||
rep_year INT NOT NULL,
|
||
rep_month INT NOT NULL,
|
||
type_square TEXT NOT NULL, -- 'total' | 'living'
|
||
subject TEXT NOT NULL, -- bucket id / year / developer_id
|
||
subject_desc TEXT,
|
||
share_total NUMERIC, -- доля от итогового объёма (для housing/ready_year)
|
||
total_square NUMERIC, -- м² × тыс
|
||
open_square NUMERIC,
|
||
sold_square NUMERIC,
|
||
unsold_square NUMERIC,
|
||
unopened_square NUMERIC,
|
||
sold_perc NUMERIC,
|
||
unsold_perc NUMERIC,
|
||
unopened_perc NUMERIC,
|
||
sold_amount NUMERIC, -- # квартир
|
||
price_avg NUMERIC, -- ₽/м² средний
|
||
PRIMARY KEY (snapshot_date, endpoint_type, region_code, type_square, subject)
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_realization_region ON domrf_realization (region_code, endpoint_type);
|
||
CREATE INDEX IF NOT EXISTS idx_realization_dev ON domrf_realization (subject) WHERE endpoint_type='developer';
|
||
|
||
-- ── STAT_SERIES XLSX FILE INDEX ────────────────────────────────────────────
|
||
-- Catalogue of the public XLSX statistics files served at
|
||
-- /site/binaries/content/assets/domrf/xlsdashboard/*. Stores download metadata
|
||
-- and a copy of the bytes (for offline reload). XLSX bodies live in BYTEA so
|
||
-- the prod DB is the single source of truth — no filesystem dependency.
|
||
CREATE TABLE IF NOT EXISTS domrf_xlsx_files (
|
||
snapshot_date DATE NOT NULL,
|
||
filename TEXT NOT NULL,
|
||
source_url TEXT NOT NULL,
|
||
bytes INT NOT NULL,
|
||
sha256 TEXT NOT NULL,
|
||
content BYTEA NOT NULL,
|
||
fetched_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
PRIMARY KEY (snapshot_date, filename)
|
||
);
|
||
|
||
-- ── SSR BLOBS for housing / housing_dev / mortgage_rates ────────────────────
|
||
-- These pages bake their data into Next.js __NEXT_DATA__ instead of XHR.
|
||
-- We dump the whole blob into the existing universal store so future
|
||
-- normalization can mine it without re-scraping.
|
||
-- (no new table — uses existing domrf_raw_endpoints from 31_schema_domrf_raw.sql)
|