Files
ITWorx_MCP_Hub-Public/services/control_api/persistence/services.py
T

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)