Skip to content

Commit 58b8086

Browse files
committed
NRL-1053 fix type and category filter expression issue
1 parent 7fbc81b commit 58b8086

File tree

1 file changed

+16
-25
lines changed

1 file changed

+16
-25
lines changed

layer/nrlf/core/dynamodb/repository.py

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,6 @@ def _get_sk_ids_for_type(pointer_type: str) -> tuple:
3333
return category_id, type_id
3434

3535

36-
def _get_sk_id_for_category(category: str) -> tuple:
37-
category_system, category_code = category.split("|")
38-
if category_system not in SYSTEM_SHORT_IDS:
39-
raise ValueError(f"Unknown system for category: {category_system}")
40-
category_id = SYSTEM_SHORT_IDS[category_system] + "-" + category_code
41-
42-
return category_id
43-
44-
4536
class Repository(ABC, Generic[RepositoryModel]):
4637
ITEM_TYPE: Type[RepositoryModel]
4738

@@ -249,14 +240,26 @@ def search(
249240
key_conditions.append("begins_with(patient_sort, :patient_sort)")
250241
expression_values[":patient_sort"] = patient_sort
251242

252-
if len(categories) == 1:
253-
# Optimisation for single category
254-
category_id = _get_sk_id_for_category(categories[0])
243+
# Handle multiple categories and pointer types with filter expressions
244+
if len(pointer_types) > 1:
245+
expression_names["#pointer_type"] = "type"
246+
types_filters = [
247+
f"#pointer_type = :type_{i}" for i in range(len(pointer_types))
248+
]
249+
types_filter_values = {
250+
f":type_{i}": pointer_types[i] for i in range(len(pointer_types))
251+
}
252+
filter_expressions.append(f"({' OR '.join(types_filters)})")
253+
expression_values.update(types_filter_values)
254+
255+
# if pointer_types then category filter is not needed
256+
if not pointer_types and len(categories) == 1:
257+
category_id = categories[0].replace("|", "-")
255258
patient_sort = f"C#{category_id}"
256259
key_conditions.append("begins_with(patient_sort, :patient_sort)")
257260
expression_values[":patient_sort"] = patient_sort
258261

259-
if len(categories) > 1:
262+
if not pointer_types and len(categories) > 1:
260263
expression_names["#category"] = "category"
261264
category_filters = [
262265
f"#category = :category_{i}" for i in range(len(categories))
@@ -267,18 +270,6 @@ def search(
267270
filter_expressions.append(f"({' OR '.join(category_filters)})")
268271
expression_values.update(caetgory_filter_values)
269272

270-
# Handle multiple categories and pointer types with filter expressions
271-
if len(pointer_types) > 1:
272-
expression_names["#pointer_type"] = "type"
273-
types_filters = [
274-
f"#pointer_type = :type_{i}" for i in range(len(pointer_types))
275-
]
276-
types_filter_values = {
277-
f":type_{i}": pointer_types[i] for i in range(len(pointer_types))
278-
}
279-
filter_expressions.append(f"({' OR '.join(types_filters)})")
280-
expression_values.update(types_filter_values)
281-
282273
if custodian:
283274
logger.log(
284275
LogReference.REPOSITORY016,

0 commit comments

Comments
 (0)