compute_dedup_hash включал price_rub и волатильный source_url (?context=) в ключ → смена цены / ре-скрейп того же объявления давали новый hash → INSERT дубля вместо ON CONFLICT DO UPDATE → дубли активных listings → искажение asking_to_sold_ratio / sales-vs-listings / активного инвентаря. Фикс (base.py.compute_dedup_hash): - price_rub убран из ключа (смена цены = UPDATE строки, не новый объект); - source_url-fallback стрипает query-string (?...) перед хешированием. Avito source_id (DoD п.1): УЖЕ выставляется avito.py:404 (source_id=data-item-id, добавлено #726) — премиса issue про '0 совпадений source_id' устарела. avito.py НЕ менялся, конфликт зафиксирован в PR/комменте. Разовый эффект: существующие строки получат новый hash → следующий скрейп upsert'нет их по новому ключу (всплеск дублей разовый, как и оговорено в issue). Tests (test_base_save_listings.py): same item разная цена+context→один hash; no-source_id query-strip; разные source_id→разный hash; source в ключе. |
||
|---|---|---|
| .. | ||
| api | ||
| core | ||
| observability | ||
| schemas | ||
| services | ||
| tasks | ||
| __init__.py | ||
| main.py | ||