Parsovani vzdusneho prostoru

This commit is contained in:
Michal Kváček
2024-03-21 16:40:23 +01:00
parent 7c81069e96
commit ed35de96c9
11 changed files with 7316 additions and 15 deletions
+27
View File
@@ -0,0 +1,27 @@
from typing import List, Optional
import strawberry
from database import models
from decorators.error_logging import error_logging
from graphql_schema.entities.resolvers.base import BaseQueryResolver
from graphql_schema.entities.types.types import Airspace
@strawberry.type
class AirspaceQueries:
@strawberry.field()
@error_logging
async def airspaces(
root, info, country: Optional[str] = None, types: Optional[list[str]] = None
) -> List[Airspace]:
filters = []
if country:
filters.append(models.AirspaceItem.country == country)
if types:
filters.append(models.AirspaceItem.type.in_(types))
return await BaseQueryResolver(Airspace, models.AirspaceItem).get_list(
info.context.user_id,
country=country,
filters=filters
)
@@ -24,21 +24,24 @@ class AircraftQueryResolver(BaseQueryResolver):
*args,
**kwargs,
):
filters = {}
filters = []
search = {}
if object_id:
filters['object_id'] = object_id
filters.append(models.Aircraft.id == object_id)
if not organization_ids:
filters['user_id'] = user_id
filters.append(models.Aircraft.created_by_id == user_id)
if kwargs.get("call_sign"):
filters['call_sign'] = kwargs["call_sign"]
filters.append(models.Aircraft.call_sign == kwargs['call_sign'])
if kwargs.get("search"):
filters['search'] = kwargs.pop("search", None)
search['search'] = kwargs.pop("search", None)
query = super().get_query(
only_my=False,
only_public=kwargs.get("only_public", False),
order_by=order_by,
**filters
filters=filters,
**search
)
if organization_ids:
query = (
@@ -38,6 +38,7 @@ class BaseQueryResolver(BaseResolver):
only_my: Optional[bool] = False,
include_others_public: Optional[bool] = False,
url_slug: Optional[str] = None,
filters: Optional[list] = None,
**kwargs,
):
query = self.query_builder.get_simple_query(
@@ -56,8 +57,8 @@ class BaseQueryResolver(BaseResolver):
query = self._handle_search(query, kwargs.pop("search", None))
if kwargs:
query = query.filter_by(**kwargs)
if filters:
query = query.filter(**kwargs)
return query
@@ -48,6 +48,25 @@ class Airport:
pass
@strawberry.type
class Airspace:
id: int
name: str
country: str
type: str
lower_limit: str
upper_limit: str
center: Optional[tuple[float, float]]
radius: Optional[float]
bounds: list[tuple[float, float]]
map_center: Optional[Point] = strawberry.field(
resolver=lambda root: Point(lat=root.center[0], lng=root.center[1]) if root.center else None
)
map_bounds: list[Point] = strawberry.field(
resolver=lambda root: [Point(lat=point[0], lng=point[1]) for point in root.bounds]
)
@strawberry_sqlalchemy_type(models.FlightTrack)
class FlightTrack:
point_of_interest: Optional[PointOfInterest] = strawberry.field(
+2
View File
@@ -1,6 +1,7 @@
from strawberry.tools import merge_types
from .entities.aircraft import AircraftQueries
from .entities.airport import AirportQueries
from .entities.airspace import AirspaceQueries
from .entities.copilot import CopilotQueries
from .entities.event import EventQueries
from .entities.flight import FlightQueries
@@ -16,6 +17,7 @@ from .entities.user import UserQueries
Query = merge_types('Query', (
AircraftQueries,
AirportQueries,
AirspaceQueries,
FlightQueries,
CopilotQueries,
UserQueries,