diff --git a/models/composite.go b/models/composite.go index 62587bd..4a39024 100644 --- a/models/composite.go +++ b/models/composite.go @@ -27,6 +27,7 @@ type CompositeCaseStep struct { StepName string `json:"step_name" gorm:"not null;size:255"` StepDescription string `json:"step_description" gorm:"type:text"` StepType string `json:"step_type" gorm:"not null;size:100"` + ActivityName string `json:"activity_name" gorm:"not null;size:255"` ParametersJson string `json:"parameters_json" gorm:"type:json"` IsRequired bool `json:"is_required" gorm:"default:true"` CreatedAt time.Time `json:"created_at"` @@ -47,6 +48,7 @@ type CreateCompositeCaseStepRequest struct { StepName string `json:"step_name" binding:"required"` StepDescription string `json:"step_description"` StepType string `json:"step_type" binding:"required"` + ActivityName string `json:"activity_name"` ParametersJson string `json:"parameters_json"` IsRequired bool `json:"is_required"` } @@ -66,6 +68,7 @@ type UpdateCompositeCaseStepRequest struct { StepName string `json:"step_name"` StepDescription string `json:"step_description"` StepType string `json:"step_type"` + ActivityName string `json:"activity_name"` ParametersJson string `json:"parameters_json"` IsRequired bool `json:"is_required"` } diff --git a/services/composite.go b/services/composite.go index b3dde01..b64db13 100644 --- a/services/composite.go +++ b/services/composite.go @@ -3,6 +3,7 @@ package services import ( "beacon/models" "beacon/pkg/dao/mysql" + "beacon/utils" "errors" "fmt" "go.uber.org/zap" @@ -60,13 +61,15 @@ func (s *CompositeCaseService) CreateCompositeCase(req *models.CreateCompositeCa zap.L().Info("开始创建步骤", zap.Int("steps_count", len(req.Steps))) var steps []models.CompositeCaseStep for _, stepReq := range req.Steps { + activityName, _ := utils.GetActivityName(stepReq.StepType) step := models.CompositeCaseStep{ CompositeCaseID: compositeCase.ID, StepOrder: stepReq.StepOrder, StepName: stepReq.StepName, StepDescription: stepReq.StepDescription, StepType: stepReq.StepType, - StepConfig: stepReq.StepConfig, + ActivityName: activityName, + ParametersJson: stepReq.ParametersJson, IsRequired: stepReq.IsRequired, } steps = append(steps, step) @@ -198,13 +201,15 @@ func (s *CompositeCaseService) UpdateCompositeCase(id uint, req *models.UpdateCo if len(req.Steps) > 0 { var steps []models.CompositeCaseStep for _, stepReq := range req.Steps { + activityName, _ := utils.GetActivityName(stepReq.StepType) step := models.CompositeCaseStep{ CompositeCaseID: id, StepOrder: stepReq.StepOrder, StepName: stepReq.StepName, StepDescription: stepReq.StepDescription, StepType: stepReq.StepType, - StepConfig: stepReq.StepConfig, + ActivityName: activityName, + ParametersJson: stepReq.ParametersJson, IsRequired: stepReq.IsRequired, } steps = append(steps, step) diff --git a/utils/step_type_activity_mapper.go b/utils/step_type_activity_mapper.go new file mode 100644 index 0000000..db1bb9d --- /dev/null +++ b/utils/step_type_activity_mapper.go @@ -0,0 +1,42 @@ +package utils + +import ( + "fmt" + "strings" +) + +// GetActivityName 根据步骤类型获取对应的 Activity 函数名 +// 参数: +// - stepType: 数据库中的步骤类型,如 "api", "ui" 等 +// +// 返回值: +// - activityName: 对应的 Temporal Activity 函数名 +// - error: 如果步骤类型不支持则返回错误 +func GetActivityName(stepType string) (string, error) { + // 标准化输入:转为大写并去除空格 + normalizedStepType := strings.ToUpper(strings.TrimSpace(stepType)) + + // 步骤类型到 Activity 名称的映射表 + stepTypeToActivity := map[string]string{ + // ================== 测试类型 Activity ================== + "API": "RunApiTest", // API 接口测试 + "UI": "RunUiTest", // UI 自动化测试 + "SQL": "RunSqlTest", // SQL 执行sql语句 + "PYTHON": "RunPythonTest", // PYTHON 执行python脚本处理数据 + } + + // 查找对应的 Activity 名称 + activityName, exists := stepTypeToActivity[normalizedStepType] + if !exists { + // 返回详细的错误信息,包含支持的类型列表 + supportedTypes := make([]string, 0, len(stepTypeToActivity)) + for stepType := range stepTypeToActivity { + supportedTypes = append(supportedTypes, stepType) + } + + return "", fmt.Errorf("unsupported step type '%s'. Supported types: %v", + stepType, supportedTypes) + } + + return activityName, nil +}