Skip to content

Commit 9929129

Browse files
authored
refactor: TT-182 create method to get all projects with list of ids (#271)
* refactor: TT-182 create method to get all projects with list of ids * refactor: TT-182 create method to get all projects with list of ids * refactor: TT-182 solve PR comments * Renamed ids_list, customers_ids to project_ids, customer_ids
1 parent 7faa022 commit 9929129

File tree

2 files changed

+24
-26
lines changed

2 files changed

+24
-26
lines changed

tests/time_tracker_api/projects/projects_model_test.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,32 @@
88
)
99

1010

11-
@patch(
12-
'time_tracker_api.projects.projects_model.ProjectCosmosDBRepository.create_sql_condition_for_visibility'
13-
)
1411
@patch(
1512
'time_tracker_api.projects.projects_model.ProjectCosmosDBRepository.find_partition_key_value'
1613
)
17-
def test_find_all_with_customer_id_in_list(
14+
def test_find_all_v2(
1815
find_partition_key_value_mock,
19-
create_sql_condition_for_visibility_mock,
2016
event_context: EventContext,
2117
project_repository: ProjectCosmosDBRepository,
2218
):
2319
expected_item = {
2420
'customer_id': 'id1',
21+
'id': 'id2',
2522
'name': 'testing',
2623
'description': 'do some testing',
2724
'project_type_id': "id2",
2825
'tenant_id': 'tenantid1',
2926
}
30-
3127
query_items_mock = Mock(return_value=[expected_item])
3228
project_repository.container = Mock()
3329
project_repository.container.query_items = query_items_mock
3430

35-
result = project_repository.find_all_with_customer_id_in_list(event_context, [expected_item])
36-
37-
create_sql_condition_for_visibility_mock.assert_called_once()
31+
result = project_repository.find_all_v2(
32+
event_context,
33+
['id'],
34+
['customer_id']
35+
)
3836
find_partition_key_value_mock.assert_called_once()
39-
query_items_mock.assert_called_once()
40-
4137
assert len(result) == 1
4238
project = result[0]
4339
assert isinstance(project, ProjectCosmosDBModel)

time_tracker_api/projects/projects_model.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@
88
from time_tracker_api.database import CRUDDao, APICosmosDBDao
99
from typing import List, Callable
1010
from commons.data_access_layer.database import EventContext
11-
from utils.repository import convert_list_to_tuple_string, create_sql_in_condition
1211
from time_tracker_api.customers.customers_model import (
1312
create_dao as customers_create_dao,
1413
)
1514
from time_tracker_api.customers.customers_model import CustomerCosmosDBModel
16-
15+
from utils.query_builder import CosmosDBQueryBuilder
1716
from utils.extend_model import add_customer_name_to_projects
1817

1918

@@ -65,24 +64,22 @@ def __init__(self):
6564
partition_key_attribute='tenant_id',
6665
mapper=ProjectCosmosDBModel,
6766
)
68-
69-
def find_all_with_customer_id_in_list(
67+
68+
def find_all_v2(
7069
self,
7170
event_context: EventContext,
72-
customer_ids_list: List[str],
71+
project_ids: List[str],
72+
customer_ids: List[str] = None,
7373
visible_only=True,
7474
mapper: Callable = None,
75-
):
76-
visibility = self.create_sql_condition_for_visibility(visible_only)
77-
query_str = """
78-
SELECT * FROM c
79-
WHERE {condition}
80-
{visibility_condition}
81-
""".format(
82-
condition=create_sql_in_condition("customer_id", customer_ids_list),
83-
visibility_condition=visibility,
75+
):
76+
query_builder = (CosmosDBQueryBuilder()
77+
.add_sql_in_condition("id",project_ids)
78+
.add_sql_in_condition("customer_id",customer_ids)
79+
.add_sql_visibility_condition(visible_only)
80+
.build()
8481
)
85-
82+
query_str = query_builder.get_query()
8683
tenant_id_value = self.find_partition_key_value(event_context)
8784
result = self.container.query_items(
8885
query=query_str,
@@ -124,6 +121,11 @@ def get_all(self, conditions: dict = None, **kwargs) -> list:
124121
add_customer_name_to_projects(projects, customers)
125122
return projects
126123

124+
def get_all_with_id_in_list(self,id_list):
125+
event_ctx = self.create_event_context("read-many")
126+
return self.repository.find_all_v2(event_ctx, id_list)
127+
128+
127129

128130
def create_dao() -> ProjectDao:
129131
repository = ProjectCosmosDBRepository()

0 commit comments

Comments
 (0)