From bd173033fae6f36c9918fbbb184880beb62dfc42 Mon Sep 17 00:00:00 2001 From: Israel Pasaca Date: Fri, 26 Mar 2021 18:34:25 -0500 Subject: [PATCH 1/4] refactor: TT-182 create method to get all projects with list of ids --- time_tracker_api/projects/projects_model.py | 34 +++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/time_tracker_api/projects/projects_model.py b/time_tracker_api/projects/projects_model.py index 617df941..3abc5532 100644 --- a/time_tracker_api/projects/projects_model.py +++ b/time_tracker_api/projects/projects_model.py @@ -13,7 +13,7 @@ create_dao as customers_create_dao, ) from time_tracker_api.customers.customers_model import CustomerCosmosDBModel - +from utils.query_builder import CosmosDBQueryBuilder from utils.extend_model import add_customer_name_to_projects @@ -65,7 +65,32 @@ def __init__(self): partition_key_attribute='tenant_id', mapper=ProjectCosmosDBModel, ) - + + def find_all_with_id_in_list( + self, + event_context: EventContext, + ids_list: List[str] = None, + customers_ids_list: List[str] = None, + visible_only=True, + mapper: Callable = None, + ): + query_builder = (CosmosDBQueryBuilder() + .add_sql_in_condition("id",ids_list) + .add_sql_in_condition("customer_id",customers_ids_list) + .add_sql_visibility_condition(visibility_only) + .build() + ) + query_str = query_builder.get_query() + tenant_id_value = self.find_partition_key_value(event_context) + + result = self.container.query_items( + query=query_str, + partition_key=tenant_id_value, + ) + function_mapper = self.get_mapper_or_dict(mapper) + return list(map(function_mapper, result)) + + def find_all_with_customer_id_in_list( self, event_context: EventContext, @@ -124,6 +149,11 @@ def get_all(self, conditions: dict = None, **kwargs) -> list: add_customer_name_to_projects(projects, customers) return projects + def get_all_with_id_in_list(self,id_list,): + event_ctx = self.create_event_context("read-many") + return self.repository.find_all_with_id_in_list(event_ctx, id_list) + + def create_dao() -> ProjectDao: repository = ProjectCosmosDBRepository() From ed3b15029a1c69c947e092941ed536792a0b68f9 Mon Sep 17 00:00:00 2001 From: Israel Pasaca Date: Mon, 29 Mar 2021 14:33:10 -0500 Subject: [PATCH 2/4] refactor: TT-182 create method to get all projects with list of ids --- .../projects/projects_model_test.py | 18 ++++----- time_tracker_api/projects/projects_model.py | 39 +++---------------- 2 files changed, 13 insertions(+), 44 deletions(-) diff --git a/tests/time_tracker_api/projects/projects_model_test.py b/tests/time_tracker_api/projects/projects_model_test.py index f321ffcc..7338fdfe 100644 --- a/tests/time_tracker_api/projects/projects_model_test.py +++ b/tests/time_tracker_api/projects/projects_model_test.py @@ -8,36 +8,32 @@ ) -@patch( - 'time_tracker_api.projects.projects_model.ProjectCosmosDBRepository.create_sql_condition_for_visibility' -) @patch( 'time_tracker_api.projects.projects_model.ProjectCosmosDBRepository.find_partition_key_value' ) -def test_find_all_with_customer_id_in_list( +def test_find_all_v2( find_partition_key_value_mock, - create_sql_condition_for_visibility_mock, event_context: EventContext, project_repository: ProjectCosmosDBRepository, ): expected_item = { 'customer_id': 'id1', + 'id': 'id2', 'name': 'testing', 'description': 'do some testing', 'project_type_id': "id2", 'tenant_id': 'tenantid1', } - query_items_mock = Mock(return_value=[expected_item]) project_repository.container = Mock() project_repository.container.query_items = query_items_mock - result = project_repository.find_all_with_customer_id_in_list(event_context, [expected_item]) - - create_sql_condition_for_visibility_mock.assert_called_once() + result = project_repository.find_all_v2( + event_context, + ['id'], + ['customer_id'] + ) find_partition_key_value_mock.assert_called_once() - query_items_mock.assert_called_once() - assert len(result) == 1 project = result[0] assert isinstance(project, ProjectCosmosDBModel) diff --git a/time_tracker_api/projects/projects_model.py b/time_tracker_api/projects/projects_model.py index 3abc5532..d29ca594 100644 --- a/time_tracker_api/projects/projects_model.py +++ b/time_tracker_api/projects/projects_model.py @@ -8,7 +8,7 @@ from time_tracker_api.database import CRUDDao, APICosmosDBDao from typing import List, Callable from commons.data_access_layer.database import EventContext -from utils.repository import convert_list_to_tuple_string, create_sql_in_condition +from utils.repository import create_sql_in_condition from time_tracker_api.customers.customers_model import ( create_dao as customers_create_dao, ) @@ -66,10 +66,10 @@ def __init__(self): mapper=ProjectCosmosDBModel, ) - def find_all_with_id_in_list( + def find_all_v2( self, event_context: EventContext, - ids_list: List[str] = None, + ids_list: List[str], customers_ids_list: List[str] = None, visible_only=True, mapper: Callable = None, @@ -77,37 +77,10 @@ def find_all_with_id_in_list( query_builder = (CosmosDBQueryBuilder() .add_sql_in_condition("id",ids_list) .add_sql_in_condition("customer_id",customers_ids_list) - .add_sql_visibility_condition(visibility_only) + .add_sql_visibility_condition(visible_only) .build() ) query_str = query_builder.get_query() - tenant_id_value = self.find_partition_key_value(event_context) - - result = self.container.query_items( - query=query_str, - partition_key=tenant_id_value, - ) - function_mapper = self.get_mapper_or_dict(mapper) - return list(map(function_mapper, result)) - - - def find_all_with_customer_id_in_list( - self, - event_context: EventContext, - customer_ids_list: List[str], - visible_only=True, - mapper: Callable = None, - ): - visibility = self.create_sql_condition_for_visibility(visible_only) - query_str = """ - SELECT * FROM c - WHERE {condition} - {visibility_condition} - """.format( - condition=create_sql_in_condition("customer_id", customer_ids_list), - visibility_condition=visibility, - ) - tenant_id_value = self.find_partition_key_value(event_context) result = self.container.query_items( query=query_str, @@ -149,9 +122,9 @@ def get_all(self, conditions: dict = None, **kwargs) -> list: add_customer_name_to_projects(projects, customers) return projects - def get_all_with_id_in_list(self,id_list,): + def get_all_with_id_in_list(self,id_list): event_ctx = self.create_event_context("read-many") - return self.repository.find_all_with_id_in_list(event_ctx, id_list) + return self.repository.find_all_v2(event_ctx, id_list) From 56b88671a80f5630c6e80a7f8d0b7ea40a3e413e Mon Sep 17 00:00:00 2001 From: Israel Pasaca Date: Tue, 30 Mar 2021 13:05:34 -0500 Subject: [PATCH 3/4] refactor: TT-182 solve PR comments --- time_tracker_api/projects/projects_model.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/time_tracker_api/projects/projects_model.py b/time_tracker_api/projects/projects_model.py index d29ca594..18830c92 100644 --- a/time_tracker_api/projects/projects_model.py +++ b/time_tracker_api/projects/projects_model.py @@ -8,13 +8,13 @@ from time_tracker_api.database import CRUDDao, APICosmosDBDao from typing import List, Callable from commons.data_access_layer.database import EventContext -from utils.repository import create_sql_in_condition from time_tracker_api.customers.customers_model import ( create_dao as customers_create_dao, ) from time_tracker_api.customers.customers_model import CustomerCosmosDBModel from utils.query_builder import CosmosDBQueryBuilder from utils.extend_model import add_customer_name_to_projects +from utils.repository import create_sql_in_condition class ProjectDao(CRUDDao): @@ -70,13 +70,13 @@ def find_all_v2( self, event_context: EventContext, ids_list: List[str], - customers_ids_list: List[str] = None, + customers_ids: List[str] = None, visible_only=True, mapper: Callable = None, ): query_builder = (CosmosDBQueryBuilder() .add_sql_in_condition("id",ids_list) - .add_sql_in_condition("customer_id",customers_ids_list) + .add_sql_in_condition("customer_id",customers_ids) .add_sql_visibility_condition(visible_only) .build() ) From e6eb905f2dc0cb69f3a8e5edafc7605311d8b678 Mon Sep 17 00:00:00 2001 From: Israel Pasaca Date: Tue, 30 Mar 2021 13:38:36 -0500 Subject: [PATCH 4/4] Renamed ids_list, customers_ids to project_ids, customer_ids --- time_tracker_api/projects/projects_model.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/time_tracker_api/projects/projects_model.py b/time_tracker_api/projects/projects_model.py index 18830c92..0defd8b4 100644 --- a/time_tracker_api/projects/projects_model.py +++ b/time_tracker_api/projects/projects_model.py @@ -14,7 +14,6 @@ from time_tracker_api.customers.customers_model import CustomerCosmosDBModel from utils.query_builder import CosmosDBQueryBuilder from utils.extend_model import add_customer_name_to_projects -from utils.repository import create_sql_in_condition class ProjectDao(CRUDDao): @@ -69,14 +68,14 @@ def __init__(self): def find_all_v2( self, event_context: EventContext, - ids_list: List[str], - customers_ids: List[str] = None, + project_ids: List[str], + customer_ids: List[str] = None, visible_only=True, mapper: Callable = None, ): query_builder = (CosmosDBQueryBuilder() - .add_sql_in_condition("id",ids_list) - .add_sql_in_condition("customer_id",customers_ids) + .add_sql_in_condition("id",project_ids) + .add_sql_in_condition("customer_id",customer_ids) .add_sql_visibility_condition(visible_only) .build() )