88 lines
2.3 KiB
Python
88 lines
2.3 KiB
Python
# https://fastapi.tiangolo.com/how-to/graphql/#graphql-with-strawberry
|
|
|
|
import typing
|
|
import strawberry
|
|
from strawberry.fastapi import GraphQLRouter
|
|
import database as db
|
|
from logger import get_logger
|
|
logger = get_logger(__name__)
|
|
|
|
def get_sites():
|
|
conn = db.connect_to_db()
|
|
try:
|
|
with db.connect_to_db() as conn:
|
|
sites = db.get_cellsites(conn)
|
|
ql_list = []
|
|
for site in sites:
|
|
print(site)
|
|
ql_list.append(
|
|
Cellsite(
|
|
id=site['id'],
|
|
lat=site['lat'],
|
|
lon=site['lon']
|
|
)
|
|
)
|
|
return ql_list
|
|
except Exception as e:
|
|
logger.error(f"Error fetching cellsite {id}: {e}", exc_info=True)
|
|
return []
|
|
finally:
|
|
conn.close()
|
|
|
|
def get_incidents():
|
|
conn = db.connect_to_db()
|
|
try:
|
|
with conn:
|
|
incidents = db.get_incidents(conn)
|
|
ql_list = []
|
|
for incident in incidents:
|
|
print(incident)
|
|
ql_list.append(
|
|
Incident(
|
|
id=incident['id'],
|
|
text=incident['text'],
|
|
severity=incident['severity'],
|
|
status=incident['status'],
|
|
created_by=incident['created_by'],
|
|
site_id=incident['site_id']
|
|
)
|
|
)
|
|
return ql_list
|
|
except Exception as e:
|
|
logger.error(f"Error fetching cellsite {id}: {e}", exc_info=True)
|
|
return []
|
|
finally:
|
|
conn.close()
|
|
|
|
@strawberry.type
|
|
class Cellsite:
|
|
id: int
|
|
lat: float
|
|
lon: float
|
|
|
|
# TODO: Add incident and join with cellsite
|
|
|
|
# TODO: Query a site ID and get all related incidents
|
|
# TODO: Query an incident and get all related site id
|
|
|
|
@strawberry.type
|
|
class Incident:
|
|
id: int
|
|
text: str
|
|
severity: int
|
|
status: str
|
|
created_by: str
|
|
# site_id: typing.List[Cellsite]
|
|
site_id: int
|
|
|
|
@strawberry.type
|
|
class Query:
|
|
cellsites: typing.List[Cellsite] = strawberry.field(resolver=get_sites)
|
|
incidents: typing.List[Incident] = strawberry.field(resolver=get_incidents)
|
|
|
|
|
|
|
|
schema = strawberry.Schema(query=Query)
|
|
|
|
graphql_app = GraphQLRouter(schema)
|