generated from Grigo/AndroidTemplate
added refference point
This commit is contained in:
@@ -81,6 +81,41 @@ class TrackSyncBody(BaseModel):
|
||||
label: Optional[str] = None
|
||||
|
||||
|
||||
class ReferencePointStartBody(BaseModel):
|
||||
device_id: str
|
||||
label: Optional[str] = None
|
||||
lat: Optional[float] = None
|
||||
lon: Optional[float] = None
|
||||
meta: Optional[dict[str, Any]] = None
|
||||
|
||||
|
||||
class ReferencePointSample(BaseModel):
|
||||
ts: Optional[float] = None
|
||||
lat: Optional[float] = None
|
||||
lon: Optional[float] = None
|
||||
rssi: Optional[float] = None
|
||||
role: Optional[str] = None
|
||||
meta: Optional[Any] = None
|
||||
preset_id: Optional[str] = None
|
||||
preset_name: Optional[str] = None
|
||||
params: Optional[dict[str, Any]] = None
|
||||
|
||||
|
||||
class ReferencePointSamplesBody(BaseModel):
|
||||
samples: list[ReferencePointSample] = Field(default_factory=list)
|
||||
|
||||
|
||||
class MacroPresetBody(BaseModel):
|
||||
id: Optional[str] = None
|
||||
name: str
|
||||
description: Optional[str] = None
|
||||
params: Optional[dict[str, Any]] = None
|
||||
lines: Optional[list[str]] = None
|
||||
scope: Optional[str] = None
|
||||
device_role: Optional[str] = None
|
||||
enabled: bool = True
|
||||
|
||||
|
||||
class CommandBody(BaseModel):
|
||||
from_device_id: str
|
||||
to_device_id: str
|
||||
@@ -238,6 +273,109 @@ def tracks_get(track_id: int):
|
||||
raise HTTPException(404, detail=str(e)) from e
|
||||
|
||||
|
||||
@app.post("/api/reference-points/start")
|
||||
def reference_points_start(
|
||||
body: ReferencePointStartBody,
|
||||
x_lora_client: Optional[str] = Header(None, alias=ANDROID_CLIENT_HEADER),
|
||||
):
|
||||
_require_android(x_lora_client)
|
||||
try:
|
||||
return storage.start_reference_point_session(
|
||||
body.device_id, body.label, body.lat, body.lon, body.meta
|
||||
)
|
||||
except ValueError as e:
|
||||
raise HTTPException(400, detail=str(e)) from e
|
||||
|
||||
|
||||
@app.post("/api/reference-points/{session_id}/samples")
|
||||
def reference_points_samples(
|
||||
session_id: int,
|
||||
body: ReferencePointSamplesBody,
|
||||
x_lora_client: Optional[str] = Header(None, alias=ANDROID_CLIENT_HEADER),
|
||||
):
|
||||
_require_android(x_lora_client)
|
||||
try:
|
||||
samples = [p.model_dump(exclude_none=True) for p in body.samples]
|
||||
return storage.add_reference_point_samples(session_id, samples)
|
||||
except ValueError as e:
|
||||
raise HTTPException(400, detail=str(e)) from e
|
||||
|
||||
|
||||
@app.post("/api/reference-points/{session_id}/finish")
|
||||
def reference_points_finish(
|
||||
session_id: int,
|
||||
x_lora_client: Optional[str] = Header(None, alias=ANDROID_CLIENT_HEADER),
|
||||
):
|
||||
_require_android(x_lora_client)
|
||||
try:
|
||||
return storage.finish_reference_point_session(session_id)
|
||||
except ValueError as e:
|
||||
raise HTTPException(400, detail=str(e)) from e
|
||||
|
||||
|
||||
@app.get("/api/reference-points")
|
||||
def reference_points_list(
|
||||
device_id: Optional[str] = None,
|
||||
limit: int = Query(50, ge=1, le=200),
|
||||
):
|
||||
return storage.list_reference_point_sessions(device_id, limit)
|
||||
|
||||
|
||||
@app.get("/api/reference-points/{session_id}")
|
||||
def reference_points_get(session_id: int):
|
||||
try:
|
||||
return storage.get_reference_point_session(session_id)
|
||||
except ValueError as e:
|
||||
raise HTTPException(404, detail=str(e)) from e
|
||||
|
||||
|
||||
@app.get("/api/macro-presets")
|
||||
def macro_presets_list(include_disabled: bool = False):
|
||||
return storage.list_macro_presets(include_disabled)
|
||||
|
||||
|
||||
@app.post("/api/macro-presets")
|
||||
def macro_presets_post(body: MacroPresetBody):
|
||||
try:
|
||||
return storage.upsert_macro_preset(
|
||||
body.id,
|
||||
body.name,
|
||||
body.description,
|
||||
body.params,
|
||||
body.lines,
|
||||
body.scope,
|
||||
body.device_role,
|
||||
body.enabled,
|
||||
)
|
||||
except ValueError as e:
|
||||
raise HTTPException(400, detail=str(e)) from e
|
||||
|
||||
|
||||
@app.patch("/api/macro-presets/{preset_id}")
|
||||
def macro_presets_patch(preset_id: str, body: MacroPresetBody):
|
||||
try:
|
||||
return storage.upsert_macro_preset(
|
||||
preset_id,
|
||||
body.name,
|
||||
body.description,
|
||||
body.params,
|
||||
body.lines,
|
||||
body.scope,
|
||||
body.device_role,
|
||||
body.enabled,
|
||||
)
|
||||
except ValueError as e:
|
||||
raise HTTPException(400, detail=str(e)) from e
|
||||
|
||||
|
||||
@app.delete("/api/macro-presets/{preset_id}")
|
||||
def macro_presets_delete(preset_id: str):
|
||||
try:
|
||||
return storage.delete_macro_preset(preset_id)
|
||||
except ValueError as e:
|
||||
raise HTTPException(404, detail=str(e)) from e
|
||||
|
||||
|
||||
def _require_android(x_lora_client: Optional[str]) -> None:
|
||||
if (x_lora_client or "").strip().lower() != ANDROID_CLIENT_VALUE:
|
||||
raise HTTPException(
|
||||
|
||||
Reference in New Issue
Block a user