refactor: isolate workflow queries

This commit is contained in:
jxxghp
2026-08-23 14:06:14 +08:00
parent 4074fa4e42
commit be1071b6cd
8 changed files with 90 additions and 71 deletions
+9 -9
View File
@@ -7,7 +7,7 @@ from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy.ext.asyncio import AsyncSession
from app.db.base import Base, get_id_column
from app.db.decorators import db_query, async_db_query
from app.db.decorators import legacy_async_db_query, legacy_db_query
class Workflow(Base):
@@ -56,18 +56,18 @@ class Workflow(Base):
)
@classmethod
@db_query
@legacy_db_query
def get_enabled_workflows(cls, db):
return list(db.execute(select(cls).where(cls.state != 'P')).scalars().all())
@classmethod
@async_db_query
@legacy_async_db_query
async def async_get_enabled_workflows(cls, db: AsyncSession):
result = await db.execute(select(cls).where(cls.state != 'P'))
return list(result.scalars().all())
@classmethod
@db_query
@legacy_db_query
def get_timer_triggered_workflows(cls, db):
"""获取定时触发的工作流"""
return list(db.execute(select(cls).where(
@@ -81,7 +81,7 @@ class Workflow(Base):
)).scalars().all())
@classmethod
@async_db_query
@legacy_async_db_query
async def async_get_timer_triggered_workflows(cls, db: AsyncSession):
"""异步获取定时触发的工作流"""
result = await db.execute(select(cls).where(
@@ -96,7 +96,7 @@ class Workflow(Base):
return list(result.scalars().all())
@classmethod
@db_query
@legacy_db_query
def get_event_triggered_workflows(cls, db):
"""获取事件触发的工作流"""
return list(db.execute(select(cls).where(
@@ -107,7 +107,7 @@ class Workflow(Base):
)).scalars().all())
@classmethod
@async_db_query
@legacy_async_db_query
async def async_get_event_triggered_workflows(cls, db: AsyncSession):
"""异步获取事件触发的工作流"""
result = await db.execute(select(cls).where(
@@ -119,12 +119,12 @@ class Workflow(Base):
return list(result.scalars().all())
@classmethod
@db_query
@legacy_db_query
def get_by_name(cls, db, name: str):
return db.execute(select(cls).where(cls.name == name)).scalars().first()
@classmethod
@async_db_query
@legacy_async_db_query
async def async_get_by_name(cls, db: AsyncSession, name: str):
result = await db.execute(select(cls).where(cls.name == name))
return result.scalars().first()
+24 -10
View File
@@ -66,7 +66,7 @@ class WorkflowOper(DbOper):
新增工作流
"""
wf = Workflow(**kwargs)
if not wf.get_by_name(self._db, kwargs.get("name")):
if not self.get_by_name(kwargs.get("name")):
self._stage_create(wf)
return True, "新增工作流成功"
return False, "工作流已存在"
@@ -75,7 +75,7 @@ class WorkflowOper(DbOper):
"""
查询单个工作流
"""
return Workflow.get(self._db, wid)
return self._execute_sync_query(lambda session: Workflow.get(session, wid))
def stage_state(self, workflow_id: int, state: str) -> bool:
"""暂存工作流状态变更,不由模型方法自行提交。"""
@@ -109,49 +109,63 @@ class WorkflowOper(DbOper):
"""
异步查询单个工作流
"""
return await Workflow.async_get(self._db, wid)
return await self._execute_async_query(
lambda session: Workflow.async_get(session, wid)
)
def list(self) -> List[Workflow]:
"""
获取所有工作流列表
"""
return Workflow.list(self._db)
return self._execute_sync_query(lambda session: Workflow.list(session))
async def async_list(self) -> List[Workflow]:
"""
异步获取所有工作流列表
"""
return await Workflow.async_list(self._db)
return await self._execute_async_query(
lambda session: Workflow.async_list(session)
)
def list_enabled(self) -> List[Workflow]:
"""
获取启用的工作流列表
"""
return Workflow.get_enabled_workflows(self._db)
return self._execute_sync_query(
lambda session: Workflow.get_enabled_workflows(session)
)
def get_timer_triggered_workflows(self) -> List[Workflow]:
"""
获取定时触发的工作流列表
"""
return Workflow.get_timer_triggered_workflows(self._db)
return self._execute_sync_query(
lambda session: Workflow.get_timer_triggered_workflows(session)
)
def get_event_triggered_workflows(self) -> List[Workflow]:
"""
获取事件触发的工作流列表
"""
return Workflow.get_event_triggered_workflows(self._db)
return self._execute_sync_query(
lambda session: Workflow.get_event_triggered_workflows(session)
)
def get_by_name(self, name: str) -> Workflow:
"""
按名称获取工作流
"""
return Workflow.get_by_name(self._db, name)
return self._execute_sync_query(
lambda session: Workflow.get_by_name(session, name)
)
async def async_get_by_name(self, name: str) -> Optional[Workflow]:
"""
异步按名称获取工作流
"""
return await Workflow.async_get_by_name(self._db, name)
return await self._execute_async_query(
lambda session: Workflow.async_get_by_name(session, name)
)
async def stage_create(self, payload: Mapping[str, Any]) -> Workflow:
"""暂存新工作流,不在操作器内提交事务。"""