-- Trade-In MVP — идемпотентный сид СДЕЛОК (deals). -- -- ВАЖНО: этот файл применяется на КАЖДОМ деплое (deploy-tradein.yml гоняет -- весь data/sql/*.sql). Поэтому: -- 1. НЕ трогает listings — реальные данные парсеров не должны затираться. -- 2. Вставляет сделки ТОЛЬКО если таблица deals пуста (WHERE NOT EXISTS). -- На втором и последующих деплоях SELECT вернёт 0 строк → no-op. -- -- 80 синтетических сделок (Росреестр/ДомКлик) в центре ЕКБ — для страницы 3 -- PDF-отчёта. Реальные сделки появятся когда подключим дамп rosreestr_deals. INSERT INTO deals ( source, dedup_hash, address, lat, lon, geom, rooms, area_m2, floor, total_floors, year_built, price_rub, price_per_m2, deal_date, days_on_market ) SELECT CASE WHEN random() < 0.6 THEN 'rosreestr' ELSE 'domklik' END, md5('seed-deal:' || i::text || ':' || rooms_pick::text || ':' || area_pick::text), 'Екатеринбург, реальная сделка', lat, lon, ST_SetSRID(ST_MakePoint(lon, lat), 4326), rooms_pick, area_pick, (1 + (random() * 15)::int), (3 + (random() * 15)::int), (1965 + (random() * 60)::int), (ppm2 * area_pick)::int, ppm2, NOW() - (random() * 365 || ' days')::interval, (15 + (random() * 90)::int) FROM ( SELECT i, lat, lon, rooms_pick, CASE rooms_pick WHEN 1 THEN (28 + random() * 17)::numeric(10,2) WHEN 2 THEN (40 + random() * 25)::numeric(10,2) WHEN 3 THEN (58 + random() * 30)::numeric(10,2) END AS area_pick, (110000 + random() * 70000)::int AS ppm2 FROM ( SELECT gs AS i, 56.8354 + (random() - 0.5) * 0.026 AS lat, 60.6172 + (random() - 0.5) * 0.050 AS lon, CASE WHEN random() < 0.3 THEN 1 WHEN random() < 0.8 THEN 2 ELSE 3 END AS rooms_pick FROM generate_series(1, 80) gs ) random_lots ) generated WHERE NOT EXISTS (SELECT 1 FROM deals LIMIT 1);