Model/repositories/property/property_overrides_postgres_reader.py
Jun-te Kim c5cffd9047 Read a Property's resolved landlord overrides as a faithful value-space snapshot 🟩
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 15:14:53 +00:00

45 lines
1.6 KiB
Python

"""Postgres adapter for the ``property_overrides`` read side.
Read-only and uow-independent: ``property_overrides`` is committed reference
data the ``bulk_upload_finaliser`` Lambda writes at Finalise, long before First
Run executes — there is no transactional coupling to the ingestion run, so this
opens its own short read session per call via the injected session factory
(mirroring the composition root's ``lambda: Session(engine)``).
"""
from __future__ import annotations
from collections.abc import Callable
from sqlmodel import Session, col, select
from infrastructure.postgres.property_override_table import PropertyOverrideRow
from repositories.property.property_overrides_reader import (
PropertyOverridesReader,
ResolvedPropertyOverride,
ResolvedPropertyOverrides,
)
class PropertyOverridesPostgresReader(PropertyOverridesReader):
def __init__(self, session_factory: Callable[[], Session]) -> None:
self._session_factory = session_factory
def overrides_for(self, property_id: int) -> ResolvedPropertyOverrides:
with self._session_factory() as session:
rows = session.exec(
select(PropertyOverrideRow).where(
col(PropertyOverrideRow.property_id) == property_id
)
).all()
return ResolvedPropertyOverrides(
rows=tuple(
ResolvedPropertyOverride(
override_component=row.override_component,
building_part=row.building_part,
override_value=row.override_value,
)
for row in rows
)
)