modelRT/handler/circuit_diagram_load.go

85 lines
2.4 KiB
Go

package handler
import (
"fmt"
"net/http"
"strconv"
"modelRT/diagram"
"modelRT/log"
"modelRT/network"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
// CircuitDiagramLoadHandler define circuit diagram load process API
func CircuitDiagramLoadHandler(c *gin.Context) {
logger := log.GetLoggerInstance()
pageID, err := strconv.ParseInt(c.Query("page_id"), 10, 64)
if err != nil {
logger.Error("get pageID from url param failed", zap.Error(err))
header := network.ResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
resp := network.BasicResponse{
ResponseHeader: header,
PayLoad: map[string]interface{}{
"page_id": pageID,
},
}
c.JSON(http.StatusOK, resp)
}
topologicInfo, err := diagram.GetGraphMap(pageID)
if err != nil {
logger.Error("get topologic data from set by pageID failed", zap.Error(err))
header := network.ResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
resp := network.BasicResponse{
ResponseHeader: header,
PayLoad: map[string]interface{}{
"page_id": pageID,
},
}
c.JSON(http.StatusOK, resp)
}
payLoad := make(map[string]interface{})
payLoad["root_vertex"] = topologicInfo.RootVertex
payLoad["topologic"] = topologicInfo.VerticeLinks
componentParamMap := make(map[string][]byte)
for _, VerticeLink := range topologicInfo.VerticeLinks {
fmt.Println(VerticeLink)
for _, componentUUID := range VerticeLink {
UUIDStr := componentUUID.String()
componentParams, err := diagram.GetComponentMap(UUIDStr)
if err != nil {
logger.Error("get component data from set by uuid failed", zap.Error(err))
header := network.ResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
resp := network.BasicResponse{
ResponseHeader: header,
PayLoad: map[string]interface{}{
"uuid": UUIDStr,
},
}
c.JSON(http.StatusOK, resp)
}
byteSlice, err := componentParams.MarshalJSON()
if err != nil {
logger.Error("marshal component data failed", zap.Error(err))
header := network.ResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
resp := network.BasicResponse{
ResponseHeader: header,
}
c.JSON(http.StatusOK, resp)
}
componentParamMap[UUIDStr] = byteSlice
}
}
payLoad["component_params"] = componentParamMap
resp := network.DiagramLoadResponse{
ResponseHeader: network.ResponseHeader{Status: http.StatusOK, ErrMsg: ""},
PayLoad: payLoad,
}
c.JSON(http.StatusOK, resp)
}