package handler import ( "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 // @Summary load circuit diagram info // @Description load circuit diagram info by page id // @Tags load circuit_diagram // @Accept json // @Produce json // @Param page_id path int64 true "page ID" // @Success 200 {object} network.SuccessResponse "request process success" // @Failure 400 {object} network.FailureResponse "request process failed" // @Router /model/diagram_load/{page_id} [get] 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.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()} resp := network.FailureResponse{ FailResponseHeader: header, PayLoad: map[string]interface{}{ "page_id": pageID, }, } c.JSON(http.StatusOK, resp) return } topologicInfo, err := diagram.GetGraphMap(pageID) if err != nil { logger.Error("get topologic data from set by pageID failed", zap.Error(err)) header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()} resp := network.FailureResponse{ FailResponseHeader: header, PayLoad: map[string]interface{}{ "page_id": pageID, }, } c.JSON(http.StatusOK, resp) return } payLoad := make(map[string]interface{}) payLoad["root_vertex"] = topologicInfo.RootVertex payLoad["topologic"] = topologicInfo.VerticeLinks componentParamMap := make(map[string][]byte) for _, VerticeLink := range topologicInfo.VerticeLinks { 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.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()} resp := network.FailureResponse{ FailResponseHeader: header, PayLoad: map[string]interface{}{ "uuid": UUIDStr, }, } c.JSON(http.StatusOK, resp) return } byteSlice, err := componentParams.MarshalJSON() if err != nil { logger.Error("marshal component data failed", zap.Error(err)) header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()} resp := network.FailureResponse{ FailResponseHeader: header, } c.JSON(http.StatusOK, resp) return } componentParamMap[UUIDStr] = byteSlice } } payLoad["component_params"] = componentParamMap resp := network.SuccessResponse{ SuccessResponseHeader: network.SuccessResponseHeader{ Status: http.StatusOK, ErrMsg: "", }, PayLoad: payLoad, } c.JSON(http.StatusOK, resp) }