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.
 
 
 
 
 
 

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