testFlow/models/stage.go
Wyle.Gong-巩文昕 67b0ad2723 init
2025-04-22 16:42:48 +08:00

46 lines
1.1 KiB
Go

package models
import (
"gorm.io/gorm"
)
type Stage struct {
BaseModel
ProjectID string `json:"project_id" gorm:"type:varchar(32);not null"`
Name string `json:"name" gorm:"type:varchar(255);not null"`
TreeID string `json:"tree_id" gorm:"column:tree_id;type:varchar(32)"`
DemandID string `json:"demand_id" gorm:"column:tree_id;type:varchar(32)"`
}
func (s *Stage) AvailableNodes(db *gorm.DB) ([]Tree, error) {
// 如果没有指定树节点,返回空列表
if s.TreeID == "" {
return []Tree{}, nil
}
// 如果是虚拟根节点,返回所有树节点
if s.TreeID == "root" {
var allNodes []Tree
if err := db.Find(&allNodes).Error; err != nil {
return nil, err
}
return allNodes, nil
}
// 获取指定的树节点
var tree Tree
if err := db.Where("id = ?", s.TreeID).First(&tree).Error; err != nil {
return nil, err
}
// 获取该树节点及其所有子孙节点
descendants, err := tree.Descendants(db)
if err != nil {
return nil, err
}
// 将当前节点也添加到可用节点列表中
result := append([]Tree{tree}, descendants...)
return result, nil
}