102 lines
2.9 KiB
Python
102 lines
2.9 KiB
Python
"""WESP-shaped misc endpoints: notifications, updates (/api/notifications, /api/updates/*)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import date
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from pydantic import BaseModel
|
|
|
|
from app.core.dependencies import get_current_user
|
|
from app.modules.users.models import User
|
|
|
|
router = APIRouter(tags=["zootech-wesp-misc"])
|
|
|
|
|
|
def _empty_notifications(*, summary: bool = False) -> dict:
|
|
today = date.today().isoformat()
|
|
if summary:
|
|
return {"items": [], "unreadCount": 0}
|
|
return {
|
|
"items": [],
|
|
"unreadCount": 0,
|
|
"date": today,
|
|
"prevDate": None,
|
|
"hasMore": False,
|
|
}
|
|
|
|
|
|
@router.get("/notifications")
|
|
def wesp_notifications_list(
|
|
summary: str | None = None,
|
|
_user: User = Depends(get_current_user),
|
|
):
|
|
if summary in ("1", "true", "yes"):
|
|
return _empty_notifications(summary=True)
|
|
return _empty_notifications()
|
|
|
|
|
|
@router.post("/notifications")
|
|
def wesp_notifications_create(_user: User = Depends(get_current_user)):
|
|
return {
|
|
"id": "orchestrator-stub",
|
|
"title": "",
|
|
"detail": "",
|
|
"kind": "info",
|
|
"category": "general",
|
|
"read": False,
|
|
}
|
|
|
|
|
|
@router.patch("/notifications/read-all")
|
|
def wesp_notifications_read_all(_user: User = Depends(get_current_user)):
|
|
return {"success": True, "marked": 0}
|
|
|
|
|
|
@router.patch("/notifications/{notification_id}/read")
|
|
def wesp_notifications_mark_read(notification_id: str, _user: User = Depends(get_current_user)):
|
|
return {"id": notification_id, "read": True}
|
|
|
|
|
|
@router.get("/updates/status")
|
|
def wesp_updates_status(_user: User = Depends(get_current_user)):
|
|
return {
|
|
"initialized": False,
|
|
"check_enabled": False,
|
|
"current_version": "1.0.0-orchestrator",
|
|
"update_available": False,
|
|
"pending_version": None,
|
|
"pending_name": None,
|
|
"pending_body": None,
|
|
"published_at": None,
|
|
"last_check_at": None,
|
|
"is_running": False,
|
|
"is_updating": False,
|
|
"update_progress": None,
|
|
"last_update_state": {"status": "idle", "note": "orchestrator deploy"},
|
|
"gitea_configured": False,
|
|
"restart_configured": False,
|
|
"gitea_url": None,
|
|
"gitea_repo": None,
|
|
}
|
|
|
|
|
|
class UpdatesInstallIn(BaseModel):
|
|
version: str | None = None
|
|
|
|
|
|
@router.post("/updates/install")
|
|
def wesp_updates_install(_payload: UpdatesInstallIn, _user: User = Depends(get_current_user)):
|
|
return {
|
|
"status": "error",
|
|
"message": "Автообновление недоступно на orchestrator — используйте деплой Docker.",
|
|
}
|
|
|
|
|
|
@router.get("/updates/check")
|
|
def wesp_updates_check(_user: User = Depends(get_current_user)):
|
|
return {
|
|
"update_available": False,
|
|
"message": "Проверка обновлений недоступна на orchestrator.",
|
|
}
|