| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package main
- import (
- "github.com/gin-gonic/gin"
- "github.com/kairo/haven/internal/auth"
- "github.com/kairo/haven/internal/httpx"
- )
- // newRouter 组装 Gin 路由。
- //
- // 依据 docs/architecture.md 5.3:中间件顺序为 日志 → 鉴权 → 领域 handler。
- // 本期接入认证相关路由(api.md 第二、三、四、五、十一节)。
- func newRouter(h *auth.Handler, store auth.Store) *gin.Engine {
- // 鉴权中间件通过回调使用统一错误响应,避免 auth ↔ httpx 包循环
- httpx.InstallAuthErrorHandlers()
- auth.SetErrorCallbacks(
- httpx.FailBadRequest,
- httpx.FailValidation,
- httpx.FailInternal,
- httpx.FailNotFound,
- httpx.FailConflict,
- httpx.FailUnauthorizedWith,
- httpx.FailUnprocessable,
- )
- gin.SetMode(gin.ReleaseMode)
- r := gin.New()
- r.Use(gin.Recovery())
- r.Use(auth.Authenticate(store))
- r.GET("/api/health", func(c *gin.Context) {
- c.JSON(200, gin.H{"status": "ok"})
- })
- auth.RegisterMeRoute(r, h)
- auth.RegisterRoutes(r, h)
- auth.RegisterManageRoutes(r, h)
- return r
- }
|