53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
"""
|
||
Роуты страницы синхронизации с Intradesk.
|
||
|
||
GET /admin/sync — страница с кнопками и историей
|
||
POST /admin/sync/run — запустить синхронизацию (sync_type в форме)
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
from fastapi import APIRouter, Depends, Form, Request
|
||
from fastapi.responses import RedirectResponse
|
||
|
||
from admin.auth import require_admin
|
||
from admin.templates_env import templates
|
||
from database.connection import get_db
|
||
from database.queries.intradesk import get_last_sync, get_recent_sync_logs
|
||
from external.intradesk_sync import run_sync
|
||
|
||
router = APIRouter()
|
||
|
||
_SYNC_LABELS = {
|
||
"clients": "Клиенты / организации",
|
||
"users": "Пользователи (контактные лица)",
|
||
"tasks": "Заявки",
|
||
"all": "Всё сразу",
|
||
}
|
||
|
||
|
||
@router.get("/sync", dependencies=[Depends(require_admin)])
|
||
async def sync_page(request: Request):
|
||
db = get_db()
|
||
logs = await get_recent_sync_logs(db, limit=20)
|
||
|
||
last: dict[str, dict | None] = {}
|
||
for k in ("clients", "users", "tasks"):
|
||
last[k] = await get_last_sync(db, k)
|
||
|
||
return templates.TemplateResponse(
|
||
"sync/index.html",
|
||
{
|
||
"request": request,
|
||
"logs": logs,
|
||
"last": last,
|
||
"sync_labels": _SYNC_LABELS,
|
||
},
|
||
)
|
||
|
||
|
||
@router.post("/sync/run", dependencies=[Depends(require_admin)])
|
||
async def sync_run(sync_type: str = Form(...)):
|
||
if sync_type not in _SYNC_LABELS:
|
||
return RedirectResponse("/admin/sync", status_code=303)
|
||
await run_sync(sync_type)
|
||
return RedirectResponse("/admin/sync", status_code=303)
|