Refresh token, spolecne lety s copilotem, lazy typ
This commit is contained in:
@@ -1,17 +1,41 @@
|
||||
from typing import List
|
||||
from typing import List, Annotated, TYPE_CHECKING
|
||||
import strawberry
|
||||
from sqlalchemy import select
|
||||
from database.models import Copilot
|
||||
from database import models
|
||||
from graphql_schema.dataloaders.flight import flights_by_copilot_dataloader
|
||||
from graphql_schema.sqlalchemy_to_strawberry_type import strawberry_sqlalchemy_type
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .flight import Flight
|
||||
|
||||
@strawberry_sqlalchemy_type(Copilot)
|
||||
@strawberry_sqlalchemy_type(models.Copilot)
|
||||
class CopilotType:
|
||||
pass
|
||||
async def load_flights(root):
|
||||
return await flights_by_copilot_dataloader.load(root.id)
|
||||
|
||||
flights: List[Annotated["Flight", strawberry.lazy('.flight')]] = strawberry.field(resolver=load_flights)
|
||||
|
||||
|
||||
def get_base_query(user_id: int):
|
||||
return (
|
||||
select(models.Copilot)
|
||||
.filter(models.Copilot.created_by_id == user_id)
|
||||
.filter(models.Copilot.deleted.is_(False))
|
||||
.order_by(models.Copilot.id.desc())
|
||||
)
|
||||
|
||||
|
||||
@strawberry.type
|
||||
class CopilotQueries:
|
||||
@strawberry.field
|
||||
async def copilots(root, info) -> List[CopilotType]:
|
||||
return (await info.context.db.scalars(select(Copilot))).all()
|
||||
return (await info.context.db.scalars(
|
||||
get_base_query(info.context.user_id)
|
||||
)).all()
|
||||
|
||||
@strawberry.field
|
||||
async def copilot(root, info, id: int) -> CopilotType:
|
||||
return (await info.context.db.scalars(
|
||||
get_base_query(info.context.user_id)
|
||||
.filter(models.Copilot.id == id)
|
||||
)).one()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from datetime import timedelta
|
||||
from typing import List, Optional
|
||||
from typing import List, Optional, Annotated, TYPE_CHECKING
|
||||
import strawberry
|
||||
from sqlalchemy import select, delete
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
@@ -17,7 +17,8 @@ from graphql_schema.entities.poi import PointOfInterest
|
||||
from graphql_schema.sqlalchemy_to_strawberry_type import strawberry_sqlalchemy_type, strawberry_sqlalchemy_input
|
||||
|
||||
|
||||
# Bude se hodit: https://strawberry.rocks/docs/types/lazy
|
||||
if TYPE_CHECKING:
|
||||
from .copilot import CopilotType
|
||||
|
||||
|
||||
@strawberry.input()
|
||||
@@ -74,7 +75,7 @@ class Flight:
|
||||
return 0
|
||||
|
||||
duration_min_calculated: int = strawberry.field(resolver=duration_min_calculated)
|
||||
copilot: Optional[CopilotType] = strawberry.field(resolver=load_copilot)
|
||||
copilot: Optional[Annotated["CopilotType", strawberry.lazy(".copilot")]] = strawberry.field(resolver=load_copilot)
|
||||
aircraft: Aircraft = strawberry.field(resolver=load_aircraft)
|
||||
takeoff_airport: Airport = strawberry.field(resolver=load_takeoff_airport)
|
||||
landing_airport: Airport = strawberry.field(resolver=load_landing_airport)
|
||||
@@ -186,6 +187,7 @@ class EditFlightMutation:
|
||||
|
||||
@strawberry.mutation
|
||||
async def edit_flight(self, info, id: int, input: EditFlightInput) -> Flight:
|
||||
# TODO: umoznit editovat jen vlastni lety!
|
||||
flight = await models.Flight.update(info.context.db, id=id, data=input.to_dict())
|
||||
|
||||
if input.track is not None:
|
||||
|
||||
@@ -39,7 +39,7 @@ class PhotoQueries:
|
||||
|
||||
@strawberry.type
|
||||
class UploadPhotoMutation:
|
||||
@strawberry_sqlalchemy_input(models.Photo, exclude_fields=["id", "filename"])
|
||||
@strawberry_sqlalchemy_input(models.Photo, exclude_fields=["id", "filename", "is_flight_cover"])
|
||||
class UploadPhotoInput:
|
||||
photo: Upload
|
||||
|
||||
@@ -59,6 +59,8 @@ class UploadPhotoMutation:
|
||||
"created_by_id": info.context.user_id,
|
||||
}, db_session=info.context.db)
|
||||
|
||||
await info.context.db.flush()
|
||||
|
||||
return created_photo
|
||||
|
||||
|
||||
|
||||
@@ -82,7 +82,11 @@ class EditPointOfInterestMutation:
|
||||
# TODO: kontrola organizace
|
||||
# TODO: kontrola opravneni na akci
|
||||
|
||||
poi = (await get_base_query(info.context.user_id, only_my=True).filter(models.Photo.id == id)).one()
|
||||
poi = (
|
||||
await info.context.db.scalars(
|
||||
get_base_query(info.context.user_id, only_my=True)
|
||||
.filter(models.PointOfInterest.id == id))
|
||||
).one()
|
||||
return await models.PointOfInterest.update(info.context.db, obj=poi, data=input.to_dict())
|
||||
|
||||
|
||||
@@ -91,6 +95,6 @@ class DeletePointOfInterestMutation:
|
||||
|
||||
@strawberry.mutation
|
||||
async def delete_point_of_interest(self, info, id: int) -> PointOfInterest:
|
||||
poi = (await get_base_query(info.context.user_id, only_my=True).filter(models.Photo.id == id)).one()
|
||||
poi = (await get_base_query(info.context.user_id, only_my=True).filter(models.PointOfInterest.id == id)).one()
|
||||
|
||||
return await models.PointOfInterest.update(info.context.db, obj=poi, data=dict(deleted=True))
|
||||
|
||||
Reference in New Issue
Block a user