-- 105_market_schema_yandex_enrichment.sql
-- Market-схема + таблица yandex_jk_enrichment + houses.yandex_jk_slug (#974).
--
-- Архитектурное решение (ADR):
--   Новые скрейперы пишут в схему market в СУЩЕСТВУЮЩЕМ tradein-postgres.
--   Существующие listings/houses не выносятся — market является дополнительным слоем
--   для cross-product ЖК-аналитики (Site Finder v2 / GG-форсайт).
--
-- Таблица market.yandex_jk_enrichment хранит parsed payload с Yandex Realty
-- ЖК-лендинга (slug, coords, rating, developer). Ключ — ext_id (= yandex_jk_id).
-- UPSERT через ON CONFLICT (ext_id) DO UPDATE.
--
-- houses.yandex_jk_slug: персистируется при resolve_yandex_jk_slug, используется
-- для возобновления sweep без повторного запроса к SERP.
--
-- ЗАВИСИМОСТИ:
--   009_houses.sql (таблица houses), 031_houses_alter_yandex.sql (yandex_jk_id),
--   101_gendesign_reader_role.sql (роль gendesign_reader).
-- Idempotent: IF NOT EXISTS + ADD COLUMN IF NOT EXISTS.
-- AUTO-APPLIED на прод при деплое через deploy-tradein.yml/_schema_migrations.

BEGIN;

-- ── Схема market ─────────────────────────────────────────────────────────────

CREATE SCHEMA IF NOT EXISTS market;

COMMENT ON SCHEMA market IS
    'Cross-product ЖК-аналитика: yandex/cian newbuilding enrichment, '
    'Site Finder v2 / GG-форсайт (#974). '
    'Читается gendesign_reader через GRANT ниже.';

-- ── market.yandex_jk_enrichment ──────────────────────────────────────────────

CREATE TABLE IF NOT EXISTS market.yandex_jk_enrichment (
    id                  bigserial    PRIMARY KEY,
    ext_id              text         NOT NULL,
    name                text,
    developer_name      text,
    address             text,
    lat                 float8,
    lon                 float8,
    rating              float4,
    ratings_count       int,
    text_reviews_count  int,
    raw_payload         jsonb,
    created_at          timestamptz  NOT NULL DEFAULT now(),
    updated_at          timestamptz  NOT NULL DEFAULT now(),
    CONSTRAINT uq_market_yandex_jk_ext_id UNIQUE (ext_id)
);

COMMENT ON TABLE market.yandex_jk_enrichment IS
    'Parsed payload с Yandex Realty ЖК-лендинга (#974). '
    'Ключ ext_id = yandex_jk_id (string). '
    'UPSERT через ON CONFLICT (ext_id) DO UPDATE.';

CREATE INDEX IF NOT EXISTS idx_market_yandex_jk_ext_id
    ON market.yandex_jk_enrichment (ext_id);

-- ── houses.yandex_jk_slug ────────────────────────────────────────────────────

-- Примечание: yandex_jk_id уже существует из миграции 031_houses_alter_yandex.sql.
-- yandex_jk_slug — новый столбец, добавляем только если нет.
ALTER TABLE houses ADD COLUMN IF NOT EXISTS yandex_jk_slug text;

COMMENT ON COLUMN houses.yandex_jk_slug IS
    'Yandex Realty ЖК slug из URL /{city}/kupit/novostrojka/<slug>-<id>/. '
    'Персистируется sweep-таской при resolve_yandex_jk_slug (#974). '
    'NULL = slug ещё не разрезолвлен.';

CREATE INDEX IF NOT EXISTS idx_houses_yandex_jk_slug
    ON houses (yandex_jk_slug)
    WHERE yandex_jk_slug IS NOT NULL;

-- ── Доступ для gendesign_reader ───────────────────────────────────────────────
-- Оба продукта (tradein + gendesign Site Finder v2) читают market-слой через роль
-- gendesign_reader (создана в 101_gendesign_reader_role.sql).

GRANT USAGE ON SCHEMA market TO gendesign_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA market TO gendesign_reader;

COMMIT;
