inital v4
This commit is contained in:
58
v4/server/app/models.py
Normal file
58
v4/server/app/models.py
Normal file
@@ -0,0 +1,58 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime, timezone
|
||||
from enum import Enum
|
||||
from typing import Any, Literal
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
def utc_now_iso() -> str:
|
||||
return datetime.now(timezone.utc).isoformat()
|
||||
|
||||
|
||||
class Platform(str, Enum):
|
||||
windows = "windows"
|
||||
pwa = "pwa"
|
||||
web = "web"
|
||||
unknown = "unknown"
|
||||
|
||||
|
||||
class DeviceHello(BaseModel):
|
||||
device_id: str = Field(min_length=3, max_length=128)
|
||||
platform: Platform = Platform.unknown
|
||||
version: str = "0.0.0"
|
||||
hostname: str = ""
|
||||
capabilities: list[str] = Field(default_factory=list)
|
||||
|
||||
|
||||
class ConnectedDevice(BaseModel):
|
||||
device_id: str
|
||||
platform: Platform
|
||||
version: str
|
||||
hostname: str = ""
|
||||
capabilities: list[str] = Field(default_factory=list)
|
||||
connected_at: str = Field(default_factory=utc_now_iso)
|
||||
last_seen_at: str = Field(default_factory=utc_now_iso)
|
||||
|
||||
|
||||
class DispatchRequest(BaseModel):
|
||||
action: Literal["notify", "wallpaper_set", "overlay_show", "sync_settings", "ping"]
|
||||
data: dict[str, Any] = Field(default_factory=dict)
|
||||
target_scope: Literal["all", "windows", "pwa", "web", "device_ids"] = "all"
|
||||
device_ids: list[str] = Field(default_factory=list)
|
||||
|
||||
|
||||
class DispatchResult(BaseModel):
|
||||
command_id: str
|
||||
delivered_to: list[str] = Field(default_factory=list)
|
||||
skipped: list[str] = Field(default_factory=list)
|
||||
|
||||
|
||||
class UpdateManifest(BaseModel):
|
||||
version: str = "0.0.0"
|
||||
download_url: str = ""
|
||||
sha256: str = ""
|
||||
notes: str = ""
|
||||
published_at: str = Field(default_factory=utc_now_iso)
|
||||
|
||||
Reference in New Issue
Block a user