mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 15:38:19 +08:00
refactor: 推进后端分层架构治理
This commit is contained in:
+57
-2
@@ -1,6 +1,8 @@
|
||||
from typing import List, Tuple, Optional, Any, Coroutine, Sequence
|
||||
from typing import List, Mapping, Tuple, Optional, Any
|
||||
|
||||
from app.db import DbOper
|
||||
from sqlalchemy import delete as sqlalchemy_delete
|
||||
|
||||
from app.db.base import DbOper
|
||||
from app.db.models.workflow import Workflow
|
||||
|
||||
|
||||
@@ -25,6 +27,34 @@ class WorkflowOper(DbOper):
|
||||
"""
|
||||
return Workflow.get(self._db, wid)
|
||||
|
||||
def stage_state(self, workflow_id: int, state: str) -> bool:
|
||||
"""暂存工作流状态变更,不由模型方法自行提交。"""
|
||||
workflow = self.get(workflow_id)
|
||||
if not workflow:
|
||||
return False
|
||||
workflow.state = state
|
||||
return True
|
||||
|
||||
def stage_update(
|
||||
self,
|
||||
workflow_id: int,
|
||||
payload: Mapping[str, Any],
|
||||
) -> Optional[Workflow]:
|
||||
"""暂存工作流字段更新并返回同一会话中的对象。"""
|
||||
workflow = self.get(workflow_id)
|
||||
if not workflow:
|
||||
return None
|
||||
for key, value in payload.items():
|
||||
if key != "id":
|
||||
setattr(workflow, key, value)
|
||||
return workflow
|
||||
|
||||
def stage_delete(self, workflow_id: int) -> None:
|
||||
"""暂存工作流删除,由请求级 UnitOfWork 统一提交。"""
|
||||
self._db.execute(
|
||||
sqlalchemy_delete(Workflow).where(Workflow.id == workflow_id)
|
||||
)
|
||||
|
||||
async def async_get(self, wid: int) -> Optional[Workflow]:
|
||||
"""
|
||||
异步查询单个工作流
|
||||
@@ -73,6 +103,31 @@ class WorkflowOper(DbOper):
|
||||
"""
|
||||
return await Workflow.async_get_by_name(self._db, name)
|
||||
|
||||
async def stage_create(self, payload: Mapping[str, Any]) -> Workflow:
|
||||
"""暂存新工作流,不在操作器内提交事务。"""
|
||||
workflow = Workflow(**dict(payload))
|
||||
self._db.add(workflow)
|
||||
await self._db.flush()
|
||||
return workflow
|
||||
|
||||
async def stage_reset(
|
||||
self,
|
||||
workflow_id: int,
|
||||
reset_count: bool = False,
|
||||
) -> Optional[Workflow]:
|
||||
"""暂存工作流重置字段,不触发模型装饰器的隐式提交。"""
|
||||
workflow = await self.async_get(workflow_id)
|
||||
if not workflow:
|
||||
return None
|
||||
workflow.state = "W"
|
||||
workflow.result = None
|
||||
workflow.current_action = None
|
||||
workflow.context = {}
|
||||
workflow.execution_state = {}
|
||||
if reset_count:
|
||||
workflow.run_count = 0
|
||||
return workflow
|
||||
|
||||
def start(self, wid: int) -> bool:
|
||||
"""
|
||||
启动
|
||||
|
||||
Reference in New Issue
Block a user