Vyhledavani v POI

This commit is contained in:
Michal Kváček
2024-02-01 08:32:10 +01:00
parent 77b9552a9d
commit 03c9f2d189
2 changed files with 16 additions and 2 deletions
+2 -1
View File
@@ -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,
+14 -1
View File
@@ -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())