Skip to content

Commit 6399ba6

Browse files
PabloPablo
authored andcommitted
fix: TT-238 activities find_all refactoring
1 parent 58de09b commit 6399ba6

File tree

4 files changed

+75
-11
lines changed

4 files changed

+75
-11
lines changed

tests/time_tracker_api/activities/activities_namespace_test.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,13 @@ def test_list_all_active(
7171
json_data = json.loads(response.data)
7272
assert [] == json_data
7373

74-
repository_find_all_mock.assert_called_once_with(ANY, conditions={})
74+
repository_find_all_mock.assert_called_once_with(
75+
event_context=ANY,
76+
activities_id=ANY,
77+
conditions={},
78+
visible_only=ANY,
79+
max_count=ANY,
80+
)
7581

7682

7783
def test_list_all_active_activities(
@@ -94,7 +100,11 @@ def test_list_all_active_activities(
94100
assert [] == json_data
95101

96102
repository_find_all_mock.assert_called_once_with(
97-
ANY, conditions={'status': 'active'}
103+
event_context=ANY,
104+
conditions={'status': 'active'},
105+
activities_id=ANY,
106+
visible_only=ANY,
107+
max_count=ANY,
98108
)
99109

100110

time_tracker_api/activities/activities_model.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
convert_list_to_tuple_string,
1515
create_sql_in_condition,
1616
)
17+
from utils.query_builder import CosmosDBQueryBuilder, Order
1718

1819

1920
class ActivityDao(CRUDDao):
@@ -85,6 +86,39 @@ def find_all_with_id_in_list(
8586
function_mapper = self.get_mapper_or_dict(mapper)
8687
return list(map(function_mapper, result))
8788

89+
def find_all(
90+
self,
91+
event_context: EventContext,
92+
conditions: dict = None,
93+
activities_id: List = None,
94+
visible_only=True,
95+
max_count=0,
96+
offset=0,
97+
mapper: Callable = None,
98+
):
99+
query_builder = (
100+
CosmosDBQueryBuilder()
101+
.add_sql_in_condition('id', activities_id)
102+
.add_sql_where_equal_condition(conditions)
103+
.add_sql_visibility_condition(visible_only)
104+
.add_sql_order_by_condition('id', Order.ASC)
105+
.add_sql_limit_condition(max_count)
106+
.add_sql_offset_condition(offset)
107+
.build()
108+
)
109+
110+
query_str = query_builder.get_query()
111+
tenant_id_value = self.find_partition_key_value(event_context)
112+
params = query_builder.get_parameters()
113+
114+
result = self.container.query_items(
115+
query=query_str,
116+
parameters=params,
117+
partition_key=tenant_id_value,
118+
)
119+
function_mapper = self.get_mapper_or_dict(mapper)
120+
return list(map(function_mapper, result))
121+
88122

89123
class ActivityCosmosDBDao(APICosmosDBDao, ActivityDao):
90124
def __init__(self, repository):
@@ -100,6 +134,25 @@ def get_all_with_id_in_list(
100134
activity_ids,
101135
)
102136

137+
def get_all(
138+
self,
139+
conditions: dict = None,
140+
activities_id: List = None,
141+
max_count=None,
142+
visible_only=True,
143+
) -> list:
144+
event_ctx = self.create_event_context("read-many")
145+
max_count = self.repository.get_page_size_or(max_count)
146+
147+
activities = self.repository.find_all(
148+
event_context=event_ctx,
149+
conditions=conditions,
150+
activities_id=activities_id,
151+
visible_only=visible_only,
152+
max_count=max_count,
153+
)
154+
return activities
155+
103156

104157
def create_dao() -> ActivityDao:
105158
repository = ActivityCosmosDBRepository()

time_tracker_api/time_entries/time_entries_repository.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,8 @@ def add_complementary_info(
149149
project_ids_set = set([x.project_id for x in time_entries])
150150
project_ids = list(project_ids_set)
151151

152-
custom_conditions_activity = create_in_condition(
153-
time_entries, "activity_id"
154-
)
152+
activity_ids_set = set([x.activity_id for x in time_entries])
153+
activity_ids = list(activity_ids_set)
155154

156155
project_dao = projects_model.create_dao()
157156
projects = project_dao.get_all(
@@ -164,10 +163,11 @@ def add_complementary_info(
164163

165164
activity_dao = activities_model.create_dao()
166165
activities = activity_dao.get_all(
167-
custom_sql_conditions=[custom_conditions_activity],
166+
activities_id=activity_ids,
168167
visible_only=False,
169168
max_count=max_count,
170169
)
170+
171171
add_activity_name_to_time_entries(time_entries, activities)
172172

173173
users = AzureConnection().users()

utils/query_builder.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,17 @@ def add_sql_limit_condition(self, limit):
5353
return self
5454

5555
def add_sql_offset_condition(self, offset):
56-
if offset:
56+
if offset != None:
5757
self.offset = offset
5858
return self
5959

6060
def add_sql_order_by_condition(self, attribute: str, order: Order):
6161
self.order_by = (attribute, order.name)
6262
return self
6363

64-
65-
def add_sql_not_in_condition(self, attribute: str = None, ids_list: List[str] = None):
64+
def add_sql_not_in_condition(
65+
self, attribute: str = None, ids_list: List[str] = None
66+
):
6667
if ids_list and attribute and len(ids_list) > 0:
6768
ids_values = convert_list_to_tuple_string(ids_list)
6869
self.where_conditions.append(f"c.{attribute} NOT IN {ids_values}")
@@ -80,14 +81,14 @@ def __build_where(self):
8081
return ""
8182

8283
def __build_offset(self):
83-
if self.offset:
84+
if self.offset != None:
8485
self.parameters.append({'name': '@offset', 'value': self.offset})
8586
return "OFFSET @offset"
8687
else:
8788
return ""
8889

8990
def __build_limit(self):
90-
if self.limit:
91+
if self.limit != None:
9192
self.parameters.append({'name': '@limit', 'value': self.limit})
9293
return "LIMIT @limit"
9394
else:

0 commit comments

Comments
 (0)