Parsovani vzdusneho prostoru
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user