Uklid v alembic migracich, error logging, upravy kvuli autorizaci

This commit is contained in:
Michal Kváček
2023-08-14 15:01:13 +02:00
parent bc260a2a8b
commit 97295c17c0
38 changed files with 203 additions and 957 deletions
+18 -2
View File
@@ -1,9 +1,13 @@
from datetime import timedelta
from functools import wraps
from typing import List, Optional, Annotated, TYPE_CHECKING, Tuple
import strawberry
from fastapi import HTTPException
from sqlalchemy import select
from starlette.status import HTTP_401_UNAUTHORIZED
from strawberry.file_uploads import Upload
from database import models
from decorators.endpoints import authenticated_user_only
from decorators.error_logging import error_logging
from graphql_schema.dataloaders import copilots_dataloader
from graphql_schema.dataloaders.aircraft import aircraft_dataloader
@@ -119,6 +123,9 @@ class FlightQueries:
@strawberry.field
async def flights(root, info, username: Optional[str] = None) -> List[Flight]:
if not info.context.user_id and not username:
raise HTTPException(HTTP_401_UNAUTHORIZED)
query = (
get_base_query(user_id=info.context.user_id, username=username, is_auth=bool(info.context.user_id))
.order_by(models.Flight.id.desc())
@@ -128,6 +135,9 @@ class FlightQueries:
@strawberry.field
@error_logging
async def flight(root, info, id: int, username: Optional[str] = None) -> Flight:
if not info.context.user_id and not username:
raise HTTPException(HTTP_401_UNAUTHORIZED)
query = (
get_base_query(user_id=info.context.user_id, username=username, is_auth=bool(info.context.user_id))
.filter(models.Flight.id == id)
@@ -163,6 +173,7 @@ class CreateFlightMutation:
takeoff_airport: ComboboxInput
@strawberry.mutation
@authenticated_user_only
async def create_flight(self, info, input: CreateFlightInput) -> Flight:
db = info.context.db
aircraft_id = await handle_aircraft_save(db, info.context.user_id, input.aircraft)
@@ -187,6 +198,7 @@ class CreateFlightMutation:
})
@strawberry.type
class EditFlightMutation:
@strawberry_sqlalchemy_input(models.Flight, exclude_fields=[
@@ -202,6 +214,7 @@ class EditFlightMutation:
takeoff_airport: Optional[ComboboxInput] = None
@strawberry.mutation
@authenticated_user_only
async def edit_flight(self, info, id: int, input: EditFlightInput) -> Flight:
db = info.context.db
user_id = info.context.user_id
@@ -212,8 +225,11 @@ class EditFlightMutation:
)).one()
data = input.to_dict()
data['takeoff_datetime'] = data['takeoff_datetime'].astimezone()
data['landing_datetime'] = data['landing_datetime'].astimezone()
if input.takeoff_datetime:
data['takeoff_datetime'] = data['takeoff_datetime'].astimezone()
if input.landing_datetime:
data['landing_datetime'] = data['landing_datetime'].astimezone()
if input.gpx_track is not None:
# TODO: poresit validaci uploadovaneho souboru!
+8 -4
View File
@@ -8,6 +8,7 @@ from sqlalchemy.exc import NoResultFound
from strawberry.file_uploads import Upload
from database import models
from database.models import User
from decorators.endpoints import authenticated_user_only
from decorators.error_logging import error_logging
from graphql_schema.sqlalchemy_to_strawberry_type import strawberry_sqlalchemy_type, strawberry_sqlalchemy_input
from upload_utils import handle_file_upload, delete_file
@@ -45,14 +46,16 @@ class UserQueries:
)).one()
@strawberry.field
@authenticated_user_only
# @error_logging
async def logged_user(root, info) -> User:
if not info.context.user_id:
raise GraphQLError("Not authenticated")
return (await info.context.db.scalars(
user = (await info.context.db.scalars(
select(models.User).filter_by(id=info.context.user_id)
)).one()
print(user)
return user
@strawberry.type
class EditUserMutation:
@@ -68,6 +71,7 @@ class EditUserMutation:
title_image: Optional[Upload] = None
@strawberry.mutation
@authenticated_user_only
async def edit_logged_user(root, info, input: EditUserInput) -> User:
user = (await info.context.db.scalars(
select(models.User).filter_by(id=info.context.user_id)