Files
Deal/.superpowers/sdd/channel-discovery/task-1-report.md
T
Rustam Khalimov 27c7831910
ci / build-test (push) Canceled after 0s
Deal — единая кодовая база
SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/
Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue,
контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер),
Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог).

Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0,
тесты 1340/130/52/38/9 зелёные.
2026-09-11 23:56:47 +03:00

92 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Task 1 — Отчёт: Схема БД и настройки по умолчанию (Discovery)
Статус: **DONE**
## Что сделано по шагам
### Step 1: Таблицы в `_SCHEMA` (`backend/app/db.py`)
Добавлены перед таблицей `settings` (текст SQL — дословно из брифа):
- `disc_tasks` — задачи поиска каналов (статус, прогресс, план);
- `disc_candidates` — найденные кандидаты (оценки, статус);
- `disc_blacklist` — чёрный список;
- `disc_log` — лог событий по задаче;
- индексы `idx_disc_cand_task` (candidates: task_id, status) и `idx_disc_log_task` (log: task_id, created_at).
> ⚠️ ВАЖНО (поймано при проверке): `_SCHEMA` исполняется по фрагментам через `split(";")`, поэтому в `--`-комментариях над таблицами не должно быть точки с запятой. Первая версия комментария содержала «;» внутри строки комментария — приложение падало на старте (`Parser Error: syntax error at or near "столбцы"`). Исправлено переформулировкой комментария без `;`. Inline-комментарии внутри строк `CREATE TABLE` (из брифа, напр. `-- draft|running|...`) безопасны — в них `;` нет.
### Step 2: Настройки в `DEFAULT_SETTINGS` (`backend/app/constants.py`)
Добавлены в конец словаря (дословно из брифа):
```python
# поиск каналов (Discovery)
"discJoinLimit": 50, # суточный лимит авто-вступлений (общий)
"discJoinDelayMin": 50, # сек, нижняя граница паузы между авто-вступлениями
"discJoinDelayMax": 70, # сек, верхняя граница
"discEvalSample": 10, # размер выборки сообщений при оценке
"discEvalThreshold": 40, # % подходящих сообщений
```
### Step 3: Публичные ключи и клампы (`backend/app/routers/settings_routes.py`)
- В `_PUBLIC_INT` добавлены: `discJoinLimit, discJoinDelayMin, discJoinDelayMax, discEvalSample, discEvalThreshold`.
- В `patch_settings` (по образцу существующих клампов `archiveAfterDays`/`minLen`):
- `discJoinLimit` → 1..200;
- `discJoinDelayMin` / `discJoinDelayMax` → 5..600;
- `discEvalSample` → 3..30;
- `discEvalThreshold` → 1..100.
### Step 4: Проверка
Выполнена (вывод ниже).
## Изменённые файлы
- `backend/app/db.py`
- `backend/app/constants.py`
- `backend/app/routers/settings_routes.py`
## Вывод проверок
### 1. `py_compile`
```
$ cd /c/telbase && python -m py_compile backend/app/db.py backend/app/constants.py backend/app/routers/settings_routes.py
PY_COMPILE_OK # без ошибок
```
### 2. Пересборка и запуск контейнера
```
$ docker compose build app && docker compose up -d app
[+] build 1/1 ✔ Image telbase-app Built (первый запуск упал — см. Concern/Фикс)
[+] up 3/3
✔ Container leadradar-ml Running
✔ Container leadradar-minio Running
✔ Container leadradar Started
```
Логи контейнера после фикса:
```
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Ctrl+C to quit)
```
### 3. API
```
POST /api/auth/login {"login":"admin","password":"admin"} → login status: 200
GET /api/settings →
settings: {"discJoinLimit": 50, "discJoinDelayMin": 50, "discJoinDelayMax": 70,
"discEvalSample": 10, "discEvalThreshold": 40}
```
Все пять ключей присутствуют и равны значениям по умолчанию. ✔
### Дополнительно
- Попытка прямой проверки таблиц в DuckDB вторым процессом
(`duckdb.connect(..., read_only=True)`) не удалась ожидаемо: DuckDB — одна запись,
лок держит процесс приложения (`Conflicting lock is held... PID 1`). Косвенное
подтверждение: `_SCHEMA` исполняется в `store.init()` при старте и падает loudly
(первый запуск упал с Parser Error — это и выявило баг), а финальный старт чистый.
## Concerns
1. **`;` в `--`-комментариях `_SCHEMA` опасен** — пайплайн `split(";")` режет схему
посередине комментария. В добавленном блоке таких мест больше нет, но при будущих
правках схемы стоит избегать `;` в комментариях.
2. Клампы `discJoinDelayMin`/`discJoinDelayMax` независимы (оба 5..600) — нет
перекрёстной проверки `min <= max` (в брифе её не требовалось).
3. Прямой SQL-запрос к таблицам извне невозможен при запущенном приложении (лок
DuckDB); фактическое наличие таблиц подтверждено чистым стартом и прохождением
всей схемы в `store.init()`.