init
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
package graph
|
||||
|
||||
import (
|
||||
"app/cfg"
|
||||
"app/models"
|
||||
"app/utils"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/veypi/OneBD/rest"
|
||||
)
|
||||
|
||||
var _ = Router.Get("", getHandle)
|
||||
var _ = Router.Get("/:stage_id/", getHandle)
|
||||
|
||||
// getHandle 获取完整的图形数据,包括节点和连接
|
||||
func getHandle(x *rest.X) (any, error) {
|
||||
utils.SetCORSHeaders(x)
|
||||
stageID, ok := x.Params.Get("stage_id")
|
||||
if !ok {
|
||||
return nil, errors.New("缺少stage_id")
|
||||
}
|
||||
|
||||
// 验证阶段是否存在
|
||||
var stage models.Stage
|
||||
if err := cfg.DB().Where("id = ?", stageID).First(&stage).Error; err != nil {
|
||||
return nil, errors.New("阶段不存在")
|
||||
}
|
||||
|
||||
// 获取该阶段的所有节点
|
||||
var nodes []models.GraphNode
|
||||
if err := cfg.DB().Where("stage_id = ?", stageID).Find(&nodes).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 获取该阶段的所有连接
|
||||
var links []models.GraphLink
|
||||
if err := cfg.DB().Where("stage_id = ?", stageID).Find(&links).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 返回完整的图形数据
|
||||
return map[string]interface{}{
|
||||
"stage": stage,
|
||||
"nodes": nodes,
|
||||
"links": links,
|
||||
}, nil
|
||||
}
|
||||
|
||||
var _ = Router.Post("/:stage_id/", saveHandle)
|
||||
|
||||
func saveHandle(x *rest.X) (any, error) {
|
||||
utils.SetCORSHeaders(x)
|
||||
fmt.Println("saveHandle")
|
||||
stageID, ok := x.Params.Get("stage_id")
|
||||
if !ok {
|
||||
return nil, errors.New("缺少stage_id")
|
||||
}
|
||||
|
||||
// 验证阶段是否存在
|
||||
var stage models.Stage
|
||||
if err := cfg.DB().Where("id = ?", stageID).First(&stage).Error; err != nil {
|
||||
return nil, errors.New("阶段不存在")
|
||||
}
|
||||
|
||||
// 解析请求体
|
||||
var data struct {
|
||||
Nodes []models.GraphNode `json:"nodes"`
|
||||
Links []models.GraphLink `json:"links"`
|
||||
}
|
||||
if err := x.Parse(&data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// fmt.Printf("%+v\n", data)
|
||||
// 开始事务
|
||||
tx := cfg.DB().Begin()
|
||||
|
||||
// 删除原有的节点和连接
|
||||
if err := tx.Where("stage_id = ?", stageID).Delete(&models.GraphNode{}).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
if err := tx.Where("stage_id = ?", stageID).Delete(&models.GraphLink{}).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 保存新的节点和连接
|
||||
for _, node := range data.Nodes {
|
||||
node.StageID = stageID
|
||||
if err := tx.Create(&node).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
for _, link := range data.Links {
|
||||
link.StageID = stageID
|
||||
if err := tx.Create(&link).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// 提交事务
|
||||
if err := tx.Commit().Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return map[string]interface{}{
|
||||
"message": "保存成功",
|
||||
}, nil
|
||||
}
|
||||
|
||||
var _ = Router.Any("/*", anyHandle)
|
||||
|
||||
// anyHandle 处理其他请求
|
||||
func anyHandle(x *rest.X) (any, error) {
|
||||
utils.SetCORSHeaders(x)
|
||||
return nil, nil
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package graph
|
||||
|
||||
import (
|
||||
"github.com/veypi/OneBD/rest"
|
||||
)
|
||||
|
||||
var Router = rest.NewRouter()
|
||||
Reference in New Issue
Block a user