Uprava razeni fotek, drobnosti
This commit is contained in:
@@ -26,7 +26,10 @@ class QueryBuilder:
|
|||||||
if only_public and hasattr(self.model, "is_public"):
|
if only_public and hasattr(self.model, "is_public"):
|
||||||
query = query.filter(self.model.is_public.is_(True))
|
query = query.filter(self.model.is_public.is_(True))
|
||||||
elif hasattr(self.model, "created_by_id") and created_by_id:
|
elif hasattr(self.model, "created_by_id") and created_by_id:
|
||||||
query = query.filter(self.model.created_by_id == created_by_id)
|
query = query.filter(or_(
|
||||||
|
self.model.created_by_id.is_(None),
|
||||||
|
self.model.created_by_id == created_by_id
|
||||||
|
))
|
||||||
|
|
||||||
if order_by:
|
if order_by:
|
||||||
query = query.order_by(*order_by)
|
query = query.order_by(*order_by)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ from strawberry.dataloader import DataLoader
|
|||||||
from database import models
|
from database import models
|
||||||
from graphql_schema.dataloaders.base import MultiModelsDataloader
|
from graphql_schema.dataloaders.base import MultiModelsDataloader
|
||||||
|
|
||||||
|
|
||||||
aircrafts_from_organization_dataloader = DataLoader(
|
aircrafts_from_organization_dataloader = DataLoader(
|
||||||
load_fn=MultiModelsDataloader(
|
load_fn=MultiModelsDataloader(
|
||||||
models.Aircraft,
|
models.Aircraft,
|
||||||
@@ -43,14 +42,17 @@ public_flights_by_copilot_dataloader = DataLoader(
|
|||||||
flights_by_aircraft_dataloader = DataLoader(
|
flights_by_aircraft_dataloader = DataLoader(
|
||||||
load_fn=MultiModelsDataloader(
|
load_fn=MultiModelsDataloader(
|
||||||
models.Flight,
|
models.Flight,
|
||||||
relationship_column=models.Flight.aircraft_id
|
relationship_column=models.Flight.aircraft_id,
|
||||||
|
order_by=[models.Flight.takeoff_datetime.desc()]
|
||||||
).load, cache=False)
|
).load, cache=False)
|
||||||
|
|
||||||
flight_by_poi_dataloader = DataLoader(
|
flight_by_poi_dataloader = DataLoader(
|
||||||
load_fn=MultiModelsDataloader(
|
load_fn=MultiModelsDataloader(
|
||||||
models.Flight,
|
models.Flight,
|
||||||
relationship_column=models.PointOfInterest.id,
|
relationship_column=models.PointOfInterest.id,
|
||||||
extra_join=[models.Flight.track, models.PointOfInterest]).load,
|
order_by=[models.Flight.takeoff_datetime.desc()],
|
||||||
|
extra_join=[models.Flight.track, models.PointOfInterest]
|
||||||
|
).load,
|
||||||
cache=False
|
cache=False
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -58,7 +60,9 @@ flights_by_event_dataloader = DataLoader(
|
|||||||
load_fn=MultiModelsDataloader(
|
load_fn=MultiModelsDataloader(
|
||||||
models.Flight,
|
models.Flight,
|
||||||
relationship_column=models.Event.id,
|
relationship_column=models.Event.id,
|
||||||
extra_join=[models.Flight.event]).load,
|
extra_join=[models.Flight.event],
|
||||||
|
order_by=[models.Flight.takeoff_datetime.desc()]
|
||||||
|
).load,
|
||||||
cache=False
|
cache=False
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -67,7 +71,9 @@ public_flights_by_event_dataloader = DataLoader(
|
|||||||
models.Flight,
|
models.Flight,
|
||||||
relationship_column=models.Event.id,
|
relationship_column=models.Event.id,
|
||||||
filters=[models.Flight.is_public.is_(True)],
|
filters=[models.Flight.is_public.is_(True)],
|
||||||
extra_join=[models.Flight.event]).load,
|
order_by=[models.Flight.takeoff_datetime.desc()],
|
||||||
|
extra_join=[models.Flight.event]
|
||||||
|
).load,
|
||||||
cache=False
|
cache=False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -32,10 +32,14 @@ class PhotoQueryResolver(BaseQueryResolver):
|
|||||||
only_public: Optional[bool] = False,
|
only_public: Optional[bool] = False,
|
||||||
*args, **kwargs
|
*args, **kwargs
|
||||||
):
|
):
|
||||||
|
|
||||||
query = super().get_query(
|
query = super().get_query(
|
||||||
user_id, object_id, order_by,
|
user_id, object_id, order_by,
|
||||||
aircraft_id=kwargs.get("aircraft_id"),
|
**{
|
||||||
point_of_interest_id=kwargs.get("point_of_interest_id")
|
field: kwargs[field]
|
||||||
|
for field in ("aircraft_id", "point_of_interest_id", "flight_id")
|
||||||
|
if kwargs.get(field)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
if kwargs.get("public"):
|
if kwargs.get("public"):
|
||||||
@@ -46,7 +50,7 @@ class PhotoQueryResolver(BaseQueryResolver):
|
|||||||
|
|
||||||
if kwargs.get("copilot_id"):
|
if kwargs.get("copilot_id"):
|
||||||
query = (
|
query = (
|
||||||
query.join(models.copilot_has_photo, )
|
query.join(models.copilot_has_photo)
|
||||||
.filter(models.copilot_has_photo.c.copilot_id == kwargs['copilot_id'])
|
.filter(models.copilot_has_photo.c.copilot_id == kwargs['copilot_id'])
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -131,10 +135,6 @@ class PhotoMutationResolver(BaseMutationResolver):
|
|||||||
extra_data={"description": ""}
|
extra_data={"description": ""}
|
||||||
)
|
)
|
||||||
|
|
||||||
if input.is_aircraft:
|
|
||||||
flight = (await db.scalars(select(models.Flight).filter(models.Flight.id == photo.flight_id))).one()
|
|
||||||
data['aircraft_id'] = flight.aircraft_id
|
|
||||||
|
|
||||||
if input.copilots is not None:
|
if input.copilots is not None:
|
||||||
await db.execute(delete(models.copilot_has_photo).filter_by(photo_id=id))
|
await db.execute(delete(models.copilot_has_photo).filter_by(photo_id=id))
|
||||||
for copilot in input.copilots:
|
for copilot in input.copilots:
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class CreateCopilotInput(BaseGraphqlInputType):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@strawberry_sqlalchemy_input(model=models.Copilot, exclude_fields=["id"])
|
@strawberry_sqlalchemy_input(model=models.Copilot, exclude_fields=["id"], all_optional=True)
|
||||||
class EditCopilotInput(BaseGraphqlInputType):
|
class EditCopilotInput(BaseGraphqlInputType):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -68,12 +68,12 @@ class EditPhotoInput:
|
|||||||
name: Optional[str] = None
|
name: Optional[str] = None
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
point_of_interest: Optional[ComboboxInput] = None
|
point_of_interest: Optional[ComboboxInput] = None
|
||||||
is_aircraft: Optional[bool] = None
|
|
||||||
copilots: Optional[List[ComboboxInput]] = None
|
copilots: Optional[List[ComboboxInput]] = None
|
||||||
|
aircraft_id: Optional[int] = None
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
return {
|
return {
|
||||||
key: getattr(self, key) for key in ('name', 'description')
|
key: getattr(self, key) for key in ('name', 'description', 'aircraft_id')
|
||||||
if getattr(self, key) is not None
|
if getattr(self, key) is not None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,6 @@ class Photo:
|
|||||||
resolver=lambda root: poi_dataloader.load(root.point_of_interest_id)
|
resolver=lambda root: poi_dataloader.load(root.point_of_interest_id)
|
||||||
)
|
)
|
||||||
copilots: List[Copilot] = strawberry.field(resolver=lambda root: copilots_in_photo_dataloader.load(root.id))
|
copilots: List[Copilot] = strawberry.field(resolver=lambda root: copilots_in_photo_dataloader.load(root.id))
|
||||||
is_aircraft: bool = strawberry.field(resolver=lambda root: bool(root.aircraft_id))
|
|
||||||
flight: Flight = strawberry.field(resolver=lambda root: flight_dataloader.load(root.flight_id))
|
flight: Flight = strawberry.field(resolver=lambda root: flight_dataloader.load(root.flight_id))
|
||||||
adjustment: Optional[PhotoAdjustment] = strawberry.field(
|
adjustment: Optional[PhotoAdjustment] = strawberry.field(
|
||||||
resolver=lambda root: photo_adjustment_dataloader.load(root.id)
|
resolver=lambda root: photo_adjustment_dataloader.load(root.id)
|
||||||
@@ -163,9 +162,6 @@ class Copilot:
|
|||||||
|
|
||||||
@strawberry_sqlalchemy_type(models.Aircraft)
|
@strawberry_sqlalchemy_type(models.Aircraft)
|
||||||
class Aircraft:
|
class Aircraft:
|
||||||
# photo_url: Optional[str] = strawberry.field(
|
|
||||||
# resolver=lambda root: get_public_url(f"aircrafts/{root.photo_filename}") if root.photo_filename else None
|
|
||||||
# )
|
|
||||||
flights: List[Flight] = strawberry.field(resolver=lambda root: flights_by_aircraft_dataloader.load(root.id))
|
flights: List[Flight] = strawberry.field(resolver=lambda root: flights_by_aircraft_dataloader.load(root.id))
|
||||||
organization: Optional[Organization] = strawberry.field(
|
organization: Optional[Organization] = strawberry.field(
|
||||||
resolver=lambda root: organizations_dataloader.load(root.organization_id)
|
resolver=lambda root: organizations_dataloader.load(root.organization_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user