-- 128_listings_card_hash.sql
-- Добавляет listings.card_hash — SHA-256 над волатильными полями SERP-карточки
-- (price_rub, area_m2, floor, total_floors, rooms, address, len(photo_urls)).
--
-- Назначение:
--   1. Snapshot-dedup: если карточка объявления не изменилась между скрейпами и
--      snapshot за сегодня уже есть — пропускаем повторную запись в
--      listings_snapshots (единственная реальная экономия записи; саму строку
--      listings всё равно трогаем — last_seen_at/is_active бампятся каждый раз,
--      от этого зависит delisting TTL).
--   2. Future: detail-refresh gating (C2) — re-fetch detail-страницы только когда
--      card_hash сменился.
--
-- Колонка сравнивается per-row во время upsert'а (save_listings), НЕ запрашивается
-- по ней — индекс не нужен.
--
-- ЗАВИСИМОСТИ: таблица listings (создаётся ранними миграциями 0xx).
-- Idempotent: ADD COLUMN IF NOT EXISTS безопасен при повторном запуске.

BEGIN;
ALTER TABLE listings ADD COLUMN IF NOT EXISTS card_hash text;
COMMIT;
