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") // 这里可以添加资源释放逻辑 }