Compare commits

..
5 changed files with 31 additions and 7 deletions
+1 -1
View File
@@ -72,8 +72,8 @@ class Datasource:
)
new_points = [
(
processed_agent_data.longitude,
processed_agent_data.latitude,
processed_agent_data.longitude,
processed_agent_data.road_state,
processed_agent_data.user_id
)
+1 -2
View File
@@ -87,8 +87,7 @@ class MapViewApp(App):
self.car_markers[user_id].lat = lat
self.car_markers[user_id].lon = lon
if user_id == 1:
self.mapview.center_on(lat, lon)
self.mapview.center_on(lat, lon)
def set_pothole_marker(self, point):
if isinstance(point, dict):
+3 -2
View File
@@ -7,5 +7,6 @@ CREATE TABLE processed_agent_data (
z FLOAT,
latitude FLOAT,
longitude FLOAT,
timestamp TIMESTAMP
);
timestamp TIMESTAMP,
visible BOOLEAN
);
+22 -2
View File
@@ -8,12 +8,13 @@ from sqlalchemy import (
Integer,
String,
Float,
Boolean,
DateTime,
)
from sqlalchemy.sql import select
from database import metadata, SessionLocal
from schemas import ProcessedAgentData, ProcessedAgentDataInDB
from schemas import ProcessedAgentData, ProcessedAgentDataInDB, WebSocketData
# FastAPI app setup
app = FastAPI()
@@ -30,6 +31,7 @@ processed_agent_data = Table(
Column("latitude", Float),
Column("longitude", Float),
Column("timestamp", DateTime),
Column("visible", Boolean),
)
# WebSocket subscriptions
@@ -57,7 +59,24 @@ async def websocket_endpoint(websocket: WebSocket, user_id: int):
# receive forever
while True:
await websocket.receive_text()
data = await websocket.receive_text()
try:
if (data):
ws_data = WebSocketData.model_validate(json.loads(data))
session = SessionLocal()
update_query = (
processed_agent_data.update()
.where(processed_agent_data.c.id == ws_data.id)
.values(visible=False)
).returning(processed_agent_data)
res = session.execute(update_query).fetchone()
if (not res):
session.rollback()
raise Exception("Error while websocket PUT")
session.commit()
finally:
session.close()
except WebSocketDisconnect:
subscriptions.remove(websocket)
@@ -81,6 +100,7 @@ def ProcessedAgentData_to_td(data: List[ProcessedAgentData]):
"latitude": item.agent_data.gps.latitude,
"longitude": item.agent_data.gps.longitude,
"timestamp": item.agent_data.timestamp,
"visible": True,
}
for item in data
]
+4
View File
@@ -49,3 +49,7 @@ class AgentData(BaseModel):
class ProcessedAgentData(BaseModel):
road_state: str
agent_data: AgentData
class WebSocketData(BaseModel):
id: int