45 lines
2.9 KiB
PL/PgSQL
45 lines
2.9 KiB
PL/PgSQL
-- 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;
|