gendesign/tradein-mvp/backend/data/sql/073_normalize_repair_state.sql
Light1YT d842811390
All checks were successful
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 49s
Deploy Trade-In / deploy (push) Successful in 36s
refactor(tradein): normalize repair_state raw→enum at ingest (#621) (#629)
2026-05-28 15:18:11 +00:00

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