-- Migration 073: нормализовать listings.repair_state → enum needs_repair/standard/good/excellent -- -- До этой миграции repair_state хранил сырые значения парсеров: -- avito_detail: cosmetic / euro / designer / required -- cian SERP (decoration): without / no / cosmetic / euro / design / fine / rough -- -- После: только needs_repair / standard / good / excellent. -- Строки с нераспознанными значениями сбрасываются в NULL (безопаснее, чем хранить мусор). -- -- Idempotent: CASE охватывает уже нормализованные значения (pass-through). -- Issue: #621 BEGIN; UPDATE listings SET repair_state = CASE repair_state -- ── уже нормализованные (pass-through) ─────────────────────────────────── WHEN 'needs_repair' THEN 'needs_repair' WHEN 'standard' THEN 'standard' WHEN 'good' THEN 'good' WHEN 'excellent' THEN 'excellent' -- ── needs_repair ───────────────────────────────────────────────────────── WHEN 'required' THEN 'needs_repair' -- avito: «требуется» / «без ремонта» WHEN 'without' THEN 'needs_repair' -- cian: без ремонта WHEN 'no' THEN 'needs_repair' -- cian: нет ремонта WHEN 'rough' THEN 'needs_repair' -- cian: черновая -- ── standard ───────────────────────────────────────────────────────────── WHEN 'cosmetic' THEN 'standard' -- avito/cian: косметический -- ── good ───────────────────────────────────────────────────────────────── WHEN 'euro' THEN 'good' -- avito/cian: евро WHEN 'fine' THEN 'good' -- cian: хорошая отделка -- ── excellent ──────────────────────────────────────────────────────────── WHEN 'designer' THEN 'excellent' -- avito: дизайнерский WHEN 'design' THEN 'excellent' -- cian: дизайнерский -- ── нераспознанные → NULL ──────────────────────────────────────────────── ELSE NULL END WHERE repair_state IS NOT NULL; COMMIT;