🐛 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:
parent
c9b77ec9db
commit
31fb76c992
2 changed files with 27 additions and 18 deletions
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue