Files
vesti/openspec/changes/publisher-dry-run-fix/design.md
T

1.3 KiB

Design

services/publisher/app/main.py

Модель уже имеет dry_run: bool = False. В роуте publish (тело):

@app.post("/api/v1/publish")
def publish(payload: PublishRequest):
    # dry_run — тестовый режим: НЕ уходит в Telegram, возвращает эмуляцию
    if payload.dry_run:
        results = {
            ch: {
                "message_id": 0,
                "media_message_id": 0,
                "views": 0,
                "error": None,
            }
            for ch in resolve_channels(payload.channels)
        }
        return {"ok": True, "results": results, "dry_run": True}
    ... (реальный путь — как сейчас)

При dry_run получатель — resolve_channels(payload.channels or конфиг), т.к. без него непонятно, для какого канала эмулировать (разумно: тот же, что и в реале).

Верификация

  • curl -d '{"card":{...},"dry_run":true}' → dry_run:true, message_id:0, телеграм НЕ тронут.
  • curl -d '{"card":{...},"dry_run":false}' → как раньше (реальный publish).
  • docker compose restart vesti-publisher (пересборка: код меняется, нужен образ).