diff --git a/tests/utils/query_builder_test.py b/tests/utils/query_builder_test.py index 8d5776f4..742730db 100644 --- a/tests/utils/query_builder_test.py +++ b/tests/utils/query_builder_test.py @@ -331,27 +331,3 @@ def test_add_sql_not_in_condition( ) assert len(query_builder.where_conditions) == len(expected_not_in_list) assert query_builder.where_conditions == expected_not_in_list - - -@pytest.mark.parametrize( - "date_range,expected_value,expected_expression", - [ - ( - { - 'start_date': '2021-05-09T00:00:00-05:00', - 'end_date': '2021-05-15T23:59:59-05:00', - }, - { - 'start_date': '2021-05-09T00:00:00-05:00', - 'end_date': '2021-05-15T23:59:59-05:00', - }, - "((c.start_date BETWEEN @start_date AND @end_date) OR (c.end_date BETWEEN @start_date AND @end_date))", - ) - ], -) -def test_add_date_range(date_range, expected_value, expected_expression): - query_builder = CosmosDBQueryBuilder().add_date_range(date_range) - result = query_builder._CosmosDBQueryBuilder__build_date_range() - - assert query_builder.date_range == expected_value - assert result == expected_expression diff --git a/time_tracker_api/time_entries/time_entries_repository.py b/time_tracker_api/time_entries/time_entries_repository.py index ef6a9f9a..c4bc7f02 100644 --- a/time_tracker_api/time_entries/time_entries_repository.py +++ b/time_tracker_api/time_entries/time_entries_repository.py @@ -78,24 +78,18 @@ def count( visible_only=True, **kwargs, ): - conditions = conditions if conditions else {} - date_range = date_range if date_range else {} - - date_range_params = self.generate_params(date_range) - params = self.generate_params(conditions) - params.extend(date_range_params) - query_builder = ( - CosmosDBQueryBuilder() + TimeEntryQueryBuilder() .add_select_conditions(["VALUE COUNT(1)"]) .add_sql_in_condition('owner_id', owner_ids) .add_sql_where_equal_condition(conditions) .add_sql_visibility_condition(visible_only) - .add_date_range(date_range) + .add_sql_date_range_condition(date_range) .build() ) 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, @@ -109,11 +103,8 @@ def add_complementary_info( self, time_entries=None, max_count=None, exist_conditions=False ): if time_entries: - project_ids_set = set([x.project_id for x in time_entries]) - project_ids = list(project_ids_set) - - activity_ids_set = set([x.activity_id for x in time_entries]) - activity_ids = list(activity_ids_set) + project_ids = list(set([x.project_id for x in time_entries])) + activity_ids = list(set([x.activity_id for x in time_entries])) project_dao = projects_model.create_dao() projects = project_dao.get_all( @@ -155,11 +146,11 @@ def find_all( date_range = date_range if date_range else {} query_builder = ( - CosmosDBQueryBuilder() + TimeEntryQueryBuilder() .add_sql_in_condition('owner_id', owner_ids) .add_sql_where_equal_condition(conditions) .add_sql_visibility_condition(visible_only) - .add_date_range(date_range) + .add_sql_date_range_condition(date_range) .add_sql_not_in_condition('owner_id', test_user_ids) .add_sql_order_by_condition('start_date', Order.DESC) .add_sql_limit_condition(max_count) diff --git a/utils/query_builder.py b/utils/query_builder.py index f62ae7cd..2899aab4 100644 --- a/utils/query_builder.py +++ b/utils/query_builder.py @@ -20,7 +20,6 @@ def __init__(self): self.limit = None self.offset = None self.order_by = None - self.date_range = None def add_select_conditions(self, columns: List[str] = None): columns = columns if columns else ["*"] @@ -70,11 +69,6 @@ def add_sql_not_in_condition( self.where_conditions.append(f"c.{attribute} NOT IN {ids_values}") return self - def add_date_range(self, date_range: dict = None): - if date_range: - self.date_range = date_range - return self - def __build_select(self): if len(self.select_conditions) < 1: self.select_conditions.append("*") @@ -107,31 +101,16 @@ def __build_order_by(self): else: return "" - 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: - return "" - def build(self): self.query = """ SELECT {select_conditions} FROM c {where_conditions} - {date_range_condition} {order_by_condition} {offset_condition} {limit_condition} """.format( select_conditions=self.__build_select(), where_conditions=self.__build_where(), - date_range_condition=self.__build_date_range(), order_by_condition=self.__build_order_by(), offset_condition=self.__build_offset(), limit_condition=self.__build_limit(),