Files
zt-online-game-backend/internal/routers/router.go
T

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
}