54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package routers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"git.lzcwy.cn/zhengchiliu/zt-online-game-backend/internal/middleware"
|
|
v1 "git.lzcwy.cn/zhengchiliu/zt-online-game-backend/internal/routers/api/v1"
|
|
"git.lzcwy.cn/zhengchiliu/zt-online-game-backend/internal/wsgateway"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// NewRouter 构建 gin 引擎:注册中间件链与 /api/v1 路由。
|
|
func NewRouter() *gin.Engine {
|
|
r := gin.New()
|
|
|
|
// 中间件链:Recovery -> RequestID -> Slog -> CORS
|
|
r.Use(
|
|
middleware.Recovery(),
|
|
middleware.RequestID(),
|
|
middleware.GinSlogMiddleware(),
|
|
middleware.CORS(),
|
|
)
|
|
|
|
// 健康检查
|
|
r.GET("/ping", func(c *gin.Context) {
|
|
c.JSON(http.StatusOK, gin.H{"message": "pong"})
|
|
})
|
|
|
|
// WebSocket 建连入口:必须放在鉴权组之外,token 走 query 由 ServeWS 自行校验。
|
|
r.GET("/ws", wsgateway.ServeWS)
|
|
|
|
// handler 实例
|
|
userHandler := v1.NewUserHandler()
|
|
|
|
apiV1 := r.Group("/api/v1")
|
|
|
|
// ===== 公开路由(无需登录) =====
|
|
{
|
|
apiV1.POST("/user/wxlogin", userHandler.WxLogin)
|
|
apiV1.POST("/user/refresh-token", userHandler.RefreshToken)
|
|
}
|
|
|
|
// ===== 鉴权路由(需登录) =====
|
|
auth := apiV1.Group("")
|
|
auth.Use(middleware.JWTAuth())
|
|
{
|
|
auth.GET("/user/info", userHandler.InfoGetBySelf)
|
|
auth.PUT("/user/profile", userHandler.ProfileUpdate)
|
|
auth.POST("/user/avatar/upload", userHandler.AvatarUpload)
|
|
}
|
|
|
|
return r
|
|
}
|