From 8884cebb33c84df92c1556bba9dfc5785c179ee1 Mon Sep 17 00:00:00 2001 From: ImMin5 Date: Wed, 3 Jan 2024 01:44:22 +0900 Subject: [PATCH] feat: modify cost_query_set apis --- .../manager/cost_query_set_manager.py | 33 +++++++----- .../model/cost_query_set_model.py | 31 ++++------- .../service/cost_query_set_service.py | 54 ++++++++++++------- 3 files changed, 68 insertions(+), 50 deletions(-) diff --git a/src/spaceone/cost_analysis/manager/cost_query_set_manager.py b/src/spaceone/cost_analysis/manager/cost_query_set_manager.py index a30f359c..2daf88b5 100644 --- a/src/spaceone/cost_analysis/manager/cost_query_set_manager.py +++ b/src/spaceone/cost_analysis/manager/cost_query_set_manager.py @@ -11,14 +11,14 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.cost_query_set_model: CostQuerySet = self.locator.get_model("CostQuerySet") - def create_cost_query_set(self, params): - def _rollback(cost_query_set_vo): + def create_cost_query_set(self, params: dict): + def _rollback(vo: CostQuerySet): _LOGGER.info( f"[create_cost_query_set._rollback] " f"Delete cost_query_set : {cost_query_set_vo.name} " - f"({cost_query_set_vo.cost_query_set_id})" + f"({vo.cost_query_set_id})" ) - cost_query_set_vo.delete() + vo.delete() cost_query_set_vo: CostQuerySet = self.cost_query_set_model.create(params) self.transaction.add_rollback(_rollback, cost_query_set_vo) @@ -42,16 +42,25 @@ def _rollback(old_data): self.transaction.add_rollback(_rollback, cost_query_set_vo.to_dict()) return cost_query_set_vo.update(params) - def delete_cost_query_set(self, cost_query_set_id, domain_id): - cost_query_set_vo: CostQuerySet = self.get_cost_query_set( - cost_query_set_id, domain_id - ) + @staticmethod + def delete_cost_query_set_by_vo(cost_query_set_vo: CostQuerySet) -> None: cost_query_set_vo.delete() - def get_cost_query_set(self, cost_query_set_id, user_id, domain_id): - return self.cost_query_set_model.get( - cost_query_set_id=cost_query_set_id, user_id=user_id, domain_id=domain_id - ) + def get_cost_query_set( + self, + cost_query_set_id: str, + user_id: str, + domain_id: str, + workspace_id: str = None, + ) -> CostQuerySet: + conditions = { + "cost_query_set_id": cost_query_set_id, + "user_id": user_id, + "domain_id": domain_id, + } + if workspace_id: + conditions["workspace_id"] = workspace_id + return self.cost_query_set_model.get(**conditions) def list_cost_query_sets(self, query={}): return self.cost_query_set_model.query(**query) diff --git a/src/spaceone/cost_analysis/model/cost_query_set_model.py b/src/spaceone/cost_analysis/model/cost_query_set_model.py index 254d29d2..6058fcd6 100644 --- a/src/spaceone/cost_analysis/model/cost_query_set_model.py +++ b/src/spaceone/cost_analysis/model/cost_query_set_model.py @@ -4,35 +4,26 @@ class CostQuerySet(MongoModel): - cost_query_set_id = StringField(max_length=40, generate_id='query', unique=True) + cost_query_set_id = StringField(max_length=40, generate_id="query", unique=True) name = StringField(max_length=255) options = DictField(default={}) tags = DictField(default={}) user_id = StringField(max_length=40) data_source_id = StringField(max_length=40) + workspace_id = StringField(max_length=40, default=None, null=True) domain_id = StringField(max_length=40) created_at = DateTimeField(auto_now_add=True) updated_at = DateTimeField(auto_now=True) meta = { - 'updatable_fields': [ - 'name', - 'options', - 'tags' + "updatable_fields": ["name", "options", "tags"], + "minimal_fields": [ + "cost_query_set_id", + "name", + "user_id", + "data_source_id", + "workspace_id", ], - 'minimal_fields': [ - 'cost_query_set_id', - 'name', - 'user_id', - 'data_source_id' - ], - 'ordering': [ - 'name' - ], - 'indexes': [ - 'name', - 'user_id', - 'data_source_id', - 'domain_id' - ] + "ordering": ["name"], + "indexes": ["name", "user_id", "data_source_id", "domain_id"], } diff --git a/src/spaceone/cost_analysis/service/cost_query_set_service.py b/src/spaceone/cost_analysis/service/cost_query_set_service.py index 5dc528e9..4a881b51 100644 --- a/src/spaceone/cost_analysis/service/cost_query_set_service.py +++ b/src/spaceone/cost_analysis/service/cost_query_set_service.py @@ -22,7 +22,7 @@ def __init__(self, *args, **kwargs): @transaction( permission="cost-analysis:CostQuerySet.write", - role_types=["WORKSPACE_OWNER", "WORKSPACE_MEMBER"], + role_types=["USER"], ) @check_required(["data_source_id", "name", "options", "user_id", "domain_id"]) @change_date_value(["start", "end"]) @@ -36,6 +36,7 @@ def create(self, params): 'options': 'str', 'tags': 'dict', 'user_id': 'str', # injected from auth + 'workspace_id': 'str', # injected from auth (optional) 'domain_id': 'str' # injected from auth } @@ -51,7 +52,7 @@ def create(self, params): ) @check_required(["cost_query_set_id", "user_id", "domain_id"]) @change_date_value(["end"]) - def update(self, params): + def update(self, params: dict): """Update cost_query_set Args: @@ -60,8 +61,9 @@ def update(self, params): 'name': 'str', 'options': 'dict', 'tags': 'dict' - 'user_id': 'str', - 'domain_id': 'str' + 'user_id': 'str', # injected from auth + 'workspace_id': 'str', # injected from auth (optional) + 'domain_id': 'str' # injected from auth } Returns: @@ -70,9 +72,10 @@ def update(self, params): cost_query_set_id = params["cost_query_set_id"] user_id = params["user_id"] domain_id = params["domain_id"] + workspace_id = params.get("workspace_id") cost_query_set_vo: CostQuerySet = self.cost_query_set_mgr.get_cost_query_set( - cost_query_set_id, user_id, domain_id + cost_query_set_id, user_id, domain_id, workspace_id ) return self.cost_query_set_mgr.update_cost_query_set_by_vo( @@ -83,8 +86,8 @@ def update(self, params): permission="cost-analysis:CostQuerySet.write", role_types=["USER"], ) - @check_required(["cost_query_set_id", "domain_id"]) - def delete(self, params): + @check_required(["cost_query_set_id", "user_id", "domain_id"]) + def delete(self, params: dict): """Deregister cost_query_set Args: @@ -97,16 +100,21 @@ def delete(self, params): None """ - self.cost_query_set_mgr.delete_cost_query_set( - params["cost_query_set_id"], params["domain_id"] + cost_query_set_vo = self.cost_query_set_mgr.get_cost_query_set( + params["cost_query_set_id"], + params["user_id"], + params["domain_id"], + params.get("workspace_id"), ) + self.cost_query_set_mgr.delete_cost_query_set_by_vo(cost_query_set_vo) + @transaction( permission="cost-analysis:CostQuerySet.read", role_types=["USER"], ) @check_required(["cost_query_set_id", "user_id", "domain_id"]) - def get(self, params): + def get(self, params: dict): """Get cost_query_set Args: @@ -123,31 +131,41 @@ def get(self, params): cost_query_set_id = params["cost_query_set_id"] user_id = params["user_id"] domain_id = params["domain_id"] + workspace_id = params.get("workspace_id") return self.cost_query_set_mgr.get_cost_query_set( - cost_query_set_id, user_id, domain_id + cost_query_set_id, user_id, domain_id, workspace_id ) @transaction( permission="cost-analysis:CostQuerySet.read", role_types=["USER"], ) - @check_required(["data_source_id", "domain_id"]) + @check_required(["data_source_id", "user_id", "domain_id"]) @append_query_filter( - ["data_source_id", "cost_query_set_id", "name", "user_id", "domain_id"] + [ + "data_source_id", + "cost_query_set_id", + "name", + "user_id", + "workspace_id", + "domain_id", + ] ) @append_keyword_filter(["cost_query_set_id", "name"]) - def list(self, params): + def list(self, params: dict): """List cost_query_sets Args: params (dict): { + 'query': 'dict (spaceone.api.core.v2.Query)' 'data_source_id': 'str', 'cost_query_set_id': 'str', 'name': 'str', - 'user_id': 'str', - 'domain_id': 'str', - 'query': 'dict (spaceone.api.core.v1.Query)' + 'user_id': 'str', # injected from auth + 'workspace_id': 'str', # injected from auth (optional) + 'domain_id': 'str', # injected from auth + } Returns: @@ -165,7 +183,7 @@ def list(self, params): @check_required(["query", "data_source_id", "domain_id"]) @append_query_filter(["data_source_id", "domain_id"]) @append_keyword_filter(["cost_query_set_id", "name"]) - def stat(self, params): + def stat(self, params: dict): """ Args: params (dict): {