feat: remote client deel 1
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,39 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, Header
|
||||
|
||||
from backend.app.api.schemas import (
|
||||
RemoteClientHeartbeatRequest,
|
||||
RemoteClientItem,
|
||||
RemoteClientListResponse,
|
||||
RemoteClientRegisterRequest,
|
||||
)
|
||||
from backend.app.dependencies import get_remote_client_service
|
||||
from backend.app.services.remote_client_service import RemoteClientService
|
||||
|
||||
router = APIRouter(prefix="/clients")
|
||||
|
||||
|
||||
@router.get("", response_model=RemoteClientListResponse)
|
||||
async def list_clients(
|
||||
service: RemoteClientService = Depends(get_remote_client_service),
|
||||
) -> RemoteClientListResponse:
|
||||
return service.list_clients()
|
||||
|
||||
|
||||
@router.post("/register", response_model=RemoteClientItem)
|
||||
async def register_client(
|
||||
request: RemoteClientRegisterRequest,
|
||||
authorization: str | None = Header(default=None),
|
||||
service: RemoteClientService = Depends(get_remote_client_service),
|
||||
) -> RemoteClientItem:
|
||||
return service.register_client(authorization=authorization, request=request)
|
||||
|
||||
|
||||
@router.post("/heartbeat", response_model=RemoteClientItem)
|
||||
async def heartbeat(
|
||||
request: RemoteClientHeartbeatRequest,
|
||||
authorization: str | None = Header(default=None),
|
||||
service: RemoteClientService = Depends(get_remote_client_service),
|
||||
) -> RemoteClientItem:
|
||||
return service.record_heartbeat(authorization=authorization, request=request)
|
||||
@@ -238,3 +238,41 @@ class SearchResultItem(BaseModel):
|
||||
class SearchResponse(BaseModel):
|
||||
items: list[SearchResultItem]
|
||||
truncated: bool
|
||||
|
||||
|
||||
class RemoteClientShare(BaseModel):
|
||||
key: str
|
||||
label: str
|
||||
|
||||
|
||||
class RemoteClientRegisterRequest(BaseModel):
|
||||
client_id: str
|
||||
display_name: str
|
||||
platform: str
|
||||
agent_version: str
|
||||
endpoint: str
|
||||
shares: list[RemoteClientShare]
|
||||
|
||||
|
||||
class RemoteClientHeartbeatRequest(BaseModel):
|
||||
client_id: str
|
||||
agent_version: str
|
||||
|
||||
|
||||
class RemoteClientItem(BaseModel):
|
||||
client_id: str
|
||||
display_name: str
|
||||
platform: str
|
||||
agent_version: str
|
||||
endpoint: str
|
||||
shares: list[RemoteClientShare]
|
||||
last_seen: str | None = None
|
||||
status: str
|
||||
last_error: str | None = None
|
||||
reachable_at: str | None = None
|
||||
created_at: str
|
||||
updated_at: str
|
||||
|
||||
|
||||
class RemoteClientListResponse(BaseModel):
|
||||
items: list[RemoteClientItem]
|
||||
|
||||
Reference in New Issue
Block a user