f25fa57141
fix(scrapers): stable dedup_hash — drop price_rub + strip URL query (Refs #753 )
...
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 в ключе.
2026-05-30 19:06:03 +03:00
ec26e5813f
fix(tradein): implement listings_snapshots + offer_price_history writers ( #567 ) ( #624 )
Deploy Trade-In / deploy (push) Successful in 43s
Deploy Trade-In / build-backend (push) Successful in 1m2s
Deploy / changes (push) Waiting to run
Deploy / build-backend (push) Blocked by required conditions
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy / build-worker (push) Blocked by required conditions
Deploy / build-frontend (push) Blocked by required conditions
Deploy / deploy (push) Blocked by required conditions
2026-05-28 13:49:52 +00:00
7e24ccbf2c
feat(tradein): hook matching в save_listings — fill listing_sources (PR I) ( #595 )
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 52s
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / deploy (push) Successful in 40s
2026-05-27 10:02:37 +00:00
1b3edff6a9
feat(tradein): extend base.py save_listings to persist Cian-specific columns (PR #450 follow-up) ( #455 )
Deploy Trade-In / changes (push) Successful in 4s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / deploy (push) Successful in 20s
Deploy Trade-In / build-backend (push) Successful in 39s
2026-05-23 13:05:20 +00:00
9ba776f2ca
feat(tradein): cian_state_parser shared utility + ScrapedLot Cian fields ( #447 )
Deploy Trade-In / build-backend (push) Blocked by required conditions
Deploy Trade-In / build-frontend (push) Blocked by required conditions
Deploy Trade-In / deploy (push) Blocked by required conditions
Deploy Trade-In / changes (push) Has been cancelled
2026-05-23 12:35:01 +00:00
47f4cc7d58
refactor(tradein): avito search — remove jitter (C-5) + mobile API dead code + parse houseLinks ( #441 )
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 39s
Deploy Trade-In / deploy (push) Successful in 18s
2026-05-23 11:55:18 +00:00
lekss361
02267d0306
feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in)
...
- FastAPI backend: PostGIS estimator + 3 scrapers (Avito/Cian/Yandex)
- Next.js 15 frontend: tradein.html mockup design, basePath=/trade-in
- WeasyPrint PDF (Брусника-style 4-page report)
- Address autocomplete с typo-tolerance + 6 EKB presets
- Изолированный docker stack gendesign-tradein (отдельная postgres БД)
- Caddy inline routes: gendsgn.ru/trade-in/* и /trade-in/api/v1/*
- Forgejo Actions: .forgejo/workflows/deploy-tradein.yml (shell-based GHCR login)
- Триггер только по paths: tradein-mvp/** (не пересекается с deploy.yml)
- Образы: ghcr.io/lekss361/gendesign-tradein-{backend,frontend}:latest
Первый запуск на сервере (вручную, один раз):
- создать /opt/gendesign/tradein-mvp/.env.runtime (postgres pwd, contact email)
- docker network create gendesign_shared (если нет)
- docker compose -p gendesign-tradein up -d
- docker compose -p gendesign exec caddy caddy reload
2026-05-21 00:25:39 +03:00