(low) cian_price_history.backfill: saved считает len(price_changes), а не реально вставленные строки #1528

Closed
opened 2026-06-15 05:59:19 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: report · Файл: tradein-mvp/backend/app/services/cian_price_history.py:127-130

cian_price_history.py:130. result.saved += len(enrichment.price_changes) суммирует все найденные изменения цены до записи. Реальный INSERT в save_detail_enrichment (scrapers/cian_detail.py:311-333) условный: строки без change_time/price_rub пропускаются (стр.312-313), и используется ON CONFLICT DO NOTHING (стр.325). При невалидных элементах или повторном (идемпотентном) прогоне фактически вставляется меньше строк, а saved и лог 'cian_price_history done: ... saved=N' завышены. Импакт: вводит оператора в заблуждение о результате backfill (только метрика, данные корректны). Фикс: возвращать число вставленных строк из save_detail_enrichment (например, суммировать result.rowcount по INSERT) и инкрементировать result.saved этим значением.

Почему баг: Счётчик берётся из длины списка до записи, тогда как фактический INSERT условный (DO NOTHING + проверка change_time/price). Лог 'cian_price_history done: ... saved=N' и возвращаемый CianPriceHistoryResult будут завышать число записанных строк — вводит в заблуждение оператора о результате backfill.

Как чинить: Возвращать из save_detail_enrichment число фактически вставленных строк (rowcount по INSERT) и прибавлять его к result.saved; либо считать только changes с непустыми change_time и price_rub.


deep-audit «армия ботов 2» · verify+harden, confidence 0.85 · unit U127

**Severity:** low · **Категория:** report · **Файл:** `tradein-mvp/backend/app/services/cian_price_history.py:127-130` cian_price_history.py:130. result.saved += len(enrichment.price_changes) суммирует все найденные изменения цены до записи. Реальный INSERT в save_detail_enrichment (scrapers/cian_detail.py:311-333) условный: строки без change_time/price_rub пропускаются (стр.312-313), и используется ON CONFLICT DO NOTHING (стр.325). При невалидных элементах или повторном (идемпотентном) прогоне фактически вставляется меньше строк, а saved и лог 'cian_price_history done: ... saved=N' завышены. Импакт: вводит оператора в заблуждение о результате backfill (только метрика, данные корректны). Фикс: возвращать число вставленных строк из save_detail_enrichment (например, суммировать result.rowcount по INSERT) и инкрементировать result.saved этим значением. **Почему баг:** Счётчик берётся из длины списка до записи, тогда как фактический INSERT условный (DO NOTHING + проверка change_time/price). Лог 'cian_price_history done: ... saved=N' и возвращаемый CianPriceHistoryResult будут завышать число записанных строк — вводит в заблуждение оператора о результате backfill. **Как чинить:** Возвращать из save_detail_enrichment число фактически вставленных строк (rowcount по INSERT) и прибавлять его к result.saved; либо считать только changes с непустыми change_time и price_rub. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.85 · unit U127</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:59:19 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:18 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1528
No description provided.