ci / build-test (push) Canceled after 0s
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 зелёные.
92 lines
4.0 KiB
Markdown
92 lines
4.0 KiB
Markdown
### Task 1: Схема БД и настройки по умолчанию
|
||
|
||
**Files:**
|
||
- Modify: `backend/app/db.py` (добавить 4 таблицы в `_SCHEMA`)
|
||
- Modify: `backend/app/constants.py` (`DEFAULT_SETTINGS`)
|
||
- Modify: `backend/app/routers/settings_routes.py` (`_PUBLIC_INT`)
|
||
|
||
**Interfaces:**
|
||
- Produces: таблицы `disc_tasks`, `disc_candidates`, `disc_blacklist`, `disc_log`; настройки `discJoinLimit` (50), `discJoinDelayMin` (50), `discJoinDelayMax` (70), `discEvalSample` (10), `discEvalThreshold` (40).
|
||
|
||
- [ ] **Step 1: Добавить таблицы в `_SCHEMA`** (перед таблицей `settings`)
|
||
|
||
```sql
|
||
CREATE TABLE IF NOT EXISTS disc_tasks (
|
||
id VARCHAR PRIMARY KEY,
|
||
name VARCHAR NOT NULL,
|
||
description VARCHAR NOT NULL DEFAULT '',
|
||
keywords VARCHAR NOT NULL DEFAULT '[]',
|
||
min_subscribers INTEGER NOT NULL DEFAULT 0,
|
||
lang VARCHAR NOT NULL DEFAULT 'ru',
|
||
threshold INTEGER NOT NULL DEFAULT 40,
|
||
sample_size INTEGER NOT NULL DEFAULT 10,
|
||
plan_joins INTEGER NOT NULL DEFAULT 1,
|
||
auto_join BOOLEAN NOT NULL DEFAULT FALSE,
|
||
status VARCHAR NOT NULL DEFAULT 'draft', -- draft|running|paused|done|failed
|
||
search_idx INTEGER NOT NULL DEFAULT 0,
|
||
search_done BOOLEAN NOT NULL DEFAULT FALSE,
|
||
found INTEGER NOT NULL DEFAULT 0,
|
||
evaluated INTEGER NOT NULL DEFAULT 0,
|
||
joined INTEGER NOT NULL DEFAULT 0,
|
||
rejected INTEGER NOT NULL DEFAULT 0,
|
||
created_at BIGINT NOT NULL,
|
||
updated_at BIGINT NOT NULL
|
||
);
|
||
CREATE TABLE IF NOT EXISTS disc_candidates (
|
||
dialog_id VARCHAR PRIMARY KEY,
|
||
task_id VARCHAR NOT NULL,
|
||
name VARCHAR NOT NULL DEFAULT '',
|
||
username VARCHAR NOT NULL DEFAULT '',
|
||
kind VARCHAR NOT NULL DEFAULT 'channel', -- channel|group|forum
|
||
hue VARCHAR NOT NULL DEFAULT '#666',
|
||
participants INTEGER,
|
||
lang_ru BOOLEAN,
|
||
marks VARCHAR NOT NULL DEFAULT '[]',
|
||
topics VARCHAR NOT NULL DEFAULT '[]',
|
||
fit_ratio DOUBLE,
|
||
status VARCHAR NOT NULL DEFAULT 'new', -- new|review|joined|rejected
|
||
auto_joined BOOLEAN NOT NULL DEFAULT FALSE,
|
||
created_at BIGINT NOT NULL,
|
||
updated_at BIGINT NOT NULL
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_disc_cand_task ON disc_candidates(task_id, status);
|
||
CREATE TABLE IF NOT EXISTS disc_blacklist (
|
||
dialog_id VARCHAR PRIMARY KEY,
|
||
name VARCHAR NOT NULL DEFAULT '',
|
||
reason VARCHAR NOT NULL DEFAULT '',
|
||
created_at BIGINT NOT NULL
|
||
);
|
||
CREATE TABLE IF NOT EXISTS disc_log (
|
||
id VARCHAR PRIMARY KEY,
|
||
task_id VARCHAR NOT NULL,
|
||
event VARCHAR NOT NULL, -- search|found|skip|eval|review|join_auto|join_manual|leave|reject|flood|error|done
|
||
text VARCHAR NOT NULL DEFAULT '',
|
||
created_at BIGINT NOT NULL
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_disc_log_task ON disc_log(task_id, created_at);
|
||
```
|
||
|
||
- [ ] **Step 2: Добавить настройки в `constants.py` → `DEFAULT_SETTINGS`**
|
||
|
||
```python
|
||
# поиск каналов (Discovery)
|
||
"discJoinLimit": 50, # суточный лимит авто-вступлений (общий)
|
||
"discJoinDelayMin": 50, # сек, нижняя граница паузы между авто-вступлениями
|
||
"discJoinDelayMax": 70, # сек, верхняя граница
|
||
"discEvalSample": 10, # размер выборки сообщений при оценке
|
||
"discEvalThreshold": 40, # % подходящих сообщений
|
||
```
|
||
|
||
- [ ] **Step 3: Открыть настройки наружу в `settings_routes.py`**
|
||
|
||
В `_PUBLIC_INT` добавить `discJoinLimit, discJoinDelayMin, discJoinDelayMax, discEvalSample, discEvalThreshold`. В `patch_settings` наложить границы: limit 1..200; паузы 5..600; sample 3..30; threshold 1..100.
|
||
|
||
- [ ] **Step 4: Проверить**
|
||
|
||
```bash
|
||
docker compose build app && docker compose up -d app
|
||
```
|
||
Затем `GET /api/settings` (после логина) — в ответе присутствуют `discJoinLimit: 50` и остальные ключи. `python -m py_compile` всех изменённых файлов — без ошибок.
|
||
|
||
---
|