mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
45 lines
1.6 KiB
Python
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
|
|
)
|
|
)
|