init
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package project
|
||||
|
||||
import (
|
||||
"app/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type Demand struct {
|
||||
models.Tree
|
||||
DocID string `json:"doc_id" gorm:"column:doc_id;type:varchar(255);default:''"`
|
||||
ProjectID string `json:"project_id" gorm:"column:project_id;type:varchar(255);not null"`
|
||||
Description string `json:"description" gorm:"column:description;type:text"`
|
||||
ReqID string `json:"req_id" gorm:"column:req_id;type:varchar(50)"`
|
||||
ParentReqID string `json:"parent_req_id" gorm:"column:parent_req_id;type:varchar(50)"`
|
||||
Priority string `json:"priority" gorm:"column:priority;type:varchar(20)"`
|
||||
Type string `json:"type" gorm:"column:type;type:varchar(50)"`
|
||||
Status string `json:"status" gorm:"column:status;type:varchar(20)"`
|
||||
}
|
||||
|
||||
func (Demand) TableName() string {
|
||||
return "project_demands"
|
||||
}
|
||||
|
||||
func (t *Demand) Descendants(db *gorm.DB) ([]Demand, error) {
|
||||
var descendants []Demand
|
||||
|
||||
// 使用GORM递归获取所有后代节点
|
||||
var getAllDescendants func(parentID string) error
|
||||
getAllDescendants = func(parentID string) error {
|
||||
var children []Demand
|
||||
if err := db.Where("parent_id = ?", parentID).Find(&children).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, child := range children {
|
||||
descendants = append(descendants, child)
|
||||
if err := getAllDescendants(child.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 从当前节点开始递归
|
||||
if err := getAllDescendants(t.ID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return descendants, nil
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
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
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package stage
|
||||
|
||||
import (
|
||||
M "app/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type GraphLink struct {
|
||||
M.BaseModel
|
||||
StageID string `json:"stage_id" gorm:"column:stage_id;type:varchar(255);not null"`
|
||||
SourceID string `json:"source_id" gorm:"column:source_id;type:varchar(255);not null"`
|
||||
TargetID string `json:"target_id" gorm:"column:target_id;type:varchar(255);not null"`
|
||||
LinkID string `json:"link_id" gorm:"column:link_id;type:varchar(255);not null"`
|
||||
Meta string `json:"meta" gorm:"column:meta;type:mediumtext"`
|
||||
}
|
||||
|
||||
func (GraphLink) TableName() string {
|
||||
return "stage_graph_links"
|
||||
}
|
||||
|
||||
// 获取前置节点
|
||||
func (gl *GraphLink) SourceNode(db *gorm.DB) (*GraphNode, error) {
|
||||
var node GraphNode
|
||||
err := db.Where("id = ?", gl.SourceID).First(&node).Error
|
||||
return &node, err
|
||||
}
|
||||
|
||||
// 获取后置节点
|
||||
func (gl *GraphLink) TargetNode(db *gorm.DB) (*GraphNode, error) {
|
||||
var node GraphNode
|
||||
err := db.Where("id = ?", gl.TargetID).First(&node).Error
|
||||
return &node, err
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package stage
|
||||
|
||||
import (
|
||||
M "app/models"
|
||||
P "app/models/project"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type GraphNode struct {
|
||||
M.BaseModel
|
||||
DemandID string `json:"tree_id" gorm:"column:tree_id;type:varchar(255);not null"`
|
||||
StageID string `json:"stage_id" gorm:"column:stage_id;type:varchar(255);not null"`
|
||||
InstanceID string `json:"instance_id" gorm:"column:instance_id;type:varchar(255);not null"`
|
||||
X float64 `json:"x" gorm:"column:x;default:0"`
|
||||
Y float64 `json:"y" gorm:"column:y;default:0"`
|
||||
FX float64 `json:"fx" gorm:"column:fx;default:0"`
|
||||
FY float64 `json:"fy" gorm:"column:fy;default:0"`
|
||||
Name string `json:"name" gorm:"column:name;type:varchar(255)"`
|
||||
Level int `json:"level" gorm:"column:level;default:0"`
|
||||
ParentID string `json:"parent_id" gorm:"column:parent_id;type:varchar(255)"`
|
||||
Type string `json:"type" gorm:"column:type;type:varchar(255);default:'node'"`
|
||||
Meta string `json:"meta" gorm:"column:meta;type:mediumtext"`
|
||||
}
|
||||
|
||||
func (GraphNode) TableName() string {
|
||||
return "stage_graph_nodes"
|
||||
}
|
||||
|
||||
// 获取关联的树节点
|
||||
func (gn *GraphNode) Tree(db *gorm.DB) (*P.Demand, error) {
|
||||
var tree P.Demand
|
||||
err := db.Where("id = ?", gn.DemandID).First(&tree).Error
|
||||
return &tree, err
|
||||
}
|
||||
|
||||
// 获取关联的所有连接
|
||||
func (gn *GraphNode) Links(db *gorm.DB) ([]GraphLink, error) {
|
||||
var links []GraphLink
|
||||
err := db.Where("source_id = ? OR target_id = ?", gn.ID, gn.ID).Find(&links).Error
|
||||
return links, err
|
||||
}
|
||||
func (gn *GraphNode) IncomingLinks(db *gorm.DB) ([]GraphLink, error) {
|
||||
var links []GraphLink
|
||||
err := db.Where("target_id = ?", gn.ID).Find(&links).Error
|
||||
return links, err
|
||||
}
|
||||
|
||||
// OutgoingLinks 获取出度连接
|
||||
func (gn *GraphNode) OutgoingLinks(db *gorm.DB) ([]GraphLink, error) {
|
||||
var links []GraphLink
|
||||
err := db.Where("source_id = ?", gn.ID).Find(&links).Error
|
||||
return links, err
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
M "app/models"
|
||||
)
|
||||
|
||||
type Endpoint struct {
|
||||
M.BaseModel
|
||||
StageID string `json:"stage_id" gorm:"column:stage_id;type:varchar(255);"`
|
||||
ProjectID string `json:"project_id" gorm:"column:project_id;type:varchar(255);"`
|
||||
DocID string `json:"doc_id" gorm:"column:doc_id;type:varchar(255);"`
|
||||
|
||||
Name string `json:"name" gorm:"column:name;type:varchar(255);"`
|
||||
Path string `json:"path" gorm:"column:path;type:varchar(255);"`
|
||||
Method string `json:"method" gorm:"column:method;type:varchar(255);"`
|
||||
Description string `json:"description" gorm:"column:description;type:varchar(255);"`
|
||||
|
||||
Params string `json:"params" gorm:"column:params;type:mediumtext;"`
|
||||
Headers string `json:"headers" gorm:"column:headers;type:mediumtext;"`
|
||||
Body string `json:"body" gorm:"column:body;type:mediumtext;"`
|
||||
Response string `json:"response" gorm:"column:response;type:mediumtext;"`
|
||||
Merged bool `json:"merged" gorm:"column:merged;type:bool;"`
|
||||
}
|
||||
|
||||
func (Endpoint) TableName() string {
|
||||
return "stage_tool_endpoints"
|
||||
}
|
||||
Reference in New Issue
Block a user