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

52 lines
1.3 KiB
Go

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