-- 077: #576 — migrate rosreestr deals dedup_hash md5('ros:dkp:'||id) -> plain 'ros:dkp:'||id
--
-- До этой миграции dedup_hash хранил md5-хэш натурального ключа: md5('ros:dkp:' || id)
-- (collision-prone, не human-readable, дедуп не восстановить из значения). После — плоский
-- натуральный ключ 'ros:dkp:N' (инъективный, zero-collision, обратимый в исходный id).
--
-- source_id никогда не записывался (NULL для всех 49 791 rosreestr-строк), поэтому исходный
-- id восстанавливаем из FDW foreign table gendesign_rosreestr_deals, матча по тому же md5.
-- Заодно проставляем source_id = id (дедуп переустанавливаем навсегда).
--
-- Idempotent: повторный прогон затрагивает только строки, оставшиеся в md5-форме
-- (после первого прогона их 0 — UPDATE no-op). Плоские ключи ('ros:dkp:N') физически
-- не могут совпасть с md5-hex (разный формат), поэтому транзиентного UNIQUE-violation
-- по deals_dedup_hash_key во время UPDATE не возникает.
--
-- FDW dependency: читает foreign table gendesign_rosreestr_deals (SERVER gendesign_remote,
-- создан в 060_postgres_fdw_extension.sql; foreign table — в 072_..._cian_rosreestr.sql;
-- USER MAPPING — backend startup core/fdw.py). Деплой применяет миграции ПОСЛЕ `compose up -d`,
-- т.е. FDW-сервер уже поднят и foreign table читаема.
--
-- Фильтр src CTE — байт-в-байт совпадает с live-импортом (scheduler.py:437-444 /
-- import-rosreestr.sh), чтобы каждая импортированная сделка нашлась и сконвертировалась.
-- Apply after: 076_account_estimate_quota.sql

BEGIN;

WITH src AS (
    SELECT
        id,
        md5('ros:dkp:' || CAST(id AS text)) AS h
    FROM gendesign_rosreestr_deals
    WHERE region_code = 66
      AND city ILIKE '%катеринбург%'
      AND realestate_type_code = '002001003000'
      AND area BETWEEN 18 AND 200
      AND deal_price BETWEEN 1000000 AND 100000000
      AND street IS NOT NULL AND trim(street) <> ''
      AND doc_type = 'ДКП'
      AND period_start_date >= DATE '2024-01-01'
)
UPDATE deals d
SET dedup_hash = 'ros:dkp:' || CAST(src.id AS text),
    source_id  = CAST(src.id AS text)
FROM src
WHERE d.source = 'rosreestr'
  AND d.dedup_hash = src.h;

COMMIT;
