offline track

This commit is contained in:
2026-06-19 11:09:20 +03:00
parent 4891933879
commit 8812cf9b40
23 changed files with 924 additions and 57 deletions
+30 -1
View File
@@ -72,6 +72,15 @@ class TrackPointsBody(BaseModel):
points: list[TrackPoint] = Field(default_factory=list)
class TrackSyncBody(BaseModel):
device_id: str
track_id: Optional[int] = None
started_at: Optional[float] = None
points: list[TrackPoint] = Field(default_factory=list)
finish: bool = False
label: Optional[str] = None
class CommandBody(BaseModel):
from_device_id: str
to_device_id: str
@@ -193,6 +202,26 @@ def tracks_finish(
raise HTTPException(400, detail=str(e)) from e
@app.post("/api/tracks/sync")
def tracks_sync(
body: TrackSyncBody,
x_lora_client: Optional[str] = Header(None, alias=ANDROID_CLIENT_HEADER),
):
_require_android(x_lora_client)
try:
points = [p.model_dump(exclude_none=True) for p in body.points]
return storage.sync_track(
body.device_id,
points,
track_id=body.track_id,
started_at=body.started_at,
finish=body.finish,
label=body.label,
)
except ValueError as e:
raise HTTPException(400, detail=str(e)) from e
@app.get("/api/tracks")
def tracks_list(
device_id: Optional[str] = None,
@@ -379,7 +408,7 @@ def health():
return {
"ok": status["db_ok"],
"ts": time.time(),
"api_build": "2026-06-16i",
"api_build": "2026-06-19a",
**status,
**elevation_status(),
}