diff --git a/moonstreamapi/moonstreamapi/actions.py b/moonstreamapi/moonstreamapi/actions.py index 841af7b5..0c3b68c5 100644 --- a/moonstreamapi/moonstreamapi/actions.py +++ b/moonstreamapi/moonstreamapi/actions.py @@ -15,6 +15,9 @@ from bugout.data import ( BugoutResources, BugoutSearchResult, BugoutSearchResults, + BugoutResourceHolder, + HolderType, + ResourcePermissions, ) from bugout.exceptions import BugoutResponseException from bugout.journal import SearchOrder @@ -952,3 +955,55 @@ def check_if_smart_contract( is_contract = True return blockchain_type, address, is_contract + + +def create_resource_for_user( + user_id: uuid.UUID, + resource_data: Dict[str, Any], +) -> BugoutResource: + """ + Create resource for user + """ + try: + resource = bc.create_resource( + token=MOONSTREAM_ADMIN_ACCESS_TOKEN, + application_id=MOONSTREAM_APPLICATION_ID, + resource_data=resource_data, + ) + except BugoutResponseException as e: + raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail) + except Exception as e: + logger.error(f"Error creating resource: {str(e)}") + raise MoonstreamHTTPException(status_code=500, internal_error=e) + + try: + bc.add_resource_holder_permissions( + token=MOONSTREAM_ADMIN_ACCESS_TOKEN, + resource_id=resource.id, + holder_permissions=BugoutResourceHolder( + holder_type=HolderType.user, + holder_id=user_id, + permission_list=[ + ResourcePermissions.ADMIN, + ResourcePermissions.READ, + ResourcePermissions.UPDATE, + ResourcePermissions.DELETE, + ], + ), + ) + except BugoutResponseException as e: + logger.error( + f"Error adding resource holder permissions to resource resource {str(resource.id)} {str(e)}" + ) + raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail) + except Exception as e: + bc.delete_resource( + token=MOONSTREAM_ADMIN_ACCESS_TOKEN, + resource_id=resource.id, + ) + logger.error( + f"Error adding resource holder permissions to resource {str(resource.id)} {str(e)}" + ) + raise MoonstreamHTTPException(status_code=500, internal_error=e) + + return resource diff --git a/moonstreamapi/moonstreamapi/routes/queries.py b/moonstreamapi/moonstreamapi/routes/queries.py index 26e8b123..42d1277c 100644 --- a/moonstreamapi/moonstreamapi/routes/queries.py +++ b/moonstreamapi/moonstreamapi/routes/queries.py @@ -25,6 +25,7 @@ from ..actions import ( get_query_by_name, name_normalization, query_parameter_hash, + create_resource_for_user, ) from ..middleware import MoonstreamHTTPException from ..settings import ( @@ -130,24 +131,16 @@ async def create_query_handler( except Exception as e: raise MoonstreamHTTPException(status_code=500, internal_error=e) - try: - # create resource query_name_resolver - bc.create_resource( - token=token, - application_id=MOONSTREAM_APPLICATION_ID, - resource_data={ - "type": data.BUGOUT_RESOURCE_QUERY_RESOLVER, - "user_id": str(user.id), - "user": str(user.username), - "name": query_name, - "entry_id": str(entry.id), - }, - ) - except BugoutResponseException as e: - logger.error(f"Error creating name resolving resource: {str(e)}") - raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail) - except Exception as e: - raise MoonstreamHTTPException(status_code=500, internal_error=e) + create_resource_for_user( + user_id=user.id, + resource_data={ + "type": data.BUGOUT_RESOURCE_QUERY_RESOLVER, + "user_id": str(user.id), + "user": str(user.username), + "name": query_name, + "entry_id": str(entry.id), + }, + ) try: bc.update_tags( @@ -355,7 +348,7 @@ async def update_query_handler( token=MOONSTREAM_ADMIN_ACCESS_TOKEN, journal_id=MOONSTREAM_QUERIES_JOURNAL_ID, entry_id=query_id, - title=query_name, + title=f"Query:{query_name}", content=request_update.query, tags=["preapprove"], ) @@ -620,7 +613,9 @@ async def remove_query_handler( raise MoonstreamHTTPException(status_code=404, detail="Query does not exists") try: - bc.delete_resource(token=token, resource_id=query_ids[query_name][0]) + bc.delete_resource( + token=MOONSTREAM_ADMIN_ACCESS_TOKEN, resource_id=query_ids[query_name][0] + ) except BugoutResponseException as e: raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail) except Exception as e: