Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix: TT-238 activities find_all refactoring
  • Loading branch information
Pablo authored and Pablo committed May 17, 2021
commit 6399ba61477650a95d51acd2b4f4b95cfe10ba7c
14 changes: 12 additions & 2 deletions tests/time_tracker_api/activities/activities_namespace_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,13 @@ def test_list_all_active(
json_data = json.loads(response.data)
assert [] == json_data

repository_find_all_mock.assert_called_once_with(ANY, conditions={})
repository_find_all_mock.assert_called_once_with(
event_context=ANY,
activities_id=ANY,
conditions={},
visible_only=ANY,
max_count=ANY,
)


def test_list_all_active_activities(
Expand All @@ -94,7 +100,11 @@ def test_list_all_active_activities(
assert [] == json_data

repository_find_all_mock.assert_called_once_with(
ANY, conditions={'status': 'active'}
event_context=ANY,
conditions={'status': 'active'},
activities_id=ANY,
visible_only=ANY,
max_count=ANY,
)


Expand Down
53 changes: 53 additions & 0 deletions time_tracker_api/activities/activities_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
convert_list_to_tuple_string,
create_sql_in_condition,
)
from utils.query_builder import CosmosDBQueryBuilder, Order


class ActivityDao(CRUDDao):
Expand Down Expand Up @@ -85,6 +86,39 @@ def find_all_with_id_in_list(
function_mapper = self.get_mapper_or_dict(mapper)
return list(map(function_mapper, result))

def find_all(
self,
event_context: EventContext,
conditions: dict = None,
activities_id: List = None,
visible_only=True,
max_count=0,
offset=0,
mapper: Callable = None,
):
query_builder = (
CosmosDBQueryBuilder()
.add_sql_in_condition('id', activities_id)
.add_sql_where_equal_condition(conditions)
.add_sql_visibility_condition(visible_only)
.add_sql_order_by_condition('id', Order.ASC)
.add_sql_limit_condition(max_count)
.add_sql_offset_condition(offset)
.build()
)

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,
partition_key=tenant_id_value,
)
function_mapper = self.get_mapper_or_dict(mapper)
return list(map(function_mapper, result))


class ActivityCosmosDBDao(APICosmosDBDao, ActivityDao):
def __init__(self, repository):
Expand All @@ -100,6 +134,25 @@ def get_all_with_id_in_list(
activity_ids,
)

def get_all(
self,
conditions: dict = None,
activities_id: List = None,
max_count=None,
visible_only=True,
) -> list:
event_ctx = self.create_event_context("read-many")
max_count = self.repository.get_page_size_or(max_count)

activities = self.repository.find_all(
event_context=event_ctx,
conditions=conditions,
activities_id=activities_id,
visible_only=visible_only,
max_count=max_count,
)
return activities


def create_dao() -> ActivityDao:
repository = ActivityCosmosDBRepository()
Expand Down
8 changes: 4 additions & 4 deletions time_tracker_api/time_entries/time_entries_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,8 @@ def add_complementary_info(
project_ids_set = set([x.project_id for x in time_entries])
project_ids = list(project_ids_set)

custom_conditions_activity = create_in_condition(
time_entries, "activity_id"
)
activity_ids_set = set([x.activity_id for x in time_entries])
activity_ids = list(activity_ids_set)

project_dao = projects_model.create_dao()
projects = project_dao.get_all(
Expand All @@ -164,10 +163,11 @@ def add_complementary_info(

activity_dao = activities_model.create_dao()
activities = activity_dao.get_all(
custom_sql_conditions=[custom_conditions_activity],
activities_id=activity_ids,
visible_only=False,
max_count=max_count,
)

add_activity_name_to_time_entries(time_entries, activities)

users = AzureConnection().users()
Expand Down
11 changes: 6 additions & 5 deletions utils/query_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,17 @@ def add_sql_limit_condition(self, limit):
return self

def add_sql_offset_condition(self, offset):
if offset:
if offset != None:
self.offset = offset
return self

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


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

def __build_offset(self):
if self.offset:
if self.offset != None:
self.parameters.append({'name': '@offset', 'value': self.offset})
return "OFFSET @offset"
else:
return ""

def __build_limit(self):
if self.limit:
if self.limit != None:
self.parameters.append({'name': '@limit', 'value': self.limit})
return "LIMIT @limit"
else:
Expand Down