feat: honor temporal read context
This commit is contained in:
@@ -12,6 +12,8 @@ from govoplan_core.core.institutional import (
|
||||
ServiceDefinition,
|
||||
TemporalRevision,
|
||||
)
|
||||
from govoplan_core.core.temporal import TemporalDataContext
|
||||
from govoplan_core.db.temporal import apply_temporal_revision_filter
|
||||
from govoplan_services.backend.db.models import ServiceDefinitionRevision
|
||||
|
||||
|
||||
@@ -116,6 +118,7 @@ def get_service_definition(
|
||||
*,
|
||||
service_id: str,
|
||||
revision: str | None = None,
|
||||
temporal_context: TemporalDataContext | None = None,
|
||||
) -> ServiceDefinition | None:
|
||||
tenant_id = _principal_tenant(principal)
|
||||
query = session.query(ServiceDefinitionRevision).filter(
|
||||
@@ -123,7 +126,11 @@ def get_service_definition(
|
||||
ServiceDefinitionRevision.service_id == service_id,
|
||||
)
|
||||
if revision is None:
|
||||
query = query.filter(ServiceDefinitionRevision.superseded_at.is_(None))
|
||||
query = apply_temporal_revision_filter(
|
||||
query,
|
||||
ServiceDefinitionRevision,
|
||||
context=temporal_context,
|
||||
)
|
||||
else:
|
||||
query = query.filter(ServiceDefinitionRevision.revision == revision)
|
||||
row = query.order_by(ServiceDefinitionRevision.recorded_at.desc()).first()
|
||||
@@ -143,7 +150,10 @@ def list_service_definitions(
|
||||
raise ServiceStoreError("Service list limit must be between 1 and 200.")
|
||||
statement = session.query(ServiceDefinitionRevision).filter(
|
||||
ServiceDefinitionRevision.tenant_id == tenant_id,
|
||||
ServiceDefinitionRevision.superseded_at.is_(None),
|
||||
)
|
||||
statement = apply_temporal_revision_filter(
|
||||
statement,
|
||||
ServiceDefinitionRevision,
|
||||
)
|
||||
if publication_states is not None:
|
||||
statement = statement.filter(
|
||||
@@ -180,10 +190,13 @@ class SqlServiceDefinitionProvider:
|
||||
principal,
|
||||
service_id=reference.object_id,
|
||||
revision=reference.version,
|
||||
temporal_context=(
|
||||
TemporalDataContext(validity_mode="at", valid_at=effective_at)
|
||||
if effective_at is not None and reference.version is None
|
||||
else None
|
||||
),
|
||||
)
|
||||
if item is None or (
|
||||
effective_at is not None and not item.temporal.effective_at(effective_at)
|
||||
):
|
||||
if item is None or (effective_at is not None and reference.version is not None and not item.temporal.effective_at(effective_at)):
|
||||
return None
|
||||
return item
|
||||
|
||||
|
||||
Reference in New Issue
Block a user