Fix response structure error and router error

Signed-off-by: Asai Neko <sugar@sne.moe>
This commit is contained in:
2026-01-20 17:48:52 +08:00
parent 5e17bbd965
commit 9b83ab565a
7 changed files with 55 additions and 28 deletions

View File

@@ -1,12 +1,16 @@
package middleware package middleware
import "github.com/gin-gonic/gin" import (
"nixcn-cms/utils"
"github.com/gin-gonic/gin"
)
func ApiVersionCheck() gin.HandlerFunc { func ApiVersionCheck() gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
apiVersion := c.GetHeader("X-Api-Version") apiVersion := c.GetHeader("X-Api-Version")
if apiVersion == "" { if apiVersion == "" {
c.Abort() utils.HttpAbort(c, 400, "", "Api Version Not Found")
return return
} }
c.Next() c.Next()

View File

@@ -11,8 +11,8 @@ import (
func Router(e *gin.Engine) { func Router(e *gin.Engine) {
// API Services // API Services
api := e.Group("/api/v1", middleware.ApiVersionCheck()) api := e.Group("/api/v1")
auth.Handler(api.Group("/auth")) auth.Handler(api.Group("/auth"))
user.Handler(api.Group("/user")) user.Handler(api.Group("/user", middleware.ApiVersionCheck()))
event.Handler(api.Group("/event")) event.Handler(api.Group("/event", middleware.ApiVersionCheck()))
} }

View File

@@ -7,8 +7,8 @@ import (
) )
func Handler(r *gin.RouterGroup) { func Handler(r *gin.RouterGroup) {
r.GET("/redirect", Redirect, middleware.JWTAuth(false)) r.GET("/redirect", middleware.JWTAuth(false), Redirect)
r.POST("/magic", Magic) r.POST("/magic", middleware.ApiVersionCheck(), Magic)
r.POST("/token", Token) r.POST("/token", middleware.ApiVersionCheck(), Token)
r.POST("/refresh", Refresh) r.POST("/refresh", middleware.ApiVersionCheck(), Refresh)
} }

View File

@@ -60,7 +60,6 @@ func Magic(c *gin.Context) {
uriData := struct { uriData := struct {
Uri string `json:"uri"` Uri string `json:"uri"`
}{url.String()} }{url.String()}
utils.HttpResponse(c, 200, "", "magiclink sent", uriData) utils.HttpResponse(c, 200, "", "magiclink sent", uriData)
return return
} else { } else {

View File

@@ -11,5 +11,5 @@ func Handler(r *gin.RouterGroup) {
r.GET("/info", Info) r.GET("/info", Info)
r.GET("/checkin", Checkin) r.GET("/checkin", Checkin)
r.GET("/checkin/query", CheckinQuery) r.GET("/checkin/query", CheckinQuery)
r.POST("/checkin/submit", CheckinSubmit, middleware.Permission(20)) r.POST("/checkin/submit", middleware.Permission(20), CheckinSubmit)
} }

View File

@@ -10,7 +10,7 @@ func Handler(r *gin.RouterGroup) {
r.Use(middleware.JWTAuth(true), middleware.Permission(5)) r.Use(middleware.JWTAuth(true), middleware.Permission(5))
r.GET("/info", Info) r.GET("/info", Info)
r.PATCH("/update", Update) r.PATCH("/update", Update)
r.GET("/list", List, middleware.Permission(20)) r.GET("/list", middleware.Permission(20), List)
r.POST("/full", Full, middleware.Permission(40)) r.POST("/full", middleware.Permission(40), Full)
r.POST("/create", Create, middleware.Permission(50)) r.POST("/create", middleware.Permission(50), Create)
} }

View File

@@ -1,6 +1,11 @@
package utils package utils
import "github.com/gin-gonic/gin" import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/goccy/go-json"
)
type RespStatus struct { type RespStatus struct {
Code int `json:"code"` Code int `json:"code"`
@@ -9,22 +14,41 @@ type RespStatus struct {
Data any `json:"data"` Data any `json:"data"`
} }
func HttpResponse(c *gin.Context, code int, errorId string, status string, data ...any) { func render(c *gin.Context, code int, id string, status string, data []any, abort bool) {
var resp = RespStatus{ resp := RespStatus{
Code: code, Code: code,
ErrorId: errorId, ErrorId: id,
Status: status, Status: status,
Data: data,
} }
c.JSON(code, resp)
switch len(data) {
case 0:
resp.Data = nil
case 1:
resp.Data = data[0]
default:
resp.Data = data
}
jsonBytes, err := json.Marshal(resp)
if err != nil {
c.Status(http.StatusInternalServerError)
return
}
c.Header("Content-Type", "application/json; charset=utf-8")
if abort {
c.AbortWithStatus(code)
} else {
c.Status(code)
}
_, _ = c.Writer.Write(jsonBytes)
} }
func HttpAbort(c *gin.Context, code int, errorId string, status string, data ...any) { func HttpResponse(c *gin.Context, code int, id string, status string, data ...any) {
var resp = RespStatus{ render(c, code, id, status, data, false)
Code: code, }
ErrorId: errorId,
Status: status, func HttpAbort(c *gin.Context, code int, id string, status string, data ...any) {
Data: data, render(c, code, id, status, data, true)
}
c.AbortWithStatusJSON(code, resp)
} }