lepsi podpora strankovani, bugfixing, vyhledavani

This commit is contained in:
Michal Kváček
2026-01-06 22:03:49 +01:00
parent d794208193
commit 888351baac
9 changed files with 42 additions and 21 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
fastapi==0.115.7
fastapi-jwt[authlib]==0.3.0
bcrypt
bcrypt==4.2.1
fastapi-mail==1.4.2
strawberry-graphql[fastapi]==0.258.0
-1
View File
@@ -1,7 +1,6 @@
import re
from fastapi import HTTPException, BackgroundTasks
from sqlalchemy import select
from typing import Optional
from pydantic import BaseModel, Field, model_validator
from background_jobs.send_email import send_email
from database.models import User
+1 -4
View File
@@ -4,8 +4,6 @@ from fastapi import BackgroundTasks, Depends, Security
from fastapi_jwt import JwtAuthorizationCredentials
from sqlalchemy import select
from strawberry.fastapi import BaseContext
from logger import log
from database import async_session, models
from jwt import access_security
@@ -18,12 +16,11 @@ class GraphQLContext(BaseContext):
jwt_auth_credentials: JwtAuthorizationCredentials
background_tasks: BackgroundTasks
async def setup_graphql_context(credentials: JwtAuthorizationCredentials = Security(access_security)):
user_id = credentials['id'] if credentials else None
organization_ids = set()
log.error(user_id)
if user_id:
async with async_session() as db:
organization_ids = set((await db.scalars(
+4 -2
View File
@@ -1,4 +1,5 @@
import strawberry
from strawberry import Info
from .helpers.filters import get_filters
from .helpers.pagination import PaginationWindow
from .resolvers.aircraft import AircraftMutationResolver, AircraftQueryResolver
@@ -11,10 +12,11 @@ from ..extensions.field.pagination import OffsetPagination
@strawberry.type
class AircraftQueries:
@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(
info.context.user_id,
organization_ids=info.context.organization_ids
organization_ids=info.context.organization_ids,
search=search
)
@strawberry.field(extensions=[AllowPublicAccess()])
+3 -1
View File
@@ -15,6 +15,7 @@ class FlightQueries:
async def flights(
root, info,
username: str | None = None,
search: str | None = None,
event_id: int | None = None,
public: bool | None = False,
copilot_id: int | None = None,
@@ -28,7 +29,8 @@ class FlightQueries:
only_public=public,
copilot_id=copilot_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()])
+5 -3
View File
@@ -1,17 +1,19 @@
import strawberry
from strawberry.types import Info
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.types.mutation_input import CreateFlightPlanInput, EditFlightPlanInput
from graphql_schema.entities.types.types import FlightPlan
from graphql_schema.extensions.field.auth import AuthenticatedOnly, AllowPublicAccess
from graphql_schema.extensions.field.pagination import OffsetPagination
@strawberry.type
class FlightPlanQueries:
@strawberry.field(extensions=[AuthenticatedOnly()])
async def flight_plans(root, info: Info) -> list[FlightPlan]:
return await FlightPlanQueryResolver().get_list(info.context.user_id)
@strawberry.field(extensions=[OffsetPagination(item_type=FlightPlan), AuthenticatedOnly()])
async def flight_plans(root, info: Info, search: str | None = None) -> PaginationWindow[FlightPlan]:
return FlightPlanQueryResolver().get_query(info.context.user_id, search=search)
@strawberry.field(extensions=[AllowPublicAccess()])
async def flight_plan(
@@ -1,6 +1,4 @@
from operator import or_
from typing import Set, Optional
from sqlalchemy import and_
from sqlalchemy import and_, or_
from database import models
from database.transaction import get_session
from graphql_schema.context import GraphQLContext
@@ -19,26 +17,33 @@ class AircraftQueryResolver(BaseQueryResolver):
user_id: int | None = None,
object_id: int | None = None,
order_by: list | None = None,
organization_ids: Optional[Set[int]] = None,
organization_ids: set[int] | None = None,
*args,
**kwargs,
):
filters = []
search = {}
if kwargs.get("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(
object_id=object_id,
only_my=False,
only_public=kwargs.get("only_public", False),
order_by=order_by,
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:
query = (
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'):
query = (
query.join(models.Flight.created_by)
@@ -42,6 +42,12 @@ class FlightPlanQueryResolver(BaseQueryResolver):
.filter(models.User.public_username == kwargs['username'])
)
if kwargs.get("search"):
search = kwargs["search"]
query = (
query.filter(models.FlightPlan.name.contains(search))
)
return query