11import uuid
2+ from datetime import datetime , timezone
23
34from enums .document_review_status import DocumentReviewStatus
45from enums .metadata_field_names import DocumentReferenceMetadataFields
56from enums .snomed_codes import SnomedCodes
6- from pydantic import BaseModel , ConfigDict , Field , model_validator
7+ from pydantic import BaseModel , ConfigDict , Field , field_validator , model_validator
78from pydantic .alias_generators import to_camel , to_pascal
89from utils .exceptions import InvalidNhsNumberException
910from utils .utilities import validate_nhs_number
@@ -17,7 +18,7 @@ class DocumentReviewFileDetails(BaseModel):
1718 )
1819
1920 file_name : str
20- file_location : str
21+ file_location : str | None = None
2122 presigned_url : str | None = None
2223
2324
@@ -37,10 +38,12 @@ class DocumentUploadReviewReference(BaseModel):
3738 review_status : DocumentReviewStatus = Field (
3839 default = DocumentReviewStatus .PENDING_REVIEW
3940 )
40- review_reason : str
41+ review_reason : str | None = None
4142 review_date : int | None = Field (default = None )
4243 reviewer : str | None = Field (default = None )
43- upload_date : int
44+ upload_date : int = Field (
45+ default_factory = lambda : int (datetime .now (timezone .utc ).timestamp ()),
46+ )
4447 files : list [DocumentReviewFileDetails ] = Field (min_length = 1 )
4548 nhs_number : str
4649 version : int = Field (default = 1 )
@@ -126,3 +129,29 @@ def validate_reassign_nhs_number(self):
126129 except InvalidNhsNumberException :
127130 raise ValueError ("Invalid NHS number" )
128131 return self
132+
133+
134+ class DocumentReviewUploadEvent (BaseModel ):
135+ model_config = ConfigDict (
136+ validate_by_alias = True ,
137+ populate_by_name = True ,
138+ validate_by_name = True ,
139+ alias_generator = to_camel ,
140+ use_enum_values = True ,
141+ extra = "forbid" ,
142+ )
143+
144+ nhs_number : str
145+ snomed_code : SnomedCodes
146+ documents : list = Field (min_length = 1 , max_length = 1 )
147+
148+ @field_validator ("snomed_code" , mode = "before" )
149+ @classmethod
150+ def check_snomed_code (cls , value ) -> SnomedCodes | None :
151+ return SnomedCodes .find_by_code (value )
152+
153+ @field_validator ("nhs_number" , mode = "before" )
154+ @classmethod
155+ def verify_nhs_number (cls , value ) -> str | None :
156+ if validate_nhs_number (value ):
157+ return value
0 commit comments