repositories.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from sqlalchemy import select
  2. from sqlalchemy.orm import Session
  3. from app.db.models import AppDefinition, AppConfig, WorkflowDefinitionModel, WorkflowConfig
  4. class AppDefinitionRepository:
  5. def __init__(self, db: Session) -> None:
  6. self.db = db
  7. def create(
  8. self,
  9. *,
  10. code: str,
  11. name: str,
  12. description: str | None,
  13. owner_user_id: str | None,
  14. settings_json: dict | None) -> AppDefinition:
  15. entity = AppDefinition(
  16. code=code,
  17. name=name,
  18. description=description,
  19. owner_user_id=owner_user_id,
  20. settings_json=settings_json)
  21. self.db.add(entity)
  22. self.db.commit()
  23. self.db.refresh(entity)
  24. return entity
  25. def list_all(self) -> list[AppDefinition]:
  26. stmt = select(AppDefinition)
  27. return list(self.db.scalars(stmt))
  28. class WorkflowDefinitionRepository:
  29. def __init__(self, db: Session) -> None:
  30. self.db = db
  31. def create(
  32. self,
  33. *,
  34. app_id: str,
  35. code: str,
  36. name: str,
  37. workflow_type: str) -> WorkflowDefinitionModel:
  38. entity = WorkflowDefinitionModel(
  39. app_id=app_id,
  40. code=code,
  41. name=name,
  42. workflow_type=workflow_type)
  43. self.db.add(entity)
  44. self.db.commit()
  45. self.db.refresh(entity)
  46. return entity
  47. def list_by_scope(self, *, app_id: str | None = None) -> list[WorkflowDefinitionModel]:
  48. stmt = select(WorkflowDefinitionModel)
  49. if app_id:
  50. stmt = stmt.where(WorkflowDefinitionModel.app_id == app_id)
  51. return list(self.db.scalars(stmt))
  52. class AppConfigRepository:
  53. def __init__(self, db: Session) -> None:
  54. self.db = db
  55. def create(
  56. self,
  57. *,
  58. app_id: str,
  59. workflow_config_id: str) -> AppConfig:
  60. entity = AppConfig(
  61. app_id=app_id,
  62. workflow_config_id=workflow_config_id)
  63. self.db.add(entity)
  64. self.db.commit()
  65. self.db.refresh(entity)
  66. return entity
  67. def list_by_app(self, *, app_id: str) -> list[AppConfig]:
  68. stmt = (
  69. select(AppConfig)
  70. .where(AppConfig.app_id == app_id)
  71. .order_by(AppConfig.created_time.desc())
  72. )
  73. return list(self.db.scalars(stmt))
  74. class WorkflowConfigRepository:
  75. def __init__(self, db: Session) -> None:
  76. self.db = db
  77. def create(
  78. self,
  79. *,
  80. workflow_id: str,
  81. dsl_json: dict | None,
  82. compiled_plan_json: dict | None,
  83. checksum: str | None) -> WorkflowConfig:
  84. entity = WorkflowConfig(
  85. workflow_id=workflow_id,
  86. dsl_json=dsl_json,
  87. compiled_plan_json=compiled_plan_json,
  88. checksum=checksum)
  89. self.db.add(entity)
  90. self.db.commit()
  91. self.db.refresh(entity)
  92. return entity
  93. def list_by_workflow(self, *, workflow_id: str) -> list[WorkflowConfig]:
  94. stmt = (
  95. select(WorkflowConfig)
  96. .where(WorkflowConfig.workflow_id == workflow_id)
  97. .order_by(WorkflowConfig.created_time.desc())
  98. )
  99. return list(self.db.scalars(stmt))
  100. def get_by_id(self, *, workflow_config_id: str) -> WorkflowConfig | None:
  101. stmt = (
  102. select(WorkflowConfig)
  103. .where(WorkflowConfig.id == workflow_config_id)
  104. )
  105. return self.db.scalar(stmt)