33from common .log_decorator import logging_decorator
44from common .aws_lambda_event import AwsLambdaEvent
55from record_processor import process_record
6+ import json
67'''
78Lambda function handler for processing SQS events.Lambda for ID Sync. Fired by SQS
89'''
910
1011
12+ class IdSyncException (Exception ):
13+ """Custom exception for ID Sync errors."""
14+ def __init__ (self , message : str , nhs_numbers : list = None , exception = None ):
15+ self .message = message
16+ self .nhs_numbers = nhs_numbers
17+ self .exception = exception
18+ super ().__init__ (message )
19+
20+
1121@logging_decorator (prefix = "id_sync" , stream_name = STREAM_NAME )
1222def handler (event_data , _ ):
1323
@@ -17,25 +27,28 @@ def handler(event_data, _):
1727 if record_count > 0 :
1828 logger .info ("id_sync processing event with %d records" , record_count )
1929 error_count = 0
20- file_keys = []
30+ nhs_numbers = []
2131 for record in event .records :
2232 record_result = process_record (record , None )
23- file_keys .append (record_result ["file_key " ])
33+ nhs_numbers .append (record_result ["nhs_number " ])
2434 if record_result ["status" ] == "error" :
2535 error_count += 1
2636 if error_count > 0 :
27- logger . error ( "id_sync processed %d records with %d errors" , record_count , error_count )
28- return { "status" : "error" , "message" : f"Processed { record_count } records with { error_count } errors" ,
29- "file_keys" : file_keys }
37+ raise IdSyncException ( message = f"Processed { record_count } records with { error_count } errors" ,
38+ nhs_numbers = nhs_numbers )
39+
3040 else :
31- logger . info ( "id_sync successfully processed all %d records", record_count )
32- return { "status" : "success" , "message" : f"Successfully processed { record_count } records" ,
33- "file_keys " : file_keys }
41+ msg = f"Successfully processed { record_count } records"
42+ logger . info ( msg )
43+ return { "status" : "success" , "message" : msg , "nhs_numbers " : nhs_numbers }
3444 else :
3545 logger .info ("No records found in event" )
3646 return {"status" : "success" , "message" : "No records found in event" }
3747
38- except Exception :
48+ except IdSyncException as e :
49+ logger .exception (f"id_sync error: { e .message } " )
50+ raise e
51+ except Exception as e :
3952 msg = "Error processing id_sync event"
4053 logger .exception (msg )
41- return { "status" : "error" , " message" : msg }
54+ raise IdSyncException ( message = msg , exception = e )
0 commit comments