[优化] 重构 API 处理逻辑,简化参数解析和响应处理

This commit is contained in:
ryan
2026-05-31 13:31:32 +08:00
parent bcd669722e
commit ec70794577
11 changed files with 183 additions and 547 deletions
+28 -39
View File
@@ -2,7 +2,6 @@ package controller
import (
"openflare/service"
"strconv"
"github.com/gin-gonic/gin"
)
@@ -29,8 +28,7 @@ type nodeObservabilityQuery struct {
// @Router /api/nodes/ [post]
func CreateNode(c *gin.Context) {
var input service.NodeInput
if err := decodeJSONBody(c.Request.Body, &input); err != nil {
respondBadRequest(c, "")
if !bindJSON(c, &input) {
return
}
@@ -86,19 +84,17 @@ func RotateNodeBootstrapToken(c *gin.Context) {
// @Failure 400 {object} map[string]interface{}
// @Router /api/nodes/{id}/update [post]
func UpdateNode(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil || id == 0 {
respondBadRequest(c, "")
id, ok := parseIDParam(c)
if !ok {
return
}
var input service.NodeInput
if err = decodeJSONBody(c.Request.Body, &input); err != nil {
respondBadRequest(c, "")
if !bindJSON(c, &input) {
return
}
node, err := service.UpdateNode(uint(id), input)
node, err := service.UpdateNode(id, input)
if err != nil {
respondFailure(c, err.Error())
return
@@ -116,13 +112,12 @@ func UpdateNode(c *gin.Context) {
// @Failure 400 {object} map[string]interface{}
// @Router /api/nodes/{id}/delete [post]
func DeleteNode(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil || id == 0 {
respondBadRequest(c, "")
id, ok := parseIDParam(c)
if !ok {
return
}
if err = service.DeleteNode(uint(id)); err != nil {
if err := service.DeleteNode(id); err != nil {
respondFailure(c, err.Error())
return
}
@@ -139,21 +134,20 @@ func DeleteNode(c *gin.Context) {
// @Failure 400 {object} map[string]interface{}
// @Router /api/nodes/{id}/agent-update [post]
func RequestNodeAgentUpdate(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil || id == 0 {
respondBadRequest(c, "")
id, ok := parseIDParam(c)
if !ok {
return
}
var request nodeAgentUpdateRequest
if c.Request.ContentLength > 0 {
if err = decodeOptionalJSONBody(c.Request.Body, &request); err != nil {
if err := decodeOptionalJSONBody(c.Request.Body, &request); err != nil {
respondBadRequest(c, "")
return
}
}
node, err := service.RequestNodeAgentUpdate(uint(id), service.NodeAgentUpdateInput{
node, err := service.RequestNodeAgentUpdate(id, service.NodeAgentUpdateInput{
Channel: request.Channel,
TagName: request.TagName,
})
@@ -174,13 +168,12 @@ func RequestNodeAgentUpdate(c *gin.Context) {
// @Failure 400 {object} map[string]interface{}
// @Router /api/nodes/{id}/openresty-restart [post]
func RequestNodeOpenrestyRestart(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil || id == 0 {
respondBadRequest(c, "")
id, ok := parseIDParam(c)
if !ok {
return
}
node, err := service.RequestNodeOpenrestyRestart(uint(id))
node, err := service.RequestNodeOpenrestyRestart(id)
if err != nil {
respondFailure(c, err.Error())
return
@@ -198,13 +191,12 @@ func RequestNodeOpenrestyRestart(c *gin.Context) {
// @Failure 400 {object} map[string]interface{}
// @Router /api/nodes/{id}/force-sync [post]
func RequestNodeForceSync(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil || id == 0 {
respondBadRequest(c, "")
id, ok := parseIDParam(c)
if !ok {
return
}
node, err := service.RequestNodeForceSync(uint(id))
node, err := service.RequestNodeForceSync(id)
if err != nil {
respondFailure(c, err.Error())
return
@@ -223,13 +215,12 @@ func RequestNodeForceSync(c *gin.Context) {
// @Failure 400 {object} map[string]interface{}
// @Router /api/nodes/{id}/agent-release [get]
func GetNodeAgentRelease(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil || id == 0 {
respondBadRequest(c, "")
id, ok := parseIDParam(c)
if !ok {
return
}
release, err := service.GetNodeAgentRelease(c.Request.Context(), uint(id), c.Query("channel"))
release, err := service.GetNodeAgentRelease(c.Request.Context(), id, c.Query("channel"))
if err != nil {
respondFailure(c, err.Error())
return
@@ -249,19 +240,18 @@ func GetNodeAgentRelease(c *gin.Context) {
// @Failure 400 {object} map[string]interface{}
// @Router /api/nodes/{id}/observability [get]
func GetNodeObservability(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil || id == 0 {
respondBadRequest(c, "")
id, ok := parseIDParam(c)
if !ok {
return
}
var query nodeObservabilityQuery
if err = c.ShouldBindQuery(&query); err != nil {
if err := c.ShouldBindQuery(&query); err != nil {
respondBadRequest(c, "")
return
}
view, err := service.GetNodeObservability(uint(id), service.NodeObservabilityQuery{
view, err := service.GetNodeObservability(id, service.NodeObservabilityQuery{
Hours: query.Hours,
Limit: query.Limit,
})
@@ -282,13 +272,12 @@ func GetNodeObservability(c *gin.Context) {
// @Failure 400 {object} map[string]interface{}
// @Router /api/nodes/{id}/observability/cleanup [post]
func CleanupNodeHealthEvents(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil || id == 0 {
respondBadRequest(c, "")
id, ok := parseIDParam(c)
if !ok {
return
}
result, err := service.CleanupNodeHealthEvents(uint(id))
result, err := service.CleanupNodeHealthEvents(id)
if err != nil {
respondFailure(c, err.Error())
return