services.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from app.db.models import AppDefinition, AppVersion, WorkflowDefinitionModel, WorkflowVersion
  2. from app.domain.repositories import (
  3. AppDefinitionRepository,
  4. AppVersionRepository,
  5. WorkflowDefinitionRepository,
  6. WorkflowVersionRepository,
  7. )
  8. from app.schemas.app import AppCreateRequest, AppVersionCreateRequest
  9. from app.schemas.workflow import WorkflowCreateRequest, WorkflowVersionCreateRequest
  10. class WorkflowApplicationService:
  11. def __init__(
  12. self,
  13. app_repository: AppDefinitionRepository,
  14. workflow_repository: WorkflowDefinitionRepository,
  15. app_version_repository: AppVersionRepository,
  16. workflow_version_repository: WorkflowVersionRepository,
  17. ) -> None:
  18. self.app_repository = app_repository
  19. self.workflow_repository = workflow_repository
  20. self.app_version_repository = app_version_repository
  21. self.workflow_version_repository = workflow_version_repository
  22. def create_app(self, payload: AppCreateRequest) -> AppDefinition:
  23. return self.app_repository.create(
  24. tenant_id=payload.tenant_id,
  25. code=payload.code,
  26. name=payload.name,
  27. description=payload.description,
  28. owner_user_id=payload.owner_user_id,
  29. settings_json=payload.settings_json,
  30. )
  31. def list_apps(self, tenant_id: str) -> list[AppDefinition]:
  32. return self.app_repository.list_by_tenant(tenant_id)
  33. def create_workflow(self, payload: WorkflowCreateRequest) -> WorkflowDefinitionModel:
  34. return self.workflow_repository.create(
  35. tenant_id=payload.tenant_id,
  36. app_id=payload.app_id,
  37. code=payload.code,
  38. name=payload.name,
  39. workflow_type=payload.workflow_type,
  40. )
  41. def list_workflows(self, tenant_id: str, app_id: str | None = None) -> list[WorkflowDefinitionModel]:
  42. return self.workflow_repository.list_by_scope(tenant_id=tenant_id, app_id=app_id)
  43. def create_workflow_version(self, payload: WorkflowVersionCreateRequest) -> WorkflowVersion:
  44. return self.workflow_version_repository.create(
  45. tenant_id=payload.tenant_id,
  46. workflow_id=payload.workflow_id,
  47. dsl_json=payload.dsl_json,
  48. compiled_plan_json=payload.compiled_plan_json,
  49. schema_version=payload.schema_version,
  50. checksum=payload.checksum,
  51. status=payload.status,
  52. )
  53. def list_workflow_versions(self, tenant_id: str, workflow_id: str) -> list[WorkflowVersion]:
  54. return self.workflow_version_repository.list_by_workflow(
  55. tenant_id=tenant_id,
  56. workflow_id=workflow_id,
  57. )
  58. def get_workflow_version(self, tenant_id: str, workflow_version_id: str) -> WorkflowVersion | None:
  59. return self.workflow_version_repository.get_by_id(
  60. tenant_id=tenant_id,
  61. workflow_version_id=workflow_version_id,
  62. )
  63. def create_app_version(self, payload: AppVersionCreateRequest) -> AppVersion:
  64. return self.app_version_repository.create(
  65. tenant_id=payload.tenant_id,
  66. app_id=payload.app_id,
  67. workflow_version_id=payload.workflow_version_id,
  68. status=payload.status,
  69. published_by=payload.published_by,
  70. changelog=payload.changelog,
  71. )
  72. def list_app_versions(self, tenant_id: str, app_id: str) -> list[AppVersion]:
  73. return self.app_version_repository.list_by_app(tenant_id=tenant_id, app_id=app_id)