Files
be.ems/src/modules/chart/controller/chart_graph.go

142 lines
3.6 KiB
Go

package controller
import (
"fmt"
"be.ems/src/framework/i18n"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
"be.ems/src/modules/chart/service"
"github.com/gin-gonic/gin"
)
// 实例化控制层 ChartGraphController 结构体
var NewChartGraph = &ChartGraphController{
chartGraphService: service.NewChartGraph,
}
// G6关系图
//
// PATH /graph
type ChartGraphController struct {
// G6关系图数据表服务
chartGraphService *service.ChartGraph
}
// 获取关系图组名
//
// GET /groups
//
// @Tags chart
// @Accept json
// @Produce json
// @Success 200 {object} object "Response Results"
// @Security TokenAuth
// @Summary Get relationship graph group name
// @Description Get relationship graph group name
// @Router /chart/graph/groups [get]
func (s *ChartGraphController) GroupNames(c *gin.Context) {
data := s.chartGraphService.SelectGroup()
c.JSON(200, resp.OkData(data))
}
// 获取关系图数据
//
// GET /
//
// @Tags chart
// @Accept json
// @Produce json
// @Param group query string true "Group"
// @Param type query string false "Type" Enums(node, edge, combo)
// @Success 200 {object} object "Response Results"
// @Security TokenAuth
// @Summary Getting Relationship Map Data
// @Description Getting Relationship Map Data
// @Router /chart/graph [get]
func (s *ChartGraphController) Load(c *gin.Context) {
var querys struct {
Group string `form:"group" binding:"required"`
Type string `form:"type" binding:"omitempty,oneof=node edge combo"`
}
if err := c.ShouldBindQuery(&querys); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(40422, errMsgs))
return
}
data := s.chartGraphService.LoadData(querys.Group, querys.Type)
c.JSON(200, resp.OkData(data))
}
// 保存关系图数据
//
// POST /
//
// @Tags chart
// @Accept json
// @Produce json
// @Param data body object true "Request Param"
// @Success 200 {object} object "Response Results"
// @Security TokenAuth
// @Summary Saving Relationship Diagram Data
// @Description Saving Relationship Diagram Data
// @Router /chart/graph [post]
func (s *ChartGraphController) Save(c *gin.Context) {
var body struct {
Group string `json:"group" binding:"required"`
Data struct {
Nodes []map[string]any `json:"nodes" binding:"required"`
Edges []map[string]any `json:"edges" binding:"required"`
Combos []map[string]any `json:"combos" binding:"required"`
} `json:"data" binding:"required"`
}
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(40422, errMsgs))
return
}
data := map[string]any{
"nodes": body.Data.Nodes,
"edges": body.Data.Edges,
"combos": body.Data.Combos,
}
saveNum := s.chartGraphService.SaveData(body.Group, data)
if saveNum > 0 {
c.JSON(200, resp.Ok(nil))
return
}
c.JSON(200, resp.Err(nil))
}
// 删除关系图数据
//
// DELETE /:group
//
// @Tags chart
// @Accept json
// @Produce json
// @Param group path string true "Group"
// @Success 200 {object} object "Response Results"
// @Security TokenAuth
// @Summary Deleting Relationship Diagram Data
// @Description Deleting Relationship Diagram Data
// @Router /chart/graph/{group} [delete]
func (s *ChartGraphController) Delete(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
group := c.Param("group")
if group == "" {
c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
deleteNum := s.chartGraphService.DeleteGroup(group)
if deleteNum > 0 {
c.JSON(200, resp.Ok(nil))
return
}
c.JSON(200, resp.Err(nil))
}