Skip to content
This repository has been archived by the owner on Jul 30, 2024. It is now read-only.

Commit

Permalink
Update geometry api
Browse files Browse the repository at this point in the history
  • Loading branch information
profetia committed Nov 17, 2022
1 parent 495cdc9 commit bcc1cce
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 14 deletions.
29 changes: 20 additions & 9 deletions horras_backend/api/v1/geometry.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
from typing import Dict, List
from typing import Dict, List, Tuple
from fastapi import APIRouter
import horras_backend.model.geometry.queries as queries
from horras_backend.model.heatmap.ranges import TimeRange

router = APIRouter()

def convert_to_dict(data: List[Dict], field: str) -> Dict:
return {item[field]: item['_count']['_all'] for item in data}
def convert_to_dict(data: List[Dict], field: str) -> Dict[Tuple[int, int], Dict[str, int]]:
return {(item[f"{field}_lat_group"], item[f"{field}_lng_group"]): {
"id": item[f"{field}_district"],
"count": item["_count"]["_all"]
} for item in data}

@router.get("/")
async def geometry(query: TimeRange):
Expand All @@ -16,20 +19,28 @@ async def geometry(query: TimeRange):
departure_records: List[Dict] = await queries.find_records_group(
date_lower, date_upper, clock_lower, clock_upper, "departure"
)
departure_dict: Dict[int, int] = convert_to_dict(departure_records, 'starting_district')

departure_dict: Dict[Tuple[int, int], Dict[str, int]] = convert_to_dict(departure_records, 'starting')

arrive_records: List[Dict] = await queries.find_records_group(
date_lower, date_upper, clock_lower, clock_upper, "arrive"
)
arrive_dict: Dict[int, int] = convert_to_dict(arrive_records, 'dest_district')
arrive_dict: Dict[Tuple[int, int], Dict[str, int]] = convert_to_dict(arrive_records, 'dest')

final_dict: Dict[int, Dict] = {}
final_dict: Dict[Tuple[int, int], Dict[str, int]] = {}
for key in set(departure_dict.keys()).union(set(arrive_dict.keys())):
final_dict[key] = {
'start_num': departure_dict.get(key, 0),
'dest_num': arrive_dict.get(key, 0)
'id': arrive_dict[key]['id'] if key in arrive_dict else departure_dict[key]['id'],
'start_num': departure_dict[key]['count'] if key in departure_dict else 0,
'dest_num': arrive_dict[key]['count'] if key in arrive_dict else 0,
}

records: List[Dict[str, int]] = [{'id': key, **value} for key, value in final_dict.items()]
records: List[Dict[str, int]] = [
{
'lat': key[0],
'lng': key[1],
**value,
} for key, value in final_dict.items()
]

return records
9 changes: 5 additions & 4 deletions horras_backend/model/geometry/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ async def find_records_group(date_lower: int,
if kind == "departure":
date: str = 'departure_date'
time: str = 'departure_time'
group: str = 'starting_district'
group: str = ['starting_district', 'starting_lng_group', 'starting_lat_group']
else:
date: str = 'arrive_date '
time: str = 'arrive_time'
group: str = 'dest_district'
group: str = ['dest_district', 'dest_lng_group', 'dest_lat_group']

return await prisma.horras.group_by(by=[group], where={
return await prisma.horras.group_by(by=group, where={
'AND': [
{
date: {
Expand All @@ -30,4 +30,5 @@ async def find_records_group(date_lower: int,
}
}
]
}, count=True)
}, count=True)

6 changes: 6 additions & 0 deletions postgres/init.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
ALTER TABLE "Horras" ADD starting_lng_group FLOAT;
ALTER TABLE "Horras" ADD starting_lat_group FLOAT;
ALTER TABLE "Horras" ADD dest_lng_group FLOAT;
ALTER TABLE "Horras" ADD dest_lat_group FLOAT;

UPDATE "Horras" SET dest_lat_group = CAST(dest_lat AS DECIMAL(10, 2)), dest_lng_group = CAST(dest_lng AS DECIMAL(10, 2)), starting_lat_group = CAST(starting_lat AS DECIMAL(10, 2)), starting_lng_group = CAST(starting_lng AS DECIMAL(10, 2));
5 changes: 4 additions & 1 deletion prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ model Horras {
dest_district Int
departure_date Int
arrive_date Int
dest_lng_group Float
dest_lat_group Float
starting_lng_group Float
starting_lat_group Float
@@index([departure_date, arrive_date, departure_time, arrive_time, starting_district, dest_district])
}

0 comments on commit bcc1cce

Please sign in to comment.