From 03c9f2d189d2e35003848ebca3b39ba7d9a4ce23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Thu, 1 Feb 2024 08:32:10 +0100 Subject: [PATCH] Vyhledavani v POI --- src/graphql_schema/entities/poi.py | 3 ++- src/graphql_schema/entities/resolvers/base.py | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/graphql_schema/entities/poi.py b/src/graphql_schema/entities/poi.py index 8ce4375..28160ff 100644 --- a/src/graphql_schema/entities/poi.py +++ b/src/graphql_schema/entities/poi.py @@ -21,10 +21,11 @@ class PointOfInterestQueries: async def points_of_interest( root, info, limit: int, offset: int = 0, + search: Optional[str] = None, public: bool = False ) -> PaginationWindow[PointOfInterest]: query = BaseQueryResolver(PointOfInterest, models.PointOfInterest).get_query( - info.context.user_id, only_public=public + info.context.user_id, only_public=public, search=search, ) return await get_pagination_window( query=query, diff --git a/src/graphql_schema/entities/resolvers/base.py b/src/graphql_schema/entities/resolvers/base.py index 2c25604..7b5155a 100644 --- a/src/graphql_schema/entities/resolvers/base.py +++ b/src/graphql_schema/entities/resolvers/base.py @@ -1,4 +1,6 @@ from typing import Optional, Type, TypeVar, Generic, List + +from sqlalchemy import or_ from sqlalchemy.ext.asyncio import AsyncSession from database import models from database.query_builder import QueryBuilder @@ -42,6 +44,18 @@ class BaseQueryResolver(BaseResolver): raise AssertionError(f"Model {self.model} has no ID column! Cannot query by ID!") query = query.filter(self.model.id == object_id) + search = kwargs.pop("search", None) + if search: + search_clauses = [] + if hasattr(self.model, "name"): + search_clauses.append(self.model.name.contains(search)) + + if hasattr(self.model, "description"): + search_clauses.append(self.model.description.contains(search)) + + if search_clauses: + query = query.filter(or_(*search_clauses)) + if kwargs: query = query.filter_by(**kwargs) @@ -101,4 +115,3 @@ class BaseMutationResolver(BaseResolver): await db.delete(model) return self.graphql_type(**model.as_dict()) -