feat(api): Phase 16 R3.4 ApprovalDBService DI 重構
變更: - ApprovalDBService 新增 __init__(repository) 建構子 - get_approval() 支援 Repository 注入 - get_pending_approvals() 支援 Repository 注入 - get_approval_service(use_repository=True) 啟用 DI 絞殺者模式: - use_repository=False (預設): 內嵌 DB 操作 - use_repository=True: 使用 ApprovalDBRepository Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user