package providers import ( "framework_v2/internal/access" "framework_v2/internal/consts" ginzap "github.com/gin-contrib/zap" "github.com/gin-gonic/gin" "time" ) func InitGin() { gin.SetMode(gin.ReleaseMode) access.Router = gin.New() access.Router.Use(ginzap.Ginzap(access.Logger, time.RFC3339, true)) //access.Router.Use(gin.Recovery()) //access.Router.Use(ginzap.RecoveryWithZap(access.Logger, true)) } type httpMethod int var httpMethodStr = []string{"GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"} func (h httpMethod) String() string { return httpMethodStr[h-1] } const ( GET httpMethod = iota + 1 POST PUT DELETE PATCH HEAD OPTIONS ) type HandlerFunc func(metadata *consts.Request) func HandleRoute(method httpMethod, relativePath string, controller HandlerFunc, middlewares ...gin.HandlerFunc) { access.Router.Handle(method.String(), relativePath, func(c *gin.Context) { for _, middleware := range middlewares { middleware(c) } if !c.IsAborted() { handleWithMetadata(c, controller) } }) } func handleWithMetadata(c *gin.Context, controller HandlerFunc) { var metadata = &consts.Request{ Http: c, User: GetAuthFromCtx(c), } controller(metadata) }