🔧 fix(store.py): rename list_components function to get_components to improve semantics and clarity
🔧 fix(service.py): add search, status, tags, and sort parameters to query_components function to enable filtering and sorting of components ✨ feat(service.py): add build_search_filter_conditions method to build filter conditions for search query in query_components function
This commit is contained in:
parent
c9d22071cd
commit
f9b57f90a7
2 changed files with 41 additions and 2 deletions
|
|
@ -71,11 +71,15 @@ def create_component(
|
|||
|
||||
|
||||
@router.get("/components/", response_model=ListComponentResponseModel)
|
||||
def list_components(
|
||||
def get_components(
|
||||
search: Optional[List[str]] = Query(None),
|
||||
status: Optional[str] = Query(None),
|
||||
is_component: Optional[bool] = Query(None),
|
||||
tags: Optional[List[str]] = Query(None),
|
||||
sort: Optional[List[str]] = Query(None),
|
||||
filter_by_user: bool = Query(False),
|
||||
page: int = 1,
|
||||
limit: int = 10,
|
||||
is_component: Optional[bool] = Query(None),
|
||||
store_service: StoreService = Depends(get_store_service),
|
||||
store_api_Key: Optional[str] = Depends(get_optional_user_store_api_key),
|
||||
):
|
||||
|
|
@ -88,6 +92,10 @@ def list_components(
|
|||
limit=limit,
|
||||
filter_by_user=filter_by_user,
|
||||
is_component=is_component,
|
||||
search=search,
|
||||
status=status,
|
||||
tags=tags,
|
||||
sort=sort,
|
||||
)
|
||||
|
||||
comp_count = store_service.count_components(
|
||||
|
|
|
|||
|
|
@ -201,9 +201,23 @@ class StoreService(Service):
|
|||
results = self._get(self.components_url, api_key, params)
|
||||
return results[0].get("count", 0)
|
||||
|
||||
@staticmethod
|
||||
def build_search_filter_conditions(query: str):
|
||||
# instead of build the param ?search=query, we will build the filter
|
||||
# that will use _icontains (case insensitive)
|
||||
conditions = {"_or": []}
|
||||
conditions["_or"].append({"name": {"_icontains": query}})
|
||||
conditions["_or"].append({"description": {"_icontains": query}})
|
||||
conditions["_or"].append({"tags": {"tags_id": {"name": {"_icontains": query}}}})
|
||||
return conditions
|
||||
|
||||
def query_components(
|
||||
self,
|
||||
api_key: str,
|
||||
search: Optional[str] = None,
|
||||
status: Optional[str] = None,
|
||||
tags: Optional[List[str]] = None,
|
||||
sort: Optional[List[str]] = None,
|
||||
page: int = 1,
|
||||
limit: int = 15,
|
||||
fields: Optional[List[str]] = None,
|
||||
|
|
@ -213,8 +227,25 @@ class StoreService(Service):
|
|||
params = {"page": page, "limit": limit}
|
||||
# ?aggregate[count]=likes
|
||||
params["fields"] = ",".join(fields) if fields else ",".join(self.default_fields)
|
||||
|
||||
if sort:
|
||||
params["sort"] = ",".join(sort)
|
||||
|
||||
filter_conditions = []
|
||||
|
||||
if search is not None:
|
||||
search_conditions = self.build_search_filter_conditions(search)
|
||||
filter_conditions.append(search_conditions)
|
||||
|
||||
if status:
|
||||
filter_conditions.append({"status": {"_eq": status}})
|
||||
|
||||
if tags:
|
||||
filter_conditions.append({"tags": {"tags_id": {"name": {"_in": tags}}}})
|
||||
|
||||
if is_component is not None:
|
||||
filter_conditions.append({"is_component": {"_eq": is_component}})
|
||||
|
||||
if is_component is not None:
|
||||
filter_conditions.append({"is_component": {"_eq": is_component}})
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue