From 5aa86a86108be86f2e09d7b471892f07c2a6c95a Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Fri, 24 Apr 2026 10:22:41 +0000 Subject: [PATCH] address fields are not optional --- backend/app/db/models/portfolio.py | 4 ++-- datatypes/epc/domain/epc_property_data.py | 6 +++--- datatypes/epc/domain/mapper.py | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/app/db/models/portfolio.py b/backend/app/db/models/portfolio.py index 48f8b1ed..452c8d36 100644 --- a/backend/app/db/models/portfolio.py +++ b/backend/app/db/models/portfolio.py @@ -113,8 +113,8 @@ class PropertyModel(Base): Enum(PortfolioStatus, values_callable=lambda x: [e.value for e in x]), nullable=False, ) - address = Column(Text) - postcode = Column(Text) + address = Column(Text, nullable=False) + postcode = Column(Text, nullable=False) has_pre_condition_report = Column(Boolean) has_recommendations = Column(Boolean) created_at = Column( diff --git a/datatypes/epc/domain/epc_property_data.py b/datatypes/epc/domain/epc_property_data.py index d173282d..8f949b0f 100644 --- a/datatypes/epc/domain/epc_property_data.py +++ b/datatypes/epc/domain/epc_property_data.py @@ -257,6 +257,9 @@ class EpcPropertyData: inspection_date: date tenure: str # str in site notes; stringified int (e.g. "1") from API transaction_type: str # str in site notes; stringified int from API + address_line_1: str + postcode: str + post_town: str # Elements roofs: List[EnergyElement] @@ -292,9 +295,6 @@ class EpcPropertyData: assessment_type: Optional[str] = None # not available from site notes sap_version: Optional[float] = None # not available from site notes uprn: Optional[int] = None # not available from site notes - address_line_1: Optional[str] = None # not available from site notes - postcode: Optional[str] = None # not available from site notes - post_town: Optional[str] = None # not available from site notes status: Optional[str] = None # not available from site notes window: Optional[EnergyElement] = None # not available from site notes lighting: Optional[EnergyElement] = None # not available from site notes diff --git a/datatypes/epc/domain/mapper.py b/datatypes/epc/domain/mapper.py index 196587a4..1afade5c 100644 --- a/datatypes/epc/domain/mapper.py +++ b/datatypes/epc/domain/mapper.py @@ -85,11 +85,11 @@ class EpcPropertyDataMapper: general = survey.general metadata = survey.inspection_metadata address_parts = [p.strip() for p in metadata.property_address.split(", ")] - postcode = address_parts[-1] if len(address_parts) >= 1 else None + postcode = address_parts[-1] if address_parts else "" post_town = ( address_parts[-3] if len(address_parts) >= 4 - else (address_parts[-2] if len(address_parts) >= 3 else None) + else (address_parts[-2] if len(address_parts) >= 3 else "") ) address_line_1 = ( ", ".join(address_parts[:-3]) @@ -97,7 +97,7 @@ class EpcPropertyDataMapper: else ( ", ".join(address_parts[:-2]) if len(address_parts) >= 3 - else address_parts[0] if address_parts else None + else address_parts[0] if address_parts else "" ) )