Skip to content

Commit 7c8f5f5

Browse files
adamwhitingnhsFoxMaltas-NHS
authored andcommitted
[PRMP-907] Adjust delete service to remove pointer for non LG
1 parent ef7979f commit 7c8f5f5

File tree

3 files changed

+35
-39
lines changed

3 files changed

+35
-39
lines changed

app/src/components/blocks/_delete/deleteSubmitStage/DeleteSubmitStage.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import BackButton from '../../../generic/backButton/BackButton';
2828
import PatientSummary, { PatientInfo } from '../../../generic/patientSummary/PatientSummary';
2929
import {
3030
DOCUMENT_TYPE,
31+
DOCUMENT_TYPE_CONFIG,
3132
getConfigForDocType,
3233
getDocumentTypeLabel,
3334
} from '../../../../helpers/utils/documentType';
@@ -72,6 +73,12 @@ export const DeleteSubmitStageIndexView = ({
7273
'Select whether you want to permanently delete these patient files';
7374
const userIsGP = role === REPOSITORY_ROLE.GP_ADMIN || role === REPOSITORY_ROLE.GP_CLINICAL;
7475

76+
let documentConfig: DOCUMENT_TYPE_CONFIG | null = null;
77+
if (docType !== DOCUMENT_TYPE.ALL) {
78+
documentConfig = getConfigForDocType(document?.documentSnomedCodeType ?? docType!)
79+
docType = documentConfig.snomedCode as DOCUMENT_TYPE;
80+
}
81+
7582
const handleYesOption = async (): Promise<void> => {
7683
const onSuccess = (): void => {
7784
resetDocState();
@@ -85,7 +92,7 @@ export const DeleteSubmitStageIndexView = ({
8592
try {
8693
setDeletionStage(SUBMISSION_STATE.PENDING);
8794
const response: DeleteResponse = await deleteAllDocuments({
88-
documentId: document?.id,
95+
documentId: !documentConfig?.singleDocumentOnly ? document?.id : undefined,
8996
docType: docType,
9097
nhsNumber: nhsNumber,
9198
baseUrl,
@@ -174,7 +181,7 @@ export const DeleteSubmitStageIndexView = ({
174181
<>
175182
<p>
176183
Record type:{' '}
177-
{getConfigForDocType(document.documentSnomedCodeType)?.displayName}
184+
{documentConfig?.displayName}
178185
</p>
179186
<p>Filename: {document.fileName}</p>
180187
</>

lambdas/services/document_deletion_service.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import os
22
import uuid
3-
from typing import Literal
3+
from typing import Literal, Optional
44
from urllib.parse import urlparse
55

66
from botocore.exceptions import ClientError
77
from enums.document_retention import DocumentRetentionDays
88
from enums.lambda_error import LambdaError
99
from enums.metadata_field_names import DocumentReferenceMetadataFields
1010
from enums.nrl_sqs_upload import NrlActionTypes
11-
from enums.snomed_codes import SnomedCodes
11+
from enums.snomed_codes import SnomedCode, SnomedCodes
1212
from enums.supported_document_types import SupportedDocumentTypes
1313
from inflection import underscore
1414
from models.document_reference import DocumentReference
@@ -64,22 +64,25 @@ def delete_document_by_id(self, nhs_number: str, document_id: str):
6464
document_ttl_days=DocumentRetentionDays.SOFT_DELETE,
6565
)
6666

67-
self.handle_object_delete(document_ref)
68-
69-
self.send_sqs_message_to_remove_pointer(nhs_number, document_ref.file_location)
67+
self.send_sqs_message_to_remove_pointer(
68+
nhs_number,
69+
snomed=SnomedCodes.find_by_code(document_ref.document_snomed_code_type),
70+
doc_ref=document_ref
71+
)
7072

7173
def delete_documents_by_types(
7274
self, nhs_number: str, doc_types: list[SupportedDocumentTypes]
7375
):
7476
files_deleted = []
7577

7678
for doc_type in doc_types:
79+
snomed = SnomedCodes.find_by_code(doc_type)
7780
files_deleted += self.delete_specific_doc_type(nhs_number, doc_type)
81+
self.send_sqs_message_to_remove_pointer(nhs_number, snomed)
7882

7983
if SupportedDocumentTypes.LG in doc_types:
8084
self.delete_documents_references_in_stitch_table(nhs_number)
8185
self.delete_unstitched_document_reference(nhs_number)
82-
self.send_sqs_message_to_remove_pointer(nhs_number)
8386

8487
return files_deleted
8588

@@ -170,18 +173,20 @@ def delete_specific_doc_type(
170173
raise DocumentDeletionServiceException(500, LambdaError.DocDelClient)
171174

172175
def send_sqs_message_to_remove_pointer(
173-
self, nhs_number: str, document_url: str = None
176+
self,
177+
nhs_number: str,
178+
snomed: SnomedCode,
179+
doc_ref: Optional[DocumentReference] = None
174180
):
175181
delete_nrl_message = NrlSqsMessage(
176182
nhs_number=nhs_number,
177183
action=NrlActionTypes.DELETE,
178-
snomed_code_doc_type=SnomedCodes.LLOYD_GEORGE.value,
184+
snomed_code_doc_type=snomed,
179185
snomed_code_category=SnomedCodes.CARE_PLAN.value,
180186
)
181187

182-
if document_url:
183-
attachment = Attachment(url=document_url)
184-
188+
if doc_ref:
189+
attachment = Attachment(url=doc_ref.file_location)
185190
delete_nrl_message.attachment = attachment
186191

187192
sqs_group_id = f"NRL_delete_{uuid.uuid4()}"

lambdas/tests/unit/services/test_document_deletion_service.py

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -121,18 +121,15 @@ def test_handle_delete_for_all_doc_type(
121121
mock_delete_documents_references_in_stitch_table,
122122
mock_delete_unstitched_document_reference,
123123
):
124-
expected = TEST_DOC_STORE_REFERENCES + TEST_LG_DOC_STORE_REFERENCES
124+
expected = TEST_LG_DOC_STORE_REFERENCES
125125

126126
actual = mock_deletion_service.handle_reference_delete(
127-
TEST_NHS_NUMBER, [SupportedDocumentTypes.ARF, SupportedDocumentTypes.LG]
127+
TEST_NHS_NUMBER, [SupportedDocumentTypes.LG]
128128
)
129129

130130
assert expected == actual
131131

132-
assert mock_delete_specific_doc_type.call_count == 2
133-
mock_delete_specific_doc_type.assert_any_call(
134-
TEST_NHS_NUMBER, SupportedDocumentTypes.ARF
135-
)
132+
assert mock_delete_specific_doc_type.call_count == 1
136133
mock_delete_specific_doc_type.assert_any_call(
137134
TEST_NHS_NUMBER, SupportedDocumentTypes.LG
138135
)
@@ -194,15 +191,12 @@ def test_handle_delete_all_doc_type_when_only_lg_records_available(
194191

195192
expected = TEST_LG_DOC_STORE_REFERENCES
196193
actual = mock_deletion_service.handle_reference_delete(
197-
nhs_number, [SupportedDocumentTypes.LG, SupportedDocumentTypes.ARF]
194+
nhs_number, [SupportedDocumentTypes.LG]
198195
)
199196

200197
assert expected == actual
201198

202-
assert mock_delete_specific_doc_type.call_count == 2
203-
mock_delete_specific_doc_type.assert_any_call(
204-
nhs_number, SupportedDocumentTypes.ARF
205-
)
199+
assert mock_delete_specific_doc_type.call_count == 1
206200
mock_delete_specific_doc_type.assert_any_call(nhs_number, SupportedDocumentTypes.LG)
207201

208202
mock_delete_unstitched_document_reference.assert_called()
@@ -211,7 +205,6 @@ def test_handle_delete_all_doc_type_when_only_lg_records_available(
211205
@pytest.mark.parametrize(
212206
["doc_type", "expected"],
213207
[
214-
(SupportedDocumentTypes.ARF, TEST_DOC_STORE_REFERENCES),
215208
(SupportedDocumentTypes.LG, TEST_LG_DOC_STORE_REFERENCES),
216209
],
217210
)
@@ -238,7 +231,7 @@ def test_handle_delete_when_no_record_for_patient_return_empty_list(
238231
expected = []
239232
actual = mock_deletion_service.handle_reference_delete(
240233
TEST_NHS_NUMBER_WITH_NO_RECORD,
241-
[SupportedDocumentTypes.LG, SupportedDocumentTypes.ARF],
234+
[SupportedDocumentTypes.LG],
242235
)
243236

244237
assert actual == expected
@@ -247,7 +240,6 @@ def test_handle_delete_when_no_record_for_patient_return_empty_list(
247240
@pytest.mark.parametrize(
248241
["doc_type", "table_name", "doc_ref"],
249242
[
250-
(SupportedDocumentTypes.ARF, MOCK_ARF_TABLE_NAME, TEST_DOC_STORE_REFERENCES),
251243
(SupportedDocumentTypes.LG, MOCK_LG_TABLE_NAME, TEST_LG_DOC_STORE_REFERENCES),
252244
],
253245
)
@@ -275,7 +267,7 @@ def test_delete_specific_doc_type(
275267

276268
@pytest.mark.parametrize(
277269
"doc_type",
278-
[SupportedDocumentTypes.ARF, SupportedDocumentTypes.LG],
270+
[SupportedDocumentTypes.LG],
279271
)
280272
def test_delete_specific_doc_type_when_no_record_for_given_patient(
281273
doc_type,
@@ -322,18 +314,19 @@ def test_delete_documents_references_in_stitch_table(mock_deletion_service):
322314
def test_send_sqs_message_to_remove_pointer(mocker, mock_deletion_service):
323315
mocker.patch("uuid.uuid4", return_value="test_uuid")
324316

317+
snomed=SnomedCodes.LLOYD_GEORGE.value
325318
expected_message_body = (
326319
'{{"nhs_number":"{}",'
327320
'"snomed_code_doc_type":{},'
328321
'"snomed_code_category":{},'
329322
'"action":"delete"}}'
330323
).format(
331324
TEST_NHS_NUMBER,
332-
SnomedCodes.LLOYD_GEORGE.value.model_dump_json(),
325+
snomed.model_dump_json(),
333326
SnomedCodes.CARE_PLAN.value.model_dump_json(),
334327
)
335328

336-
mock_deletion_service.send_sqs_message_to_remove_pointer(TEST_NHS_NUMBER)
329+
mock_deletion_service.send_sqs_message_to_remove_pointer(TEST_NHS_NUMBER, snomed)
337330

338331
assert mock_deletion_service.sqs_service.send_message_fifo.call_count == 1
339332

@@ -353,15 +346,6 @@ def test_delete_unstitched_document_reference_called_for_LG(
353346
mock_delete_unstitched_document_reference.assert_called()
354347

355348

356-
def test_delete_unstitched_document_reference_not_called_for_ARF(
357-
mock_deletion_service, mocker, mock_delete_unstitched_document_reference
358-
):
359-
mock_deletion_service.handle_reference_delete(
360-
TEST_NHS_NUMBER, [SupportedDocumentTypes.ARF]
361-
)
362-
mock_delete_unstitched_document_reference.assert_not_called()
363-
364-
365349
def test_delete_unstitched_document_reference_updates_correct_dynamo_table(
366350
mock_deletion_service, mock_fetch_documents_with_nhs_number
367351
):

0 commit comments

Comments
 (0)