diff --git a/commons/data_access_layer/cosmos_db.py b/commons/data_access_layer/cosmos_db.py index 5843e0fa..9cdf7f1c 100644 --- a/commons/data_access_layer/cosmos_db.py +++ b/commons/data_access_layer/cosmos_db.py @@ -208,7 +208,7 @@ def attach_context(data: dict, event_context: EventContext): @staticmethod def create_sql_date_range_filter(date_range: dict) -> str: - if 'start_date' and 'end_date' in date_range: + if 'start_date' in date_range and 'end_date' in date_range: return """ AND ((c.start_date BETWEEN @start_date AND @end_date) OR (c.end_date BETWEEN @start_date AND @end_date)) @@ -251,9 +251,9 @@ def find_all( event_context: EventContext, conditions: dict = None, date_range: dict = None, + visible_only=True, max_count=None, offset=0, - visible_only=True, mapper: Callable = None, ): conditions = conditions if conditions else {} diff --git a/tests/time_tracker_api/projects/projects_model_test.py b/tests/time_tracker_api/projects/projects_model_test.py index 43cba41b..af7c76f6 100644 --- a/tests/time_tracker_api/projects/projects_model_test.py +++ b/tests/time_tracker_api/projects/projects_model_test.py @@ -29,7 +29,10 @@ def test_find_all_projects_new_version( project_repository.container.query_items = query_items_mock result = project_repository.find_all( - event_context, {"customer_id": "1"}, ['id'], ['customer_id'] + event_context=event_context, + conditions={"customer_id": "1"}, + project_ids=['id'], + customer_ids=['customer_id'], ) find_partition_key_value_mock.assert_called_once() assert len(result) == 1 diff --git a/time_tracker_api/activities/activities_model.py b/time_tracker_api/activities/activities_model.py index 10d4aeb8..8c77cba9 100644 --- a/time_tracker_api/activities/activities_model.py +++ b/time_tracker_api/activities/activities_model.py @@ -89,10 +89,10 @@ def find_all_with_id_in_list( def find_all( self, event_context: EventContext, - conditions: dict = None, + conditions, activities_id: List = None, visible_only=True, - max_count=0, + max_count=None, offset=0, mapper: Callable = None, ): diff --git a/time_tracker_api/projects/projects_model.py b/time_tracker_api/projects/projects_model.py index 32ea5929..fcbd13a7 100644 --- a/time_tracker_api/projects/projects_model.py +++ b/time_tracker_api/projects/projects_model.py @@ -71,14 +71,12 @@ def __init__(self): def find_all( self, event_context: EventContext, - conditions: dict = None, + conditions, project_ids: List[str] = None, customer_ids: List[str] = None, visible_only=True, mapper: Callable = None, ): - params = self.generate_params(conditions) if conditions else [] - query_builder = ( CosmosDBQueryBuilder() .add_sql_where_equal_condition(conditions) @@ -89,6 +87,7 @@ def find_all( ) query_str = query_builder.get_query() tenant_id_value = self.find_partition_key_value(event_context) + params = query_builder.get_parameters() result = self.container.query_items( query=query_str, parameters=params, @@ -117,7 +116,6 @@ def get_all( max_count=kwargs.get('max_count', None) ) - # TODO: evaluate another approach in order that memory filtering will be make in Database instead customers_id = [ customer.id for customer in customers diff --git a/time_tracker_api/time_entries/time_entries_repository.py b/time_tracker_api/time_entries/time_entries_repository.py index 6ee08b37..ef6a9f9a 100644 --- a/time_tracker_api/time_entries/time_entries_repository.py +++ b/time_tracker_api/time_entries/time_entries_repository.py @@ -82,7 +82,6 @@ def count( date_range = date_range if date_range else {} date_range_params = self.generate_params(date_range) - partition_key_value = self.find_partition_key_value(event_context) params = self.generate_params(conditions) params.extend(date_range_params) @@ -153,19 +152,7 @@ def find_all( mapper: Callable = None, ): max_count = self.get_page_size_or(max_count) - - params = [ - {"name": "@offset", "value": offset}, - {"name": "@limit", "value": max_count}, - ] - date_range = date_range if date_range else {} - date_range_params = ( - self.generate_params(date_range) if date_range else [] - ) - - params.extend(self.generate_params(conditions) if conditions else []) - params.extend(date_range_params) query_builder = ( CosmosDBQueryBuilder() @@ -181,6 +168,7 @@ def find_all( ) query_str = query_builder.get_query() + params = query_builder.get_parameters() tenant_id_value = self.find_partition_key_value(event_context) result = self.container.query_items( query=query_str, diff --git a/utils/extend_model.py b/utils/extend_model.py index 6ce1593d..b13faa44 100644 --- a/utils/extend_model.py +++ b/utils/extend_model.py @@ -99,5 +99,5 @@ def create_custom_query_from_str( return query_str -def create_list_from_str(data: str, delimiter: str = ",") -> str: +def create_list_from_str(data: str, delimiter: str = ",") -> list: return [id for id in data.split(delimiter)] if data else [] diff --git a/utils/query_builder.py b/utils/query_builder.py index 68740d46..f62ae7cd 100644 --- a/utils/query_builder.py +++ b/utils/query_builder.py @@ -109,6 +109,12 @@ def __build_order_by(self): def __build_date_range(self): if self.date_range: + self.parameters.append( + {'name': '@start_date', 'value': self.date_range['start_date']} + ) + self.parameters.append( + {'name': '@end_date', 'value': self.date_range['end_date']} + ) and_keyword = "AND " if len(self.where_conditions) > 0 else "" return f"{and_keyword}((c.start_date BETWEEN @start_date AND @end_date) OR (c.end_date BETWEEN @start_date AND @end_date))" else: