Add new function to get traffic

This commit is contained in:
Urtzi Alfaro
2025-07-23 23:25:50 +02:00
parent 741d8d3bd8
commit 31c30354bc
5 changed files with 447 additions and 40 deletions

View File

@@ -90,8 +90,40 @@ class TrafficService:
average_speed=record.average_speed,
source=record.source
) for record in db_records]
# If not in database, fetch from API and store
logger.debug("Fetching historical data from MADRID OPEN DATA")
traffic_data = await self.madrid_client.get_historical_traffic(
latitude, longitude, start_date, end_date
)
if traffic_data:
# Store in database for future use
try:
for data in traffic_data:
traffic_record = TrafficData(
id = id,
location_id = location_id,
date = data.get('date', datetime.now()),
traffic_volume = data.get('traffic_volume'),
pedestrian_count = data.get('pedestrian_count'),
congestion_level = data.get('congestion_level'),
average_speed = data.get('average_speed'),
source = "Madrid Open Data",
raw_data = str(data),
created_at = data.get('created_at'),
)
db.add(traffic_record)
await db.commit()
logger.debug("Historical data stored in database", count=len(traffic_record))
except Exception as db_error:
logger.warning("Failed to store historical data in database", error=str(db_error))
await db.rollback()
return [TrafficDataResponse(**item) for item in traffic_record]
else:
logger.debug("No historical traffic data found in database")
logger.warning("No historical traffic data received")
return []
except Exception as e: