Files
Deal/.superpowers/sdd/channel-discovery/task-7-brief.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

1.7 KiB
Raw Blame History

Task 7: API Discovery

Files:

  • Create: backend/app/routers/discovery_routes.py
  • Modify: backend/app/main.py (регистрация роутера)

Interfaces:

  • Prefix /api/discovery, auth current_login:
    • GET /tasks, POST /tasks, PATCH /tasks/{id}, DELETE /tasks/{id}, POST /tasks/{id}/start, POST /tasks/{id}/pause
    • POST /tasks/{id}/generate-keywords — ИИ: промпт по description → JSON {"keywords": [...]} (816 строк RU+EN); ИИ недоступен/выключен → {"keywords": [], "error": "..."}.
    • GET /tasks/{id}/candidates?status=
    • POST /candidates/{dialog_id}/join — ручное вступление (вне квот): tg.discovery_join + add_dialog_monitored + mark_joined(auto=False); 400 при ошибке.
    • POST /candidates/{dialog_id}/rejectmark_rejected (добавляет в чёрный список). Если кандидат уже joined — 400.
    • GET /blacklist, DELETE /blacklist/{dialog_id}
    • GET /tasks/{id}/log

Pydantic-модели: TaskCreate (name, description, keywords, minSubscribers, lang, threshold, sampleSize, planJoins, autoJoin), TaskPatch (все optional), GenKeywordsBody не нужен (id в пути).

  • Step 1: Реализовать роутер (ValueError → HTTPException 400; KeyError → 404).
  • Step 2: Зарегистрировать в main.py.
  • Step 3: Проверить API на живом контейнере: логин, создание задачи plan=1, list, delete; generate-keywords вернёт error-ветку без настроенного ИИ (не падает).