🐛 fix(store.py): add filter_by_user parameter to list_components and read_component functions to filter components by user

 feat(store.py): add support for filtering components by user in the list_components and read_component functions
🐛 fix(service.py): add filter_by_user parameter to list_components function in StoreService class to filter components by user
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-10-24 22:50:42 -03:00
commit d1c4af8c7d
2 changed files with 22 additions and 12 deletions

View file

@ -52,6 +52,7 @@ def create_component(
@router.get("/components/", response_model=List[ListComponentResponse])
def list_components(
filter_by_user: bool = Query(False),
page: int = 1,
limit: int = 10,
store_service: StoreService = Depends(get_store_service),
@ -64,7 +65,9 @@ def list_components(
decrypted = auth_utils.decrypt_api_key(store_api_Key, settings_service)
else:
decrypted = None
result = store_service.list_components(decrypted, page, limit, fields=fields)
result = store_service.list_components(
decrypted, page, limit, fields=fields, filter_by_user=filter_by_user
)
return result
except Exception as exc:
raise HTTPException(status_code=400, detail=str(exc))
@ -73,7 +76,6 @@ def list_components(
@router.get("/components/{component_id}", response_model=DownloadComponentResponse)
def read_component(
component_id: UUID,
filter_by_user: bool = Query(False),
store_service: StoreService = Depends(get_store_service),
store_api_Key: str = Depends(get_user_store_api_key),
settings_service=Depends(get_settings_service),
@ -82,7 +84,7 @@ def read_component(
try:
decrypted = auth_utils.decrypt_api_key(store_api_Key, settings_service)
component = store_service.download(decrypted, component_id, filter_by_user)
component = store_service.download(decrypted, component_id)
except Exception as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
@ -105,10 +107,12 @@ async def search_endpoint(
fields: Optional[List[str]] = Query(None),
store_service: "StoreService" = Depends(get_store_service),
store_api_Key: str = Depends(get_optional_user_store_api_key),
settings_service=Depends(get_settings_service),
):
try:
decrypted = auth_utils.decrypt_api_key(store_api_Key, settings_service)
return store_service.search(
api_key=store_api_Key,
api_key=decrypted,
query=query,
page=page,
limit=limit,

View file

@ -113,6 +113,7 @@ class StoreService(Service):
page: int = 1,
limit: int = 10,
fields: Optional[List[str]] = None,
filter_by_user: bool = False,
) -> List[ListComponentResponse]:
params = {"page": page, "limit": limit}
# ?aggregate[count]=likes
@ -121,7 +122,19 @@ class StoreService(Service):
if fields
else ",".join(["id", "name", "description", "count(likes)", "is_component"])
)
# Only public components or the ones created by the user
params["filter"] = json.dumps({"status": {"_eq": "public"}})
if filter_by_user:
params["deep"] = json.dumps(
{
"components": {
"_filter": {"user_created": {"token": {"_eq": api_key}}}
}
}
)
else:
params["filter"] = json.dumps({"status": {"_eq": "public"}})
results = self._get(self.components_url, api_key, params)
return [ListComponentResponse(**component) for component in results]
@ -132,14 +145,7 @@ class StoreService(Service):
params = {
"fields": ",".join(["id", "name", "description", "data", "is_component"])
}
if filter_by_user:
params["deep"] = json.dumps(
{
"components": {
"_filter": {"user_created": {"token": {"_eq": api_key}}}
}
}
)
component = self._get(url, api_key, params)
self.call_webhook(api_key, self.webhook_url, component_id)