Sprava eventu a organizaci, bugfixing a drobny refaktoring

This commit is contained in:
Michal Kváček
2023-09-20 13:26:34 +02:00
parent 1760dba99d
commit 037c7daef6
17 changed files with 557 additions and 41 deletions
+24 -5
View File
@@ -26,12 +26,14 @@ from graphql_schema.sqlalchemy_to_strawberry_type import strawberry_sqlalchemy_t
from upload_utils import get_public_url
from .helpers.flight import (
handle_aircraft_save, handle_track_edit, handle_copilots_edit, handle_weather_info, get_airports,
handle_upload_gpx, handle_airport_changed, add_terrain_elevation
handle_upload_gpx, handle_airport_changed, add_terrain_elevation, handle_combobox_save
)
from ..dataloaders.event import event_dataloader
from ..types import ComboboxInput
if TYPE_CHECKING:
from .copilot import Copilot
from .event import Event
@strawberry_sqlalchemy_type(models.FlightTrack)
@@ -135,8 +137,13 @@ class Flight:
async def load_copilots(root):
return await flight_copilots_dataloader.load(root.id)
@authenticated_user_only(raise_when_unauthorized=False, return_value_unauthorized=[])
async def load_event(root):
return await event_dataloader.load(root.event_id)
duration_min_calculated: int = strawberry.field(resolver=duration_min_calculated)
copilots: Optional[List[Annotated["Copilot", strawberry.lazy(".copilot")]]] = strawberry.field(resolver=load_copilots) # noqa
event: Optional[Annotated["Event", strawberry.lazy(".event")]] = strawberry.field(resolver=load_event)
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)
@@ -259,6 +266,7 @@ class EditFlightMutation:
aircraft: Optional[ComboboxInput] = None
landing_airport: Optional[ComboboxInput] = None
takeoff_airport: Optional[ComboboxInput] = None
event: Optional[ComboboxInput] = None
@strawberry.mutation
@authenticated_user_only()
@@ -271,10 +279,6 @@ class EditFlightMutation:
get_base_query(user_id=user_id, is_auth=bool(user_id)).filter(models.Flight.id == id)
)).one()
takeoff_airport, landing_airport = await get_airports(
db, input.takeoff_airport, input.landing_airport, info.context.user_id,
)
data = input.to_dict()
if input.gpx_track is not None:
@@ -283,6 +287,11 @@ class EditFlightMutation:
add_terrain_elevation, flight=flight.as_dict(), gpx_filename=data['gpx_track_filename']
)
if input.takeoff_airport and input.landing_airport:
takeoff_airport, landing_airport = await get_airports(
db, input.takeoff_airport, input.landing_airport, info.context.user_id,
)
if (
(input.takeoff_airport and input.takeoff_airport.id != flight.takeoff_airport_id) or
(data.get('takeoff_datetime') and data.get('takeoff_datetime') != flight.takeoff_datetime)
@@ -306,10 +315,20 @@ class EditFlightMutation:
type_="landing",
input_datetime=data.get('landing_datetime')
)
# ///////////// konec editace s letistem - je to hnusny
if input.aircraft is not None:
data['aircraft_id'] = await handle_aircraft_save(db, user_id, input.aircraft)
if input.event is not None:
data['event_id'] = await handle_combobox_save(
db,
model=models.Event,
input=input.event,
extra_data={"description": "", "is_public": False},
user_id=info.context.user_id
)
if input.track is not None:
await handle_track_edit(db=db, flight=flight, track=input.track, user_id=user_id)