53 lines
3.1 KiB
Markdown
53 lines
3.1 KiB
Markdown
---
|
||
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:8000` → `gendesign-backend` (Site Finder, db=gendesign, старый код),
|
||
**НЕ** tradein-backend (порт не опубликован на хост). curl на туннель:8000 по trade-in endpoint =
|
||
мусор / чужая БД (стоило ~2ч). Тест trade-in API только изнутри контейнера:
|
||
|
||
```bash
|
||
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`.
|