gendesign/.claude/rules/tradein.md

3.1 KiB
Raw Blame History

paths
tradein-mvp/**/*.py
tradein-mvp/**/*.sql
tradein-mvp/frontend/**/*.{ts,tsx}

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:8000gendesign-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.