🐛 fix(store.py): change function name from query_components to count_components to improve semantics and accurately count components

 feat(service.py): add count_components method to StoreService class to count components based on filter criteria
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-10-25 21:50:06 -03:00
commit 31fb76c992
2 changed files with 27 additions and 18 deletions

View file

@ -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))

View file

@ -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: