Skip to content

Commit ba7881b

Browse files
committed
fix: enforce required thing_id for NMA_SurfaceWaterData and add validation
1 parent 2d4d8ff commit ba7881b

2 files changed

Lines changed: 13 additions & 63 deletions

File tree

alembic/versions/i2c3d4e5f6a7_make_surface_water_data_thing_id_nullable.py

Lines changed: 0 additions & 57 deletions
This file was deleted.

db/nma_legacy.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -578,9 +578,9 @@ class NMA_SurfaceWaterData(Base):
578578
object_id: Mapped[int] = mapped_column("OBJECTID", Integer, primary_key=True)
579579

580580
# FK
581-
# FK to Thing - optional when legacy rows cannot be mapped to a Thing.
582-
thing_id: Mapped[Optional[int]] = mapped_column(
583-
Integer, ForeignKey("thing.id", ondelete="CASCADE"), nullable=True
581+
# FK to Thing - required for all SurfaceWaterData records
582+
thing_id: Mapped[int] = mapped_column(
583+
Integer, ForeignKey("thing.id", ondelete="CASCADE"), nullable=False
584584
)
585585

586586
# Legacy PK (for audit)
@@ -615,9 +615,16 @@ class NMA_SurfaceWaterData(Base):
615615
data_source: Mapped[Optional[str]] = mapped_column("DataSource", String(255))
616616

617617
# Relationships
618-
thing: Mapped[Optional["Thing"]] = relationship(
619-
"Thing", back_populates="surface_water_data"
620-
)
618+
thing: Mapped["Thing"] = relationship("Thing", back_populates="surface_water_data")
619+
620+
@validates("thing_id")
621+
def validate_thing_id(self, key, value):
622+
"""Prevent orphan NMA_SurfaceWaterData - must have a parent Thing."""
623+
if value is None:
624+
raise ValueError(
625+
"NMA_SurfaceWaterData requires a parent Thing (thing_id cannot be None)"
626+
)
627+
return value
621628

622629

623630
class NMA_SurfaceWaterPhotos(Base):

0 commit comments

Comments
 (0)