gendesign/tradein-mvp/backend
lekss361 1b6461eb15 fix(tradein): 030 — UNIQUE constraint on avito_imv_evaluations.cache_key
Hotfix для unblock PR #452 (Stage 3 IMV estimator integration).

Миграция 018 (Stage 1) создала только non-unique imv_cache_key_idx —
но save_imv_evaluation использует ON CONFLICT (cache_key) DO UPDATE,
что требует UNIQUE/exclusion constraint, иначе:
  ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification

Этот PR:
- DELETE дублей по cache_key (защитно, на свежей БД no-op)
- CREATE UNIQUE INDEX IF NOT EXISTS imv_cache_key_uniq_idx ON avito_imv_evaluations(cache_key)

Idempotent: повторный apply — NOTICE, без ошибок.
Без CONCURRENTLY — таблица свежая (cache_key никогда не writev до PR #452).

Reviewer: deep-code-reviewer on PR #452.
2026-05-23 15:58:53 +03:00
..
app feat(tradein): scrape_pipeline.py — Avito full orchestrator (search → houses → detail) (#451) 2026-05-23 12:55:13 +00:00
data/sql fix(tradein): 030 — UNIQUE constraint on avito_imv_evaluations.cache_key 2026-05-23 15:58:53 +03:00
tests feat(tradein): scrape_pipeline.py — Avito full orchestrator (search → houses → detail) (#451) 2026-05-23 12:55:13 +00:00
.dockerignore feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
Dockerfile feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
pyproject.toml feat(tradein): scrape_pipeline.py — Avito full orchestrator (search → houses → detail) (#451) 2026-05-23 12:55:13 +00:00