Skip to content

Commit 1c99789

Browse files
eesa456axelkrastek1-nhs
authored andcommitted
NRL-497 remove count endpoint and add _summary filter to search endpoints
1 parent f0be629 commit 1c99789

22 files changed

+441
-466
lines changed

api/consumer/countDocumentReference/count_document_reference.py

Lines changed: 0 additions & 45 deletions
This file was deleted.

api/consumer/countDocumentReference/tests/test_count_document_reference.py

Lines changed: 0 additions & 128 deletions
This file was deleted.

api/consumer/searchDocumentReference/search_document_reference.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ def handler(
8787
if params.category:
8888
self_link += f"&category={params.category.root}"
8989

90+
if params.field_summary:
91+
self_link += f"&_summary={params.field_summary.root}"
92+
9093
bundle = {
9194
"resourceType": "Bundle",
9295
"type": "searchset",
@@ -102,6 +105,28 @@ def handler(
102105
pointer_types=pointer_types,
103106
)
104107

108+
if params.field_summary and params.field_summary.root == "count":
109+
bundle = {
110+
"resourceType": "Bundle",
111+
"type": "searchset",
112+
"link": [{"relation": "self", "url": self_link}],
113+
"total": 0,
114+
}
115+
logger.log(LogReference.CONSEARCH006)
116+
total = sum(
117+
1
118+
for _ in repository.search(
119+
nhs_number=params.nhs_number,
120+
custodian=custodian_id,
121+
pointer_types=pointer_types,
122+
categories=categories,
123+
)
124+
)
125+
bundle["total"] = total
126+
response = Response.from_resource(Bundle.model_validate(bundle))
127+
logger.log(LogReference.CONSEARCH999)
128+
return response
129+
105130
for result in repository.search(
106131
nhs_number=params.nhs_number,
107132
custodian=custodian_id,

api/consumer/searchDocumentReference/tests/test_search_document_reference_consumer.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,46 @@ def test_search_document_reference_invalid_category(
718718
}
719719

720720

721+
@mock_aws
722+
@mock_repository
723+
def test_search_document_reference_filters_by_summary_count(
724+
repository: DocumentPointerRepository,
725+
):
726+
doc_ref = load_document_reference("Y05868-736253002-Valid")
727+
doc_pointer = DocumentPointer.from_document_reference(doc_ref)
728+
repository.create(doc_pointer)
729+
730+
event = create_test_api_gateway_event(
731+
headers=create_headers(),
732+
query_string_parameters={
733+
"subject:identifier": "https://fhir.nhs.uk/Id/nhs-number|6700028191",
734+
"_summary": "count",
735+
},
736+
)
737+
738+
result = handler(event, create_mock_context())
739+
body = result.pop("body")
740+
741+
assert result == {
742+
"statusCode": "200",
743+
"headers": default_response_headers(),
744+
"isBase64Encoded": False,
745+
}
746+
747+
parsed_body = json.loads(body)
748+
assert parsed_body == {
749+
"resourceType": "Bundle",
750+
"type": "searchset",
751+
"total": 1,
752+
"link": [
753+
{
754+
"relation": "self",
755+
"url": "https://pytest.api.service.nhs.uk/record-locator/consumer/FHIR/R4/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|6700028191&_summary=count",
756+
}
757+
],
758+
}
759+
760+
721761
@mock_aws
722762
@mock_repository
723763
def test_search_document_reference_invalid_json(repository: DocumentPointerRepository):

api/consumer/searchPostDocumentReference/search_post_document_reference.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ def handler(
8787
if body.category:
8888
self_link += f"&category={body.category.root}"
8989

90+
if body.field_summary:
91+
self_link += f"&_summary={body.field_summary.root}"
92+
9093
bundle = {
9194
"resourceType": "Bundle",
9295
"type": "searchset",
@@ -102,6 +105,28 @@ def handler(
102105
pointer_types=pointer_types,
103106
)
104107

108+
if body.field_summary and body.field_summary.root == "count":
109+
bundle = {
110+
"resourceType": "Bundle",
111+
"type": "searchset",
112+
"link": [{"relation": "self", "url": self_link}],
113+
"total": 0,
114+
}
115+
logger.log(LogReference.CONSEARCH006)
116+
total = sum(
117+
1
118+
for _ in repository.search(
119+
nhs_number=body.nhs_number,
120+
custodian=custodian_id,
121+
pointer_types=pointer_types,
122+
categories=categories,
123+
)
124+
)
125+
bundle["total"] = total
126+
response = Response.from_resource(Bundle.model_validate(bundle))
127+
logger.log(LogReference.CONSEARCH999)
128+
return response
129+
105130
for result in repository.search(
106131
nhs_number=body.nhs_number,
107132
custodian=custodian_id,

api/consumer/searchPostDocumentReference/tests/test_search_post_document_reference_consumer.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,48 @@ def test_search_document_reference_invalid_category(
478478
}
479479

480480

481+
@mock_aws
482+
@mock_repository
483+
def test_search_document_reference_filters_by_summary_count(
484+
repository: DocumentPointerRepository,
485+
):
486+
doc_ref = load_document_reference("Y05868-736253002-Valid")
487+
doc_pointer = DocumentPointer.from_document_reference(doc_ref)
488+
repository.create(doc_pointer)
489+
490+
event = create_test_api_gateway_event(
491+
headers=create_headers(),
492+
body=json.dumps(
493+
{
494+
"subject:identifier": "https://fhir.nhs.uk/Id/nhs-number|6700028191",
495+
"_summary": "count",
496+
}
497+
),
498+
)
499+
500+
result = handler(event, create_mock_context())
501+
body = result.pop("body")
502+
503+
assert result == {
504+
"statusCode": "200",
505+
"headers": default_response_headers(),
506+
"isBase64Encoded": False,
507+
}
508+
509+
parsed_body = json.loads(body)
510+
assert parsed_body == {
511+
"resourceType": "Bundle",
512+
"type": "searchset",
513+
"total": 1,
514+
"link": [
515+
{
516+
"relation": "self",
517+
"url": "https://pytest.api.service.nhs.uk/record-locator/consumer/FHIR/R4/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|6700028191&_summary=count",
518+
}
519+
],
520+
}
521+
522+
481523
@mock_aws
482524
@mock_repository
483525
def test_search_post_document_reference_invalid_json_adds_operation_outcome(

0 commit comments

Comments
 (0)