services.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from app.db.models import NodeRun, WorkflowRun
  2. from app.domain.repositories import NodeRunRepository, WorkflowRunRepository
  3. from app.schemas.run import RunCreateRequest
  4. class RuntimeApplicationService:
  5. def __init__(
  6. self,
  7. workflow_run_repository: WorkflowRunRepository,
  8. node_run_repository: NodeRunRepository,
  9. ) -> None:
  10. self.workflow_run_repository = workflow_run_repository
  11. self.node_run_repository = node_run_repository
  12. def create_run(self, payload: RunCreateRequest) -> tuple[WorkflowRun, NodeRun | None]:
  13. workflow_run = self.workflow_run_repository.create(
  14. tenant_id=payload.tenant_id,
  15. app_id=payload.app_id,
  16. app_version_id=payload.app_version_id,
  17. workflow_id=payload.workflow_id,
  18. workflow_version_id=payload.workflow_version_id,
  19. session_id=payload.session_id,
  20. parent_run_id=payload.parent_run_id,
  21. root_run_id=payload.root_run_id,
  22. run_type=payload.run_type,
  23. trigger_type=payload.trigger_type,
  24. priority=payload.priority,
  25. )
  26. initial_node = None
  27. if payload.initial_node is not None:
  28. self.workflow_run_repository.update_node_count(
  29. run_id=workflow_run.id,
  30. current_node_count=1,
  31. )
  32. initial_node = self.node_run_repository.create(
  33. tenant_id=payload.tenant_id,
  34. run_id=workflow_run.id,
  35. node_id=payload.initial_node.node_id,
  36. node_type=payload.initial_node.node_type,
  37. status=payload.initial_node.status,
  38. )
  39. return workflow_run, initial_node
  40. def list_runs(self, tenant_id: str, session_id: str | None = None) -> list[WorkflowRun]:
  41. return self.workflow_run_repository.list_by_scope(tenant_id=tenant_id, session_id=session_id)
  42. def list_node_runs(self, tenant_id: str, run_id: str) -> list[NodeRun]:
  43. return self.node_run_repository.list_by_run(tenant_id=tenant_id, run_id=run_id)