first commit
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
// Package router 装配 gin 引擎与各模块路由。
|
||||
// 路由分层:/api/ma(小程序,靠请求头 app_id 鉴权)、/api/admin(后台)。
|
||||
package router
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
|
||||
adminhdl "portal-mini-go/internal/handler/admin"
|
||||
miniapphdl "portal-mini-go/internal/handler/admin/miniapp"
|
||||
app1hdl "portal-mini-go/internal/handler/miniapp/app1"
|
||||
"portal-mini-go/internal/middleware"
|
||||
"portal-mini-go/internal/pkg/config"
|
||||
"portal-mini-go/internal/pkg/response"
|
||||
"portal-mini-go/internal/pkg/session"
|
||||
"portal-mini-go/internal/pkg/wechat"
|
||||
miniapprepo "portal-mini-go/internal/repository/miniapp"
|
||||
"portal-mini-go/internal/repository/user"
|
||||
miniappsvc "portal-mini-go/internal/service/admin/miniapp"
|
||||
app1svc "portal-mini-go/internal/service/miniapp/app1"
|
||||
)
|
||||
|
||||
// New 构造并装配整个 HTTP 服务。
|
||||
func New(cfg *config.Config, db *gorm.DB, store session.Store) *gin.Engine {
|
||||
if cfg.Server.Mode == "release" {
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
}
|
||||
|
||||
r := gin.New()
|
||||
r.Use(middleware.Recovery(), middleware.Trace(), middleware.ErrorHandler())
|
||||
|
||||
r.GET("/healthz", func(c *gin.Context) {
|
||||
response.OK(c, gin.H{"status": "ok"})
|
||||
})
|
||||
|
||||
// 共享基础设施:微信客户端、用户仓储、小程序仓储。
|
||||
wx := wechat.NewClient()
|
||||
userRepo := user.New(db)
|
||||
miniRepo := miniapprepo.New(db)
|
||||
|
||||
// 小程序分组:先校验请求头 app_id 身份,再挂载各小程序业务路由。
|
||||
ma := r.Group("/api/ma")
|
||||
ma.Use(middleware.MiniAppAuth(miniRepo))
|
||||
{
|
||||
app1Svc := app1svc.New(userRepo, miniRepo, wx, store)
|
||||
app1hdl.Register(ma, app1hdl.NewHandler(app1Svc))
|
||||
// 新增小程序时,在此依次注册 app2..app10:
|
||||
// app2Svc := app2svc.New(userRepo, miniRepo, wx, store)
|
||||
// app2hdl.Register(ma, app2hdl.NewHandler(app2Svc))
|
||||
}
|
||||
|
||||
// 后台管理分组:JWT 鉴权。
|
||||
ad := r.Group("/api/admin")
|
||||
ad.Use(middleware.AdminAuth(cfg.Admin.JWTSecret))
|
||||
{
|
||||
adminhdl.Register(ad, adminhdl.NewHandler(cfg.Admin.JWTSecret, parseTTL(cfg.Admin.TokenTTL)))
|
||||
|
||||
// 小程序管理:被后台纳管的微信小程序配置(增删改查)。
|
||||
miniSvc := miniappsvc.New(miniRepo)
|
||||
miniapphdl.Register(ad, miniapphdl.NewHandler(miniSvc))
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
func parseTTL(s string) time.Duration {
|
||||
if d, err := time.ParseDuration(s); err == nil {
|
||||
return d
|
||||
}
|
||||
return 24 * time.Hour
|
||||
}
|
||||
Reference in New Issue
Block a user