package http import ( "net/http" "github.com/gin-gonic/gin" "gitlink.org.cn/cloudream/common/consts/errorcode" "gitlink.org.cn/cloudream/common/pkgs/logger" cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" ) // NodeService 结构体代表了节点服务,它包含了一个Server实例。 type NodeService struct { *Server } // NodeSvc 为Server结构体提供一个方法,返回一个NodeService的实例。 // 这个方法主要用于在Server实例中访问NodeService。 func (s *Server) NodeSvc() *NodeService { return &NodeService{ Server: s, } } // GetNodesReq 结构体定义了获取节点信息请求的参数。 // 它包含一个NodeIDs字段,该字段是需要查询的节点的ID列表,是必需的。 type GetNodesReq struct { NodeIDs *[]cdssdk.NodeID `form:"nodeIDs" binding:"required"` } // GetNodesResp 结构体与cdssdk包中的NodeGetNodesResp类型相同,用于定义获取节点信息的响应。 type GetNodesResp = cdssdk.NodeGetNodesResp // GetNodes 是一个处理获取节点信息请求的方法。 // 它使用Gin框架的Context来处理HTTP请求,获取请求参数,并返回节点信息。 // ctx *gin.Context: 代表当前的HTTP请求上下文。 func (s *ObjectService) GetNodes(ctx *gin.Context) { // 初始化日志记录器,添加"HTTP"字段标识。 log := logger.WithField("HTTP", "Node.GetNodes") var req GetNodesReq // 尝试绑定查询参数到请求结构体,如果出错则返回错误信息。 if err := ctx.ShouldBindQuery(&req); err != nil { log.Warnf("binding body: %s", err.Error()) // 参数绑定失败,返回400状态码和错误信息。 ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument")) return } // 调用NodeSvc获取节点信息,如果出错则返回操作失败的错误信息。 nodes, err := s.svc.NodeSvc().GetNodes(*req.NodeIDs) if err != nil { log.Warnf("getting nodes: %s", err.Error()) // 获取节点信息失败,返回操作失败的错误信息。 ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get nodes failed")) return } // 节点信息获取成功,返回200状态码和节点信息。 ctx.JSON(http.StatusOK, OK(GetNodesResp{Nodes: nodes})) }