diff --git a/src/backend/langflow/api/v1/store.py b/src/backend/langflow/api/v1/store.py index e8878a5f5..59a88153d 100644 --- a/src/backend/langflow/api/v1/store.py +++ b/src/backend/langflow/api/v1/store.py @@ -85,12 +85,10 @@ def count_components( store_api_Key: str = Depends(get_optional_user_store_api_key), ): try: - result = store_service.query_components( - store_api_Key, - count=True, - filter_by_user=filter_by_user, + result = store_service.count_components( + api_key=store_api_Key, filter_by_user=filter_by_user ) - return {"count": result[0].get("count", 0)} + return {"count": result} except Exception as exc: raise HTTPException(status_code=400, detail=str(exc)) diff --git a/src/backend/langflow/services/store/service.py b/src/backend/langflow/services/store/service.py index 47ecc772a..014012462 100644 --- a/src/backend/langflow/services/store/service.py +++ b/src/backend/langflow/services/store/service.py @@ -119,6 +119,25 @@ class StoreService(Service): results = self._get(self.components_url, api_key, params) return [ComponentResponse(**component) for component in results] + def count_components( + self, + api_key: str, + filter_by_user: bool = False, + ) -> int: + params = {"aggregate": json.dumps({"count": "*"})} + if filter_by_user: + params["deep"] = json.dumps( + { + "components": { + "_filter": {"user_created": {"token": {"_eq": api_key}}} + } + } + ) + else: + params["filter"] = json.dumps({"status": {"_in": ["public", "Public"]}}) + results = self._get(self.components_url, api_key, params) + return results[0].get("count", 0) + def query_components( self, api_key: str, @@ -126,20 +145,14 @@ class StoreService(Service): limit: int = 15, fields: Optional[List[str]] = None, filter_by_user: bool = False, - count: bool = False, ) -> Union[List[ListComponentResponse], List[Dict[str, int]]]: params = {"page": page, "limit": limit} # ?aggregate[count]=likes - if count: - params["aggregate"] = json.dumps({"count": "*"}) - else: - params["fields"] = ( - ",".join(fields) - if fields - else ",".join( - ["id", "name", "description", "count(likes)", "is_component"] - ) - ) + params["fields"] = ( + ",".join(fields) + if fields + else ",".join(["id", "name", "description", "count(likes)", "is_component"]) + ) # Only public components or the ones created by the user # check for "public" or "Public" @@ -157,8 +170,6 @@ class StoreService(Service): ) results = self._get(self.components_url, api_key, params) - if "count" in results[0]: - return results return [ListComponentResponse(**component) for component in results] def download(self, api_key: str, component_id: str) -> DownloadComponentResponse: