diff --git a/middleware/api_version.go b/middleware/api_version.go index b301b7f..50bd4af 100644 --- a/middleware/api_version.go +++ b/middleware/api_version.go @@ -1,12 +1,16 @@ package middleware -import "github.com/gin-gonic/gin" +import ( + "nixcn-cms/utils" + + "github.com/gin-gonic/gin" +) func ApiVersionCheck() gin.HandlerFunc { return func(c *gin.Context) { apiVersion := c.GetHeader("X-Api-Version") if apiVersion == "" { - c.Abort() + utils.HttpAbort(c, 400, "", "Api Version Not Found") return } c.Next() diff --git a/server/router.go b/server/router.go index 6197009..3c4d238 100644 --- a/server/router.go +++ b/server/router.go @@ -11,8 +11,8 @@ import ( func Router(e *gin.Engine) { // API Services - api := e.Group("/api/v1", middleware.ApiVersionCheck()) + api := e.Group("/api/v1") auth.Handler(api.Group("/auth")) - user.Handler(api.Group("/user")) - event.Handler(api.Group("/event")) + user.Handler(api.Group("/user", middleware.ApiVersionCheck())) + event.Handler(api.Group("/event", middleware.ApiVersionCheck())) } diff --git a/service/auth/handler.go b/service/auth/handler.go index 1dfb9d5..47ad5cb 100644 --- a/service/auth/handler.go +++ b/service/auth/handler.go @@ -7,8 +7,8 @@ import ( ) func Handler(r *gin.RouterGroup) { - r.GET("/redirect", Redirect, middleware.JWTAuth(false)) - r.POST("/magic", Magic) - r.POST("/token", Token) - r.POST("/refresh", Refresh) + r.GET("/redirect", middleware.JWTAuth(false), Redirect) + r.POST("/magic", middleware.ApiVersionCheck(), Magic) + r.POST("/token", middleware.ApiVersionCheck(), Token) + r.POST("/refresh", middleware.ApiVersionCheck(), Refresh) } diff --git a/service/auth/magic.go b/service/auth/magic.go index e3291fd..86cb53c 100644 --- a/service/auth/magic.go +++ b/service/auth/magic.go @@ -60,7 +60,6 @@ func Magic(c *gin.Context) { uriData := struct { Uri string `json:"uri"` }{url.String()} - utils.HttpResponse(c, 200, "", "magiclink sent", uriData) return } else { diff --git a/service/event/handler.go b/service/event/handler.go index e7bb192..a83ac32 100644 --- a/service/event/handler.go +++ b/service/event/handler.go @@ -11,5 +11,5 @@ func Handler(r *gin.RouterGroup) { r.GET("/info", Info) r.GET("/checkin", Checkin) r.GET("/checkin/query", CheckinQuery) - r.POST("/checkin/submit", CheckinSubmit, middleware.Permission(20)) + r.POST("/checkin/submit", middleware.Permission(20), CheckinSubmit) } diff --git a/service/user/handler.go b/service/user/handler.go index 559b872..7a79a63 100644 --- a/service/user/handler.go +++ b/service/user/handler.go @@ -10,7 +10,7 @@ func Handler(r *gin.RouterGroup) { r.Use(middleware.JWTAuth(true), middleware.Permission(5)) r.GET("/info", Info) r.PATCH("/update", Update) - r.GET("/list", List, middleware.Permission(20)) - r.POST("/full", Full, middleware.Permission(40)) - r.POST("/create", Create, middleware.Permission(50)) + r.GET("/list", middleware.Permission(20), List) + r.POST("/full", middleware.Permission(40), Full) + r.POST("/create", middleware.Permission(50), Create) } diff --git a/utils/response.go b/utils/response.go index 6f239b7..90ceca0 100644 --- a/utils/response.go +++ b/utils/response.go @@ -1,6 +1,11 @@ package utils -import "github.com/gin-gonic/gin" +import ( + "net/http" + + "github.com/gin-gonic/gin" + "github.com/goccy/go-json" +) type RespStatus struct { Code int `json:"code"` @@ -9,22 +14,41 @@ type RespStatus struct { Data any `json:"data"` } -func HttpResponse(c *gin.Context, code int, errorId string, status string, data ...any) { - var resp = RespStatus{ +func render(c *gin.Context, code int, id string, status string, data []any, abort bool) { + resp := RespStatus{ Code: code, - ErrorId: errorId, + ErrorId: id, 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) { - var resp = RespStatus{ - Code: code, - ErrorId: errorId, - Status: status, - Data: data, - } - c.AbortWithStatusJSON(code, resp) +func HttpResponse(c *gin.Context, code int, id string, status string, data ...any) { + render(c, code, id, status, data, false) +} + +func HttpAbort(c *gin.Context, code int, id string, status string, data ...any) { + render(c, code, id, status, data, true) }