From 8947f9116e38c2b8991ded357aa57b58e8c5710e Mon Sep 17 00:00:00 2001 From: Marcel Schwarz Date: Sun, 27 Dec 2020 15:52:26 +0100 Subject: [PATCH] Return more data on TopStations endpoints --- projects/project-3/backend/api_database.py | 50 ++++++++++++------- .../project-3/backend/routers/dashboard.py | 6 ++- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/projects/project-3/backend/api_database.py b/projects/project-3/backend/api_database.py index bb6e5ed..e3bd246 100644 --- a/projects/project-3/backend/api_database.py +++ b/projects/project-3/backend/api_database.py @@ -43,30 +43,44 @@ def get_dashboard(station_id): def get_dashboard_to(station_id, start_date, end_date): query = """ SELECT - u.start_station_name AS startStationName, - u.end_station_name AS endStationName, - count(*) AS number, - round(avg(u.duration)) AS avgDuration - FROM usage_stats u - WHERE u.start_station_id = ? AND date(u.start_date, 'unixepoch') BETWEEN ? AND ? - GROUP BY u.end_station_name - ORDER BY number DESC - LIMIT 3""" + topPoints.*, + b.lat AS stationLat, + b.lon AS stationLon + FROM ( + SELECT + u.end_station_name AS stationName, + u.end_station_id AS stationId, + count(*) AS number, + round(avg(u.duration)) AS avgDuration + FROM usage_stats u + WHERE u.start_station_id = ? AND date(u.start_date, 'unixepoch') BETWEEN ? AND ? + GROUP BY u.end_station_name + ORDER BY number DESC + LIMIT 3 + ) as topPoints + JOIN bike_points b ON b.id_num = topPoints.stationId""" return get_db_connection().execute(query, (station_id, start_date, end_date)).fetchall() def get_dashboard_from(station_id, start_date, end_date): query = """ SELECT - u.start_station_name AS startStationName, - u.end_station_name AS endStationName, - count(*) AS number, - round(avg(u.duration)) AS avgDuration - FROM usage_stats u - WHERE u.end_station_id = ? AND date(u.start_date, 'unixepoch') BETWEEN ? AND ? - GROUP BY u.start_station_name - ORDER BY number DESC - LIMIT 3""" + topPoints.*, + b.lat AS stationLat, + b.lon AS stationLon + FROM ( + SELECT + u.start_station_name AS stationName, + u.start_station_id AS stationId, + count(*) AS number, + round(avg(u.duration)) AS avgDuration + FROM usage_stats u + WHERE u.end_station_id = ? AND date(u.start_date, 'unixepoch') BETWEEN ? AND ? + GROUP BY u.start_station_name + ORDER BY number DESC + LIMIT 3 + ) as topPoints + JOIN bike_points b ON b.id_num = topPoints.stationId""" return get_db_connection().execute(query, (station_id, start_date, end_date)).fetchall() diff --git a/projects/project-3/backend/routers/dashboard.py b/projects/project-3/backend/routers/dashboard.py index dc78e32..95a4c36 100644 --- a/projects/project-3/backend/routers/dashboard.py +++ b/projects/project-3/backend/routers/dashboard.py @@ -30,8 +30,10 @@ def get_general_dashboard(station_id: int): class StationDashboardTopStationsEntry(BaseModel): - startStationName: str - endStationName: str + stationName: str + stationId: int + stationLat: float + stationLon: float number: int avgDuration: int