github.com/ngocphuongnb/tetua@v0.0.7-alpha/packages/fiberserver/server.go (about) 1 package fiberserver 2 3 import ( 4 "net/http" 5 6 "github.com/gofiber/fiber/v2" 7 "github.com/gofiber/fiber/v2/middleware/compress" 8 "github.com/gofiber/fiber/v2/utils" 9 "github.com/ngocphuongnb/tetua/app/logger" 10 "github.com/ngocphuongnb/tetua/app/server" 11 ) 12 13 type Server struct { 14 *fiber.App 15 middlewares []server.Handler 16 } 17 18 type Config struct { 19 JwtSigningKey string 20 AppName string 21 JSONEncoder utils.JSONMarshal 22 } 23 24 func New(config Config) server.Server { 25 app := fiber.New(fiber.Config{ 26 AppName: config.AppName, 27 StrictRouting: true, 28 CaseSensitive: true, 29 EnablePrintRoutes: false, 30 DisableStartupMessage: false, 31 JSONEncoder: config.JSONEncoder, 32 // Prefork: true, 33 // Immutable: true, 34 }) 35 36 app.Use(compress.New(compress.Config{ 37 Level: compress.LevelBestSpeed, // 1 38 })) 39 40 return &Server{App: app} 41 } 42 43 func (s *Server) Test(req *http.Request, msTimeout ...int) (resp *http.Response, err error) { 44 return s.App.Test(req, msTimeout...) 45 } 46 47 func (s *Server) Listen(address string) { 48 logger.Fatal("Listen", logger.Context{"Error": s.App.Listen(address)}) 49 } 50 51 func (s *Server) Register(register func(ss server.Server)) server.Server { 52 register(s) 53 54 return s 55 } 56 57 func (s *Server) Use(handlers ...server.Handler) { 58 s.middlewares = append(s.middlewares, handlers...) 59 } 60 61 func (s *Server) UsePrefix(prefix string, handlers ...server.Handler) { 62 var params []interface{} = []interface{}{prefix} 63 64 for _, handler := range transformHandlers(handlers) { 65 params = append(params, handler) 66 } 67 68 s.App.Use(params...) 69 } 70 71 func (s *Server) Group(prefix string, handlers ...server.Handler) server.Group { 72 var fiberHandlers []fiber.Handler 73 74 for _, handler := range handlers { 75 fiberHandlers = append(fiberHandlers, func(c *fiber.Ctx) error { 76 return handler(createContext(c)) 77 }) 78 } 79 80 g := s.App.Group(prefix, fiberHandlers...).(*fiber.Group) 81 82 return &Group{ 83 FGroup: g, 84 App: s.App, 85 middlewares: s.middlewares, 86 } 87 } 88 89 func (s *Server) Static(prefix, root string, configs ...server.StaticConfig) { 90 config := fiber.Static{} 91 92 if len(configs) > 0 { 93 config = fiber.Static{ 94 Index: configs[0].Index, 95 Browse: configs[0].Browse, 96 MaxAge: configs[0].MaxAge, 97 Compress: configs[0].Compress, 98 ByteRange: configs[0].ByteRange, 99 Download: configs[0].Download, 100 CacheDuration: configs[0].CacheDuration, 101 } 102 } 103 s.App.Static(prefix, root, config) 104 } 105 106 func (s *Server) Get(path string, handler server.Handler, authConfigs ...*server.AuthConfig) { 107 authConfigs = append(authConfigs, &server.AuthConfig{Action: ""}) 108 s.App.Get(path, transformHandlers([]server.Handler{handler}, s.middlewares...)...).Name(authConfigs[0].Action) 109 } 110 111 func (s *Server) Post(path string, handler server.Handler, authConfigs ...*server.AuthConfig) { 112 authConfigs = append(authConfigs, &server.AuthConfig{Action: ""}) 113 s.App.Post(path, transformHandlers([]server.Handler{handler}, s.middlewares...)...).Name(authConfigs[0].Action) 114 } 115 116 func (s *Server) Put(path string, handler server.Handler, authConfigs ...*server.AuthConfig) { 117 authConfigs = append(authConfigs, &server.AuthConfig{Action: ""}) 118 s.App.Put(path, transformHandlers([]server.Handler{handler}, s.middlewares...)...).Name(authConfigs[0].Action) 119 } 120 121 func (s *Server) Delete(path string, handler server.Handler, authConfigs ...*server.AuthConfig) { 122 authConfigs = append(authConfigs, &server.AuthConfig{Action: ""}) 123 s.App.Delete(path, transformHandlers([]server.Handler{handler}, s.middlewares...)...).Name(authConfigs[0].Action) 124 } 125 126 func (s *Server) Patch(path string, handler server.Handler, authConfigs ...*server.AuthConfig) { 127 authConfigs = append(authConfigs, &server.AuthConfig{Action: ""}) 128 s.App.Patch(path, transformHandlers([]server.Handler{handler}, s.middlewares...)...).Name(authConfigs[0].Action) 129 } 130 131 func (s *Server) Options(path string, handler server.Handler, authConfigs ...*server.AuthConfig) { 132 authConfigs = append(authConfigs, &server.AuthConfig{Action: ""}) 133 s.App.Options(path, transformHandlers([]server.Handler{handler}, s.middlewares...)...).Name(authConfigs[0].Action) 134 } 135 136 func (s *Server) Head(path string, handler server.Handler, authConfigs ...*server.AuthConfig) { 137 authConfigs = append(authConfigs, &server.AuthConfig{Action: ""}) 138 s.App.Options(path, transformHandlers([]server.Handler{handler}, s.middlewares...)...).Name(authConfigs[0].Action) 139 }