Refresh token, spolecne lety s copilotem, lazy typ

This commit is contained in:
Michal Kváček
2023-07-29 23:27:24 +02:00
parent 77dd5538d3
commit fcd80f20e8
11 changed files with 133 additions and 38 deletions
+29 -5
View File
@@ -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()
+5 -3
View File
@@ -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:
+3 -1
View File
@@ -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
+6 -2
View File
@@ -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))