You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.0 KiB
108 lines
3.0 KiB
package workflow |
|
|
|
import ( |
|
"gofaster/internal/core" |
|
"gofaster/internal/shared/config" |
|
"gofaster/internal/shared/database" |
|
"gofaster/internal/workflow/controller" |
|
"gofaster/internal/workflow/model" |
|
"gofaster/internal/workflow/repository" |
|
"gofaster/internal/workflow/service" |
|
|
|
"github.com/gin-gonic/gin" |
|
"go.uber.org/zap" |
|
"gorm.io/gorm" |
|
) |
|
|
|
type WorkflowModule struct { |
|
workflowCtrl *controller.WorkflowController |
|
engine *service.WorkflowEngine |
|
logger *zap.Logger |
|
} |
|
|
|
func init() { |
|
core.RegisterModuleType(&WorkflowModule{}) |
|
} |
|
|
|
func (m *WorkflowModule) Name() string { |
|
return "workflow" |
|
} |
|
|
|
func (m *WorkflowModule) Init(config *config.Config, logger *zap.Logger, db *gorm.DB, redis *database.RedisClient) error { |
|
m.logger = logger |
|
|
|
// 初始化仓库 |
|
workflowRepo := repository.NewWorkflowRepo(db) |
|
|
|
// 初始化服务 |
|
workflowService := service.NewWorkflowService(workflowRepo) |
|
m.engine = service.NewWorkflowEngine(db) |
|
|
|
// 初始化控制器 |
|
m.workflowCtrl = controller.NewWorkflowController(workflowService, m.engine) |
|
|
|
// 自动迁移工作流相关表 |
|
if err := db.AutoMigrate( |
|
&model.Workflow{}, |
|
&model.WorkflowNode{}, |
|
&model.WorkflowInstance{}, |
|
&model.WorkflowTask{}, |
|
); err != nil { |
|
return err |
|
} |
|
|
|
m.logger.Info("Workflow module initialized successfully") |
|
return nil |
|
} |
|
|
|
func (m *WorkflowModule) RegisterRoutes(router *gin.RouterGroup) { |
|
// 工作流基础路由 |
|
workflowGroup := router.Group("/workflows") |
|
{ |
|
workflowGroup.POST("", m.workflowCtrl.CreateWorkflow) |
|
workflowGroup.GET("", m.workflowCtrl.ListWorkflows) |
|
workflowGroup.GET("/:id", m.workflowCtrl.GetWorkflow) |
|
workflowGroup.PUT("/:id", m.workflowCtrl.UpdateWorkflow) |
|
workflowGroup.DELETE("/:id", m.workflowCtrl.DeleteWorkflow) |
|
|
|
// 工作流节点路由 |
|
workflowGroup.POST("/:id/nodes", m.workflowCtrl.AddNode) |
|
workflowGroup.PUT("/nodes/:node_id", m.workflowCtrl.UpdateNode) |
|
workflowGroup.DELETE("/nodes/:node_id", m.workflowCtrl.DeleteNode) |
|
} |
|
|
|
// 工作流实例路由 |
|
instanceGroup := router.Group("/workflow-instances") |
|
{ |
|
instanceGroup.POST("", m.workflowCtrl.StartWorkflow) |
|
instanceGroup.GET("", m.workflowCtrl.ListInstances) |
|
instanceGroup.GET("/:id", m.workflowCtrl.GetInstance) |
|
instanceGroup.PUT("/:id/cancel", m.workflowCtrl.CancelInstance) |
|
|
|
// 任务路由 |
|
instanceGroup.GET("/:id/tasks", m.workflowCtrl.ListTasks) |
|
instanceGroup.POST("/tasks/:task_id/process", m.workflowCtrl.ProcessTask) |
|
} |
|
|
|
// 用户任务路由 |
|
router.GET("/my-tasks", m.workflowCtrl.GetUserTasks) |
|
} |
|
|
|
func (m *WorkflowModule) Cleanup() { |
|
m.logger.Info("Cleaning up workflow module") |
|
// 这里可以添加资源释放逻辑 |
|
} |
|
|
|
// Start 启动工作流模块 |
|
func (m *WorkflowModule) Start(config *config.Config, db *gorm.DB) error { |
|
m.logger.Info("Starting workflow module") |
|
// 这里可以添加启动逻辑,比如启动工作流引擎 |
|
return nil |
|
} |
|
|
|
// Stop 停止工作流模块 |
|
func (m *WorkflowModule) Stop() error { |
|
m.logger.Info("Stopping workflow module") |
|
// 这里可以添加停止逻辑,比如停止工作流引擎 |
|
return nil |
|
}
|
|
|