feat(cases): link provider-owned evidence references
Module Package Release / publish-packages (push) Successful in 11s
Module Package Release / publish-packages (push) Successful in 11s
This commit is contained in:
@@ -33,6 +33,8 @@ from govoplan_cases.backend.manifest import (
|
||||
)
|
||||
from govoplan_cases.backend.schemas import (
|
||||
CaseDecisionRequest,
|
||||
CaseEvidenceLinkRequest,
|
||||
CaseEvidenceUnlinkRequest,
|
||||
CaseHistoryResponse,
|
||||
CaseListResponse,
|
||||
CaseStatusWriteRequest,
|
||||
@@ -41,6 +43,10 @@ from govoplan_cases.backend.schemas import (
|
||||
CaseUpdateRequest,
|
||||
CaseWriteRequest,
|
||||
)
|
||||
from govoplan_cases.backend.evidence_links import (
|
||||
link_case_evidence,
|
||||
unlink_case_evidence,
|
||||
)
|
||||
from govoplan_cases.backend.decision_path import (
|
||||
CaseDecisionCommand,
|
||||
CaseDecisionError,
|
||||
@@ -349,6 +355,72 @@ def api_update_case(
|
||||
return item.to_dict()
|
||||
|
||||
|
||||
@router.post("/{case_id}/evidence-links", response_model=dict[str, Any])
|
||||
def api_link_case_evidence(
|
||||
case_id: str,
|
||||
payload: CaseEvidenceLinkRequest,
|
||||
session: Session = Depends(get_session),
|
||||
principal: ApiPrincipal = Depends(get_api_principal),
|
||||
) -> dict[str, Any]:
|
||||
_require(principal, UPDATE_SCOPE)
|
||||
try:
|
||||
item = link_case_evidence(
|
||||
session,
|
||||
principal,
|
||||
case_id=case_id,
|
||||
expected_revision=payload.expected_revision,
|
||||
reference=payload.reference.model_dump(),
|
||||
recorded_at=payload.recorded_at,
|
||||
change_reason=payload.change_reason,
|
||||
idempotency_key=payload.idempotency_key,
|
||||
)
|
||||
session.commit()
|
||||
except (
|
||||
CaseStoreError,
|
||||
InstitutionalContextError,
|
||||
LookupError,
|
||||
PermissionError,
|
||||
) as exc:
|
||||
session.rollback()
|
||||
raise _error(exc) from exc
|
||||
return item.to_dict()
|
||||
|
||||
|
||||
@router.post(
|
||||
"/{case_id}/evidence-links/{evidence_id}/unlink",
|
||||
response_model=dict[str, Any],
|
||||
)
|
||||
def api_unlink_case_evidence(
|
||||
case_id: str,
|
||||
evidence_id: str,
|
||||
payload: CaseEvidenceUnlinkRequest,
|
||||
session: Session = Depends(get_session),
|
||||
principal: ApiPrincipal = Depends(get_api_principal),
|
||||
) -> dict[str, Any]:
|
||||
_require(principal, UPDATE_SCOPE)
|
||||
try:
|
||||
item = unlink_case_evidence(
|
||||
session,
|
||||
principal,
|
||||
case_id=case_id,
|
||||
evidence_id=evidence_id,
|
||||
expected_revision=payload.expected_revision,
|
||||
recorded_at=payload.recorded_at,
|
||||
change_reason=payload.change_reason,
|
||||
idempotency_key=payload.idempotency_key,
|
||||
)
|
||||
session.commit()
|
||||
except (
|
||||
CaseStoreError,
|
||||
InstitutionalContextError,
|
||||
LookupError,
|
||||
PermissionError,
|
||||
) as exc:
|
||||
session.rollback()
|
||||
raise _error(exc) from exc
|
||||
return item.to_dict()
|
||||
|
||||
|
||||
@router.get(
|
||||
"/{case_id}/share-target-options",
|
||||
response_model=ReferenceOptionListResponse,
|
||||
|
||||
Reference in New Issue
Block a user