1010from pydantic import ValidationError
1111from services .document_service import DocumentService
1212from utils .audit_logging_setup import LoggingService
13+ from utils .aws_transient_error_check import is_transient_error
1314from utils .dynamo_query_filter_builder import DynamoQueryFilterBuilder
1415from utils .dynamo_utils import build_transaction_item
1516from utils .exceptions import DocumentReviewException
@@ -49,7 +50,7 @@ def query_docs_pending_review_by_custodian_with_limit(
4950 ) -> tuple [list [DocumentUploadReviewReference ], dict | None ]:
5051 logger .info (f"Getting review document references for custodian: { ods_code } " )
5152
52- filter_expression = self .build_review_query_filter (
53+ filter_expression = self .build_review_dynamo_filter (
5354 nhs_number = nhs_number , uploader = uploader
5455 )
5556
@@ -72,7 +73,7 @@ def query_docs_pending_review_by_custodian_with_limit(
7273
7374 except ClientError as e :
7475 logger .error (e )
75- raise DocumentReviewException ("Failed to query document reviews " )
76+ raise DocumentReviewException ("Error querying document review references " )
7677
7778 def _validate_review_references (
7879 self , items : list [dict ]
@@ -85,9 +86,7 @@ def _validate_review_references(
8586 return review_references
8687 except ValidationError as e :
8788 logger .error (e )
88- raise DocumentReviewException (
89- "Failed to validate document review references"
90- )
89+ raise DocumentReviewException ("Error validating document review references" )
9190
9291 def get_document (
9392 self , document_id : str , version : int | None
@@ -120,10 +119,29 @@ def update_document_review_custodian(
120119
121120 self .update_document (
122121 document = review ,
123- update_key = {"ID" : review .id , "Version" : review .version },
122+ key_pair = {"ID" : review .id , "Version" : review .version },
124123 update_fields_name = review_update_field ,
125124 )
126125
126+ def update_document_review_status (
127+ self ,
128+ review_document : DocumentUploadReviewReference ,
129+ condition_expression : str | ConditionBase | None = None ,
130+ ):
131+ review_update_field = {"review_status" , "files" }
132+ try :
133+ self .update_document (
134+ document = review_document ,
135+ key_pair = {"ID" : review_document .id , "Version" : review_document .version },
136+ update_fields_name = review_update_field ,
137+ condition_expression = condition_expression ,
138+ )
139+ except ClientError as e :
140+ logger .error (e )
141+ if is_transient_error (e ):
142+ raise e
143+ raise DocumentReviewException ("Error updating document review status" )
144+
127145 def get_document_review_by_id (self , document_id : str , document_version : int ):
128146 return self .get_item (document_id , {"Version" : document_version })
129147
@@ -169,7 +187,7 @@ def update_document_review_for_patient(
169187 try :
170188 return self .update_document (
171189 document = review_update ,
172- update_key = {"ID" : review_update .id , "Version" : review_update .version },
190+ key_pair = {"ID" : review_update .id , "Version" : review_update .version },
173191 update_fields_name = field_names ,
174192 condition_expression = condition_expression ,
175193 )
@@ -273,13 +291,14 @@ def delete_document_review_files(
273291 logger .warning (f"Skipping file deletion for { file .file_name } " )
274292 continue
275293
276- def build_review_query_filter (
277- self , nhs_number : str | None = None , uploader : str | None = None
294+ def build_review_dynamo_filter (
295+ self , nhs_number : str | None = None , uploader : str | None = None , status : DocumentReviewStatus | None = DocumentReviewStatus . PENDING_REVIEW
278296 ) -> Attr | ConditionBase :
279297 filter_builder = DynamoQueryFilterBuilder ()
280- filter_builder .add_condition (
281- "ReviewStatus" , AttributeOperator .EQUAL , DocumentReviewStatus .PENDING_REVIEW
282- )
298+ if status :
299+ filter_builder .add_condition (
300+ "ReviewStatus" , AttributeOperator .EQUAL , status
301+ )
283302
284303 if nhs_number :
285304 filter_builder .add_condition (
0 commit comments