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  }