lepsi podpora strankovani, bugfixing, vyhledavani
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
fastapi==0.115.7
|
fastapi==0.115.7
|
||||||
fastapi-jwt[authlib]==0.3.0
|
fastapi-jwt[authlib]==0.3.0
|
||||||
bcrypt
|
bcrypt==4.2.1
|
||||||
fastapi-mail==1.4.2
|
fastapi-mail==1.4.2
|
||||||
strawberry-graphql[fastapi]==0.258.0
|
strawberry-graphql[fastapi]==0.258.0
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import re
|
import re
|
||||||
from fastapi import HTTPException, BackgroundTasks
|
from fastapi import HTTPException, BackgroundTasks
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from typing import Optional
|
|
||||||
from pydantic import BaseModel, Field, model_validator
|
from pydantic import BaseModel, Field, model_validator
|
||||||
from background_jobs.send_email import send_email
|
from background_jobs.send_email import send_email
|
||||||
from database.models import User
|
from database.models import User
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ from fastapi import BackgroundTasks, Depends, Security
|
|||||||
from fastapi_jwt import JwtAuthorizationCredentials
|
from fastapi_jwt import JwtAuthorizationCredentials
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from strawberry.fastapi import BaseContext
|
from strawberry.fastapi import BaseContext
|
||||||
|
|
||||||
from logger import log
|
|
||||||
from database import async_session, models
|
from database import async_session, models
|
||||||
from jwt import access_security
|
from jwt import access_security
|
||||||
|
|
||||||
@@ -18,12 +16,11 @@ class GraphQLContext(BaseContext):
|
|||||||
jwt_auth_credentials: JwtAuthorizationCredentials
|
jwt_auth_credentials: JwtAuthorizationCredentials
|
||||||
background_tasks: BackgroundTasks
|
background_tasks: BackgroundTasks
|
||||||
|
|
||||||
|
|
||||||
async def setup_graphql_context(credentials: JwtAuthorizationCredentials = Security(access_security)):
|
async def setup_graphql_context(credentials: JwtAuthorizationCredentials = Security(access_security)):
|
||||||
user_id = credentials['id'] if credentials else None
|
user_id = credentials['id'] if credentials else None
|
||||||
organization_ids = set()
|
organization_ids = set()
|
||||||
|
|
||||||
log.error(user_id)
|
|
||||||
|
|
||||||
if user_id:
|
if user_id:
|
||||||
async with async_session() as db:
|
async with async_session() as db:
|
||||||
organization_ids = set((await db.scalars(
|
organization_ids = set((await db.scalars(
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import strawberry
|
import strawberry
|
||||||
|
from strawberry import Info
|
||||||
from .helpers.filters import get_filters
|
from .helpers.filters import get_filters
|
||||||
from .helpers.pagination import PaginationWindow
|
from .helpers.pagination import PaginationWindow
|
||||||
from .resolvers.aircraft import AircraftMutationResolver, AircraftQueryResolver
|
from .resolvers.aircraft import AircraftMutationResolver, AircraftQueryResolver
|
||||||
@@ -11,10 +12,11 @@ from ..extensions.field.pagination import OffsetPagination
|
|||||||
@strawberry.type
|
@strawberry.type
|
||||||
class AircraftQueries:
|
class AircraftQueries:
|
||||||
@strawberry.field(extensions=[OffsetPagination(item_type=Aircraft), AuthenticatedOnly()])
|
@strawberry.field(extensions=[OffsetPagination(item_type=Aircraft), AuthenticatedOnly()])
|
||||||
async def aircrafts(root, info) -> PaginationWindow[Aircraft]:
|
async def aircrafts(root, info: Info, search: str | None = None) -> PaginationWindow[Aircraft]:
|
||||||
return AircraftQueryResolver().get_query(
|
return AircraftQueryResolver().get_query(
|
||||||
info.context.user_id,
|
info.context.user_id,
|
||||||
organization_ids=info.context.organization_ids
|
organization_ids=info.context.organization_ids,
|
||||||
|
search=search
|
||||||
)
|
)
|
||||||
|
|
||||||
@strawberry.field(extensions=[AllowPublicAccess()])
|
@strawberry.field(extensions=[AllowPublicAccess()])
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ class FlightQueries:
|
|||||||
async def flights(
|
async def flights(
|
||||||
root, info,
|
root, info,
|
||||||
username: str | None = None,
|
username: str | None = None,
|
||||||
|
search: str | None = None,
|
||||||
event_id: int | None = None,
|
event_id: int | None = None,
|
||||||
public: bool | None = False,
|
public: bool | None = False,
|
||||||
copilot_id: int | None = None,
|
copilot_id: int | None = None,
|
||||||
@@ -28,7 +29,8 @@ class FlightQueries:
|
|||||||
only_public=public,
|
only_public=public,
|
||||||
copilot_id=copilot_id,
|
copilot_id=copilot_id,
|
||||||
aircraft_id=aircraft_id,
|
aircraft_id=aircraft_id,
|
||||||
point_of_interest_id=point_of_interest_id
|
point_of_interest_id=point_of_interest_id,
|
||||||
|
search=search
|
||||||
)
|
)
|
||||||
|
|
||||||
@strawberry.field(extensions=[AllowPublicAccess()])
|
@strawberry.field(extensions=[AllowPublicAccess()])
|
||||||
|
|||||||
@@ -1,17 +1,19 @@
|
|||||||
import strawberry
|
import strawberry
|
||||||
from strawberry.types import Info
|
from strawberry.types import Info
|
||||||
from graphql_schema.entities.helpers.filters import get_detail_filters
|
from graphql_schema.entities.helpers.filters import get_detail_filters
|
||||||
|
from graphql_schema.entities.helpers.pagination import PaginationWindow
|
||||||
from graphql_schema.entities.resolvers.flight_plan import FlightPlanMutationResolver, FlightPlanQueryResolver
|
from graphql_schema.entities.resolvers.flight_plan import FlightPlanMutationResolver, FlightPlanQueryResolver
|
||||||
from graphql_schema.entities.types.mutation_input import CreateFlightPlanInput, EditFlightPlanInput
|
from graphql_schema.entities.types.mutation_input import CreateFlightPlanInput, EditFlightPlanInput
|
||||||
from graphql_schema.entities.types.types import FlightPlan
|
from graphql_schema.entities.types.types import FlightPlan
|
||||||
from graphql_schema.extensions.field.auth import AuthenticatedOnly, AllowPublicAccess
|
from graphql_schema.extensions.field.auth import AuthenticatedOnly, AllowPublicAccess
|
||||||
|
from graphql_schema.extensions.field.pagination import OffsetPagination
|
||||||
|
|
||||||
|
|
||||||
@strawberry.type
|
@strawberry.type
|
||||||
class FlightPlanQueries:
|
class FlightPlanQueries:
|
||||||
@strawberry.field(extensions=[AuthenticatedOnly()])
|
@strawberry.field(extensions=[OffsetPagination(item_type=FlightPlan), AuthenticatedOnly()])
|
||||||
async def flight_plans(root, info: Info) -> list[FlightPlan]:
|
async def flight_plans(root, info: Info, search: str | None = None) -> PaginationWindow[FlightPlan]:
|
||||||
return await FlightPlanQueryResolver().get_list(info.context.user_id)
|
return FlightPlanQueryResolver().get_query(info.context.user_id, search=search)
|
||||||
|
|
||||||
@strawberry.field(extensions=[AllowPublicAccess()])
|
@strawberry.field(extensions=[AllowPublicAccess()])
|
||||||
async def flight_plan(
|
async def flight_plan(
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
from operator import or_
|
from sqlalchemy import and_, or_
|
||||||
from typing import Set, Optional
|
|
||||||
from sqlalchemy import and_
|
|
||||||
from database import models
|
from database import models
|
||||||
from database.transaction import get_session
|
from database.transaction import get_session
|
||||||
from graphql_schema.context import GraphQLContext
|
from graphql_schema.context import GraphQLContext
|
||||||
@@ -19,26 +17,33 @@ class AircraftQueryResolver(BaseQueryResolver):
|
|||||||
user_id: int | None = None,
|
user_id: int | None = None,
|
||||||
object_id: int | None = None,
|
object_id: int | None = None,
|
||||||
order_by: list | None = None,
|
order_by: list | None = None,
|
||||||
organization_ids: Optional[Set[int]] = None,
|
organization_ids: set[int] | None = None,
|
||||||
*args,
|
*args,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
filters = []
|
filters = []
|
||||||
search = {}
|
|
||||||
if kwargs.get("call_sign"):
|
if kwargs.get("call_sign"):
|
||||||
filters.append(models.Aircraft.call_sign == kwargs['call_sign'])
|
filters.append(models.Aircraft.call_sign == kwargs['call_sign'])
|
||||||
|
|
||||||
if kwargs.get("search"):
|
|
||||||
search['search'] = kwargs.pop("search", None)
|
|
||||||
|
|
||||||
query = super().get_query(
|
query = super().get_query(
|
||||||
object_id=object_id,
|
object_id=object_id,
|
||||||
only_my=False,
|
only_my=False,
|
||||||
only_public=kwargs.get("only_public", False),
|
only_public=kwargs.get("only_public", False),
|
||||||
order_by=order_by,
|
order_by=order_by,
|
||||||
filters=filters,
|
filters=filters,
|
||||||
**search
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if kwargs.get("search"):
|
||||||
|
search = kwargs["search"]
|
||||||
|
query = query.filter(
|
||||||
|
or_(
|
||||||
|
models.Aircraft.call_sign.contains(search),
|
||||||
|
models.Aircraft.manufacturer.contains(search),
|
||||||
|
models.Aircraft.model.contains(search),
|
||||||
|
)
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
if organization_ids:
|
if organization_ids:
|
||||||
query = (
|
query = (
|
||||||
query.filter(
|
query.filter(
|
||||||
|
|||||||
@@ -70,6 +70,14 @@ class FlightQueryResolver(BaseQueryResolver):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if kwargs.get("search"):
|
||||||
|
search = kwargs["search"]
|
||||||
|
query = (
|
||||||
|
query.filter(
|
||||||
|
models.Flight.name.contains(search)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
if kwargs.get('username'):
|
if kwargs.get('username'):
|
||||||
query = (
|
query = (
|
||||||
query.join(models.Flight.created_by)
|
query.join(models.Flight.created_by)
|
||||||
|
|||||||
@@ -42,6 +42,12 @@ class FlightPlanQueryResolver(BaseQueryResolver):
|
|||||||
.filter(models.User.public_username == kwargs['username'])
|
.filter(models.User.public_username == kwargs['username'])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if kwargs.get("search"):
|
||||||
|
search = kwargs["search"]
|
||||||
|
query = (
|
||||||
|
query.filter(models.FlightPlan.name.contains(search))
|
||||||
|
)
|
||||||
|
|
||||||
return query
|
return query
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user