start
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from fastapi import APIRouter, Body, Depends
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from ...core.db import get_db
|
||||
from ...models.user import User
|
||||
from ...services.settings import get_settings_dict, update_settings_dict
|
||||
from ...services import telegram as tg
|
||||
from ..deps import get_current_user, require_role
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("")
|
||||
def get_settings_endpoint(
|
||||
db: Session = Depends(get_db),
|
||||
_: User = Depends(get_current_user),
|
||||
) -> dict[str, Any]:
|
||||
s = get_settings_dict(db)
|
||||
# Маскируем токен бота при отдаче
|
||||
tg_cfg = s.get("telegram", {})
|
||||
if tg_cfg.get("bot_token"):
|
||||
tg_cfg = {**tg_cfg, "bot_token_masked": "***" + tg_cfg["bot_token"][-4:]}
|
||||
# Сам токен в открытую тоже отдаём админам через /settings (для редактирования)
|
||||
return s
|
||||
|
||||
|
||||
@router.put("")
|
||||
def put_settings_endpoint(
|
||||
patch: dict[str, Any] = Body(...),
|
||||
db: Session = Depends(get_db),
|
||||
_: User = Depends(require_role("admin")),
|
||||
) -> dict[str, Any]:
|
||||
out = update_settings_dict(db, patch)
|
||||
# Если изменён интервал автоопроса — переплинируем джобу.
|
||||
new_pm = (out.get("ui") or {}).get("probe_interval_minutes")
|
||||
if isinstance(new_pm, int):
|
||||
from ...main import reschedule_probe_job
|
||||
try:
|
||||
reschedule_probe_job(new_pm)
|
||||
except Exception: # pragma: no cover
|
||||
pass
|
||||
return out
|
||||
|
||||
|
||||
@router.post("/telegram/test")
|
||||
def telegram_test(
|
||||
db: Session = Depends(get_db),
|
||||
_: User = Depends(require_role("admin")),
|
||||
) -> dict[str, Any]:
|
||||
s = get_settings_dict(db)
|
||||
cfg = s.get("telegram", {})
|
||||
ok, msg = tg.test_credentials(cfg.get("bot_token", ""), cfg.get("chat_id", ""))
|
||||
return {"ok": ok, "message": msg}
|
||||
Reference in New Issue
Block a user