57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
"""Application service façade for scoped persistence operations."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from uuid import UUID
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from packages.hub_core.domain import Approval, AuditEvent, Connector, Operation, ReconcileRun, Scope
|
|
|
|
from .repositories import (
|
|
ApprovalRepository,
|
|
AuditEventRepository,
|
|
ConnectorRepository,
|
|
OperationRepository,
|
|
ReconcileRunRepository,
|
|
)
|
|
|
|
|
|
class ControlPlanePersistenceService:
|
|
"""Explicit service boundary used by future API/worker adapters."""
|
|
|
|
def __init__(self, session: Session, scope: Scope) -> None:
|
|
self.session = session
|
|
self.scope = scope
|
|
|
|
def transition_connector_health(
|
|
self, connector_id: UUID, target: str, *, expected_version: int
|
|
) -> Connector:
|
|
return ConnectorRepository(self.session, self.scope).transition_health(
|
|
connector_id, target, expected_version=expected_version
|
|
)
|
|
|
|
def transition_reconcile_run(
|
|
self, run_id: UUID, target: str, *, expected_version: int
|
|
) -> ReconcileRun:
|
|
return ReconcileRunRepository(self.session, self.scope).transition_status(
|
|
run_id, target, expected_version=expected_version
|
|
)
|
|
|
|
def transition_operation(
|
|
self, operation_id: UUID, target: str, *, expected_version: int
|
|
) -> Operation:
|
|
return OperationRepository(self.session, self.scope).transition_state(
|
|
operation_id, target, expected_version=expected_version
|
|
)
|
|
|
|
def transition_approval(
|
|
self, approval_id: UUID, target: str, *, expected_version: int
|
|
) -> Approval:
|
|
return ApprovalRepository(self.session, self.scope).transition_state(
|
|
approval_id, target, expected_version=expected_version
|
|
)
|
|
|
|
def record_audit(self, event: AuditEvent) -> AuditEvent:
|
|
return AuditEventRepository(self.session, self.scope).create(event)
|