Add clear asset GPS endpoint + UI

- DELETE /api/assets/{id}/gps: clears lat/lng to NULL
- GET /api/assets/{id}: asset lookup by ID
- GET /api/assets/search?machine_id=: asset lookup by machine ID
- Export & Admin page: Clear Asset GPS card with lookup + confirmation
- Tests: 204 success + 404 not found
This commit is contained in:
Leo
2026-05-22 23:36:40 -04:00
parent ae20c0507f
commit 9794d8076c
3 changed files with 137 additions and 0 deletions
+45
View File
@@ -1583,6 +1583,51 @@ def export_checkins_csv(asset_id: Optional[int] = Query(None)):
)
# ─── Asset GPS Management ──────────────────────────────────────────────────
@app.get("/api/assets/{asset_id}")
def get_asset_admin(asset_id: int):
"""Get a single asset by ID (admin)."""
conn = get_db()
row = conn.execute("SELECT * FROM assets WHERE id = ?", (asset_id,)).fetchone()
conn.close()
if row is None:
raise HTTPException(status_code=404, detail="Asset not found")
return row_to_dict(row)
@app.get("/api/assets/search")
def search_assets_admin(machine_id: str = Query(...)):
"""Search for an asset by machine_id (admin)."""
conn = get_db()
row = conn.execute(
"SELECT * FROM assets WHERE machine_id = ?", (machine_id,)
).fetchone()
conn.close()
if row is None:
raise HTTPException(status_code=404, detail="Asset not found")
return row_to_dict(row)
@app.delete("/api/assets/{asset_id}/gps", status_code=204)
def clear_asset_gps(asset_id: int):
"""Clear GPS coordinates from an asset (sets latitude/longitude to NULL)."""
conn = get_db()
existing = conn.execute("SELECT id, name FROM assets WHERE id = ?", (asset_id,)).fetchone()
if existing is None:
conn.close()
raise HTTPException(status_code=404, detail="Asset not found")
conn.execute(
"UPDATE assets SET latitude = NULL, longitude = NULL, updated_at = datetime('now') WHERE id = ?",
(asset_id,),
)
_log_activity(conn, "updated", "asset", asset_id,
f"GPS data cleared for '{existing['name']}'")
conn.commit()
conn.close()
# ─── Icon Upload API ────────────────────────────────────────────────────────