🐛 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:
parent
8c4b88a49a
commit
d1c4af8c7d
2 changed files with 22 additions and 12 deletions
|
|
@ -52,6 +52,7 @@ def create_component(
|
||||||
|
|
||||||
@router.get("/components/", response_model=List[ListComponentResponse])
|
@router.get("/components/", response_model=List[ListComponentResponse])
|
||||||
def list_components(
|
def list_components(
|
||||||
|
filter_by_user: bool = Query(False),
|
||||||
page: int = 1,
|
page: int = 1,
|
||||||
limit: int = 10,
|
limit: int = 10,
|
||||||
store_service: StoreService = Depends(get_store_service),
|
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)
|
decrypted = auth_utils.decrypt_api_key(store_api_Key, settings_service)
|
||||||
else:
|
else:
|
||||||
decrypted = None
|
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
|
return result
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
raise HTTPException(status_code=400, detail=str(exc))
|
raise HTTPException(status_code=400, detail=str(exc))
|
||||||
|
|
@ -73,7 +76,6 @@ def list_components(
|
||||||
@router.get("/components/{component_id}", response_model=DownloadComponentResponse)
|
@router.get("/components/{component_id}", response_model=DownloadComponentResponse)
|
||||||
def read_component(
|
def read_component(
|
||||||
component_id: UUID,
|
component_id: UUID,
|
||||||
filter_by_user: bool = Query(False),
|
|
||||||
store_service: StoreService = Depends(get_store_service),
|
store_service: StoreService = Depends(get_store_service),
|
||||||
store_api_Key: str = Depends(get_user_store_api_key),
|
store_api_Key: str = Depends(get_user_store_api_key),
|
||||||
settings_service=Depends(get_settings_service),
|
settings_service=Depends(get_settings_service),
|
||||||
|
|
@ -82,7 +84,7 @@ def read_component(
|
||||||
|
|
||||||
try:
|
try:
|
||||||
decrypted = auth_utils.decrypt_api_key(store_api_Key, settings_service)
|
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:
|
except Exception as exc:
|
||||||
raise HTTPException(status_code=400, detail=str(exc)) from 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),
|
fields: Optional[List[str]] = Query(None),
|
||||||
store_service: "StoreService" = Depends(get_store_service),
|
store_service: "StoreService" = Depends(get_store_service),
|
||||||
store_api_Key: str = Depends(get_optional_user_store_api_key),
|
store_api_Key: str = Depends(get_optional_user_store_api_key),
|
||||||
|
settings_service=Depends(get_settings_service),
|
||||||
):
|
):
|
||||||
try:
|
try:
|
||||||
|
decrypted = auth_utils.decrypt_api_key(store_api_Key, settings_service)
|
||||||
return store_service.search(
|
return store_service.search(
|
||||||
api_key=store_api_Key,
|
api_key=decrypted,
|
||||||
query=query,
|
query=query,
|
||||||
page=page,
|
page=page,
|
||||||
limit=limit,
|
limit=limit,
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,7 @@ class StoreService(Service):
|
||||||
page: int = 1,
|
page: int = 1,
|
||||||
limit: int = 10,
|
limit: int = 10,
|
||||||
fields: Optional[List[str]] = None,
|
fields: Optional[List[str]] = None,
|
||||||
|
filter_by_user: bool = False,
|
||||||
) -> List[ListComponentResponse]:
|
) -> List[ListComponentResponse]:
|
||||||
params = {"page": page, "limit": limit}
|
params = {"page": page, "limit": limit}
|
||||||
# ?aggregate[count]=likes
|
# ?aggregate[count]=likes
|
||||||
|
|
@ -121,7 +122,19 @@ class StoreService(Service):
|
||||||
if fields
|
if fields
|
||||||
else ",".join(["id", "name", "description", "count(likes)", "is_component"])
|
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)
|
results = self._get(self.components_url, api_key, params)
|
||||||
return [ListComponentResponse(**component) for component in results]
|
return [ListComponentResponse(**component) for component in results]
|
||||||
|
|
||||||
|
|
@ -132,14 +145,7 @@ class StoreService(Service):
|
||||||
params = {
|
params = {
|
||||||
"fields": ",".join(["id", "name", "description", "data", "is_component"])
|
"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)
|
component = self._get(url, api_key, params)
|
||||||
self.call_webhook(api_key, self.webhook_url, component_id)
|
self.call_webhook(api_key, self.webhook_url, component_id)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue