3.1 KiB
| paths | |||
|---|---|---|---|
|
trade-in (Mera) conventions — tradein-mvp/
Отдельный продукт + отдельный стек от Site Finder. Backend tradein-mvp/backend/app/**,
SQL tradein-mvp/backend/data/sql/NN_*.sql, frontend tradein-mvp/frontend/. Backend Python
подчиняется .claude/rules/backend.md (psycopg v3, CAST, ruff-100), SQL — .claude/rules/sql.md
(NN naming, idempotency). Ниже — то, что СПЕЦИФИЧНО для trade-in.
Две БД — не путай
postgres-tradein(db=tradein) — скрейпленные листинги avito/cian/yandex, estimator, coverage, houses. Для ЛЮБОЙ tradein-задачи метрики/схему бери отсюда (mcp__postgres-tradein__*).postgres-gendesign(db=gendesign) — Site Finder, НЕ trade-in.
Тестировать HTTP только ВНУТРИ контейнера
SSH-туннель localhost:8000 → gendesign-backend (Site Finder, db=gendesign, старый код),
НЕ tradein-backend (порт не опубликован на хост). curl на туннель:8000 по trade-in endpoint =
мусор / чужая БД (стоило ~2ч). Тест trade-in API только изнутри контейнера:
ssh gendesign # затем:
docker exec tradein-backend curl -s localhost:8000/<route> # админ-роуты: -H "X-Authenticated-User: admin"
docker exec tradein-postgres psql -U <user> -d tradein -c "..."
Scheduler крутится в tradein-scraper, не tradein-backend
In-app scheduler (scrape_schedules, tick 60s, python -m app.scheduler_main,
SCHEDULER_ENABLE=true) живёт в контейнере tradein-scraper; в tradein-backend намеренно
false. Статус scheduled-задач смотри в scraper-контейнере (logs/printenv), не в backend.
Ручной smoke: UPDATE scrape_schedules SET next_run_at=now() WHERE source='X' → подхват ≤60s.
SQL авто-применяется на ПРОД (strict)
tradein-mvp/backend/data/sql/NN_*.sql применяется автоматически на деплое через _schema_migrations
в .forgejo/workflows/deploy-tradein.yml (НЕ init-only, strict exit-1). Idempotency критична —
деструктивный DDL хитит прод на деплое. NN-нумерация уже 3-значная и ИМЕЕТ коллизии (108_* ×2,
084_* ×2) → перед новым файлом ls tradein-mvp/backend/data/sql | grep '^NN' на дубль basename,
не доверяй tail.
Rapid-merge trap
2 tradein-PR мержа за секунды → backend test-job cancelled → build-backend пропущен →
«deploy success» на СТАРОМ образе (нет нового кода/deps). Сверяй :latest Created-timestamp vs
время мержа + smoke в контейнере; не верь «деплой прошёл». Recovery: ручной workflow_dispatch
для deploy-tradein.yml.