diff --git a/apps/api/src/services/approval_db.py b/apps/api/src/services/approval_db.py index c512aa9e..dc418e0c 100644 --- a/apps/api/src/services/approval_db.py +++ b/apps/api/src/services/approval_db.py @@ -171,8 +171,21 @@ class ApprovalDBService: 資料庫授權服務 - 替代 in-memory TrustEngine 所有操作皆為資料庫 CRUD,重啟後資料保持 + + Phase 16 R3.4: 支援 Repository 注入 + - 有注入 repository: 使用 Repository 層 + - 無注入: 使用內嵌 DB 操作 (向下相容) """ + def __init__(self, repository=None): + """ + 初始化 ApprovalDBService + + Args: + repository: IApprovalRepository 實例 (可選,Phase 16 DI) + """ + self._repository = repository + async def create_approval( self, request: ApprovalRequestCreate, @@ -342,7 +355,14 @@ class ApprovalDBService: async def get_approval(self, approval_id: UUID) -> ApprovalRequest | None: """ 取得單一授權請求 + + Phase 16 R3.4: 支援 Repository 注入 """ + # Phase 16: 使用 Repository (如果有注入) + if self._repository: + return await self._repository.get_by_id(approval_id) + + # Legacy: 內嵌 DB 操作 async with get_db_context() as db: result = await db.execute( select(ApprovalRecord).where(ApprovalRecord.id == str(approval_id)) @@ -357,7 +377,14 @@ class ApprovalDBService: async def get_pending_approvals(self) -> list[ApprovalRequest]: """ 取得所有待簽核請求 + + Phase 16 R3.4: 支援 Repository 注入 """ + # Phase 16: 使用 Repository (如果有注入) + if self._repository: + return await self._repository.get_pending() + + # Legacy: 內嵌 DB 操作 now = datetime.now(UTC) async with get_db_context() as db: @@ -734,11 +761,25 @@ _approval_service: ApprovalDBService | None = None _timeline_service: TimelineDBService | None = None -def get_approval_service() -> ApprovalDBService: - """取得授權服務實例""" +def get_approval_service(use_repository: bool = False) -> ApprovalDBService: + """ + 取得授權服務實例 + + Args: + use_repository: 是否使用 Repository 層 (Phase 16 R3.4) + + Phase 16: 絞殺者模式 + - use_repository=False: 使用內嵌 DB 操作 (預設,向下相容) + - use_repository=True: 使用 ApprovalDBRepository + """ global _approval_service if _approval_service is None: - _approval_service = ApprovalDBService() + if use_repository: + from src.repositories import get_approval_repository + _approval_service = ApprovalDBService(repository=get_approval_repository()) + logger.info("approval_service_with_repository") + else: + _approval_service = ApprovalDBService() return _approval_service