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 617df941..0defd8b4 100644 --- a/time_tracker_api/projects/projects_model.py +++ b/time_tracker_api/projects/projects_model.py @@ -8,12 +8,11 @@ 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 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 @@ -65,24 +64,22 @@ def __init__(self): partition_key_attribute='tenant_id', mapper=ProjectCosmosDBModel, ) - - def find_all_with_customer_id_in_list( + + def find_all_v2( self, event_context: EventContext, - customer_ids_list: List[str], + project_ids: List[str], + customer_ids: List[str] = None, 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, + ): + query_builder = (CosmosDBQueryBuilder() + .add_sql_in_condition("id",project_ids) + .add_sql_in_condition("customer_id",customer_ids) + .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, @@ -124,6 +121,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_v2(event_ctx, id_list) + + def create_dao() -> ProjectDao: repository = ProjectCosmosDBRepository()