add Telegram alerts: qualified setups, S/R proximity, score drops, daily digest
Closes the action loop — instead of polling the dashboard, the platform pushes actionable signals to Telegram. New hourly 'alerts' job dispatches four toggleable triggers, deduped via a new alert_log table (cooldown-based for qualified/S-R/digest, watermark-based for score deterioration). Admin → Settings gains a Telegram panel (write-only bot token, chat ID, per-trigger toggles, Send Test). Credentials follow DB > env precedence (TELEGRAM_BOT_TOKEN / _CHAT_ID). Backend: alert_service + AlertLog model + migration 005, scheduler job, admin endpoints/schema. Frontend: AlertSettings panel, hooks, api, types. Deploy: run alembic upgrade (new alert_log table). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -77,3 +77,15 @@ class SentimentConfigUpdate(BaseModel):
|
||||
|
||||
class SentimentTestRequest(BaseModel):
|
||||
ticker: str = Field(default="AAPL", max_length=10)
|
||||
|
||||
|
||||
class AlertConfigUpdate(BaseModel):
|
||||
"""Telegram alert config. bot_token is write-only; omit/empty to keep the
|
||||
stored token."""
|
||||
enabled: bool | None = None
|
||||
bot_token: str | None = Field(default=None, max_length=200)
|
||||
telegram_chat_id: str | None = Field(default=None, max_length=64)
|
||||
qualified_enabled: bool | None = None
|
||||
sr_proximity_enabled: bool | None = None
|
||||
score_drop_enabled: bool | None = None
|
||||
digest_enabled: bool | None = None
|
||||
|
||||
Reference in New Issue
Block a user