gendesign/tradein-mvp/backend/data/sql/073_normalize_repair_state.sql

45 lines
2.9 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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;