feat(cases): enforce purpose-bound case governance
Module Package Release / publish-packages (push) Successful in 12s
Module Package Release / publish-packages (push) Successful in 12s
This commit is contained in:
@@ -9,7 +9,7 @@ from urllib.parse import parse_qs, quote, urlsplit
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from govoplan_core.core.institutional import EvidenceReference
|
||||
from govoplan_cases.backend.domain import CaseRecord
|
||||
from govoplan_cases.backend.domain import DEFAULT_CASE_ACCESS_PURPOSE, CaseRecord
|
||||
from govoplan_cases.backend.service import CaseStoreError, get_case, update_case
|
||||
|
||||
|
||||
@@ -31,12 +31,14 @@ def link_case_evidence(
|
||||
recorded_at: datetime,
|
||||
change_reason: str,
|
||||
idempotency_key: str,
|
||||
purpose: str = DEFAULT_CASE_ACCESS_PURPOSE,
|
||||
) -> CaseRecord:
|
||||
base = _base_revision(
|
||||
session,
|
||||
principal,
|
||||
case_id=case_id,
|
||||
expected_revision=expected_revision,
|
||||
purpose=purpose,
|
||||
)
|
||||
evidence = _validated_evidence(reference, tenant_id=base.reference.tenant_id)
|
||||
if any(item.evidence_id == evidence.evidence_id for item in base.evidence_refs):
|
||||
@@ -50,6 +52,7 @@ def link_case_evidence(
|
||||
recorded_at=recorded_at,
|
||||
change_reason=change_reason,
|
||||
idempotency_key=idempotency_key,
|
||||
purpose=purpose,
|
||||
)
|
||||
|
||||
|
||||
@@ -63,12 +66,14 @@ def unlink_case_evidence(
|
||||
recorded_at: datetime,
|
||||
change_reason: str,
|
||||
idempotency_key: str,
|
||||
purpose: str = DEFAULT_CASE_ACCESS_PURPOSE,
|
||||
) -> CaseRecord:
|
||||
base = _base_revision(
|
||||
session,
|
||||
principal,
|
||||
case_id=case_id,
|
||||
expected_revision=expected_revision,
|
||||
purpose=purpose,
|
||||
)
|
||||
evidence = next(
|
||||
(item for item in base.evidence_refs if item.evidence_id == evidence_id),
|
||||
@@ -89,6 +94,7 @@ def unlink_case_evidence(
|
||||
recorded_at=recorded_at,
|
||||
change_reason=change_reason,
|
||||
idempotency_key=idempotency_key,
|
||||
purpose=purpose,
|
||||
)
|
||||
|
||||
|
||||
@@ -119,12 +125,14 @@ def _base_revision(
|
||||
*,
|
||||
case_id: str,
|
||||
expected_revision: int,
|
||||
purpose: str,
|
||||
) -> CaseRecord:
|
||||
base = get_case(
|
||||
session,
|
||||
principal,
|
||||
case_id=case_id,
|
||||
revision=expected_revision,
|
||||
purpose=purpose,
|
||||
)
|
||||
if base is None:
|
||||
raise LookupError("Case revision not found.")
|
||||
|
||||
Reference in New Issue
Block a user