potato/internal/routers/router.go

66 lines
2.2 KiB
Go

/*
* @Date: 2021-03-21 19:54:57
* @LastEditors: viletyy
* @LastEditTime: 2021-06-14 23:32:23
* @FilePath: /potato/internal/routers/router.go
*/
package routers
import (
"net/http"
"time"
"github.com/gin-gonic/gin"
_ "github.com/swaggo/gin-swagger"
ginSwagger "github.com/swaggo/gin-swagger"
"github.com/swaggo/gin-swagger/swaggerFiles"
_ "github.com/swaggo/gin-swagger/swaggerFiles"
_ "github.com/viletyy/potato/docs"
"github.com/viletyy/potato/global"
"github.com/viletyy/potato/internal/controller/api"
v1 "github.com/viletyy/potato/internal/controller/api/v1"
"github.com/viletyy/potato/internal/middleware"
"github.com/viletyy/potato/pkg/limiter"
)
var (
Engine = gin.Default()
methodLimiters = limiter.NewMethodLimiter().AddBuckets(limiter.LimiterBucketRule{
Key: "/auth",
FillInterval: time.Second,
Capacity: 10,
Quantum: 10,
})
)
func InitRouter() *gin.Engine {
gin.SetMode(global.GO_CONFIG.App.RunMode) // 设置运行模式
Engine.Use(middleware.AppInfo()) // 设置app信息
Engine.Use(middleware.RateLimiter(methodLimiters)) // 设置限流控制
Engine.Use(middleware.ContextTimeout(time.Duration(global.GO_CONFIG.App.DefaultContextTimeout))) // 设置统一超时控制
Engine.Use(middleware.Translations()) // 设置自定义验证
Engine.Use(middleware.CORS()) // 设置跨域
Engine.Use(middleware.Tracing())
if global.GO_CONFIG.App.RunMode == "debug" {
Engine.Use(gin.Logger()) // 设置log
Engine.Use(gin.Recovery()) // 设置recovery
} else {
Engine.Use(middleware.AccessLog())
Engine.Use(middleware.Recovery())
}
Engine.StaticFS("/static", http.Dir(global.GO_CONFIG.App.UploadSavePath))
Engine.POST("/api/auth", api.GetAuth)
Engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
v1RouterGroup := Engine.Group("../api/v1")
v1RouterGroup.Use(middleware.JWT())
upload := v1.NewUpload()
v1RouterGroup.POST("/upload", upload.Create)
V1InitBasicRouter()
return Engine
}