gin.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package server
  2. import (
  3. "time"
  4. "git.linuxforward.com/byom/byom-golang-lib/pkg/errors"
  5. "github.com/gin-gonic/gin"
  6. "github.com/sirupsen/logrus"
  7. )
  8. type ServerConfig struct {
  9. AllowedOrigins []string
  10. RequestTimeout time.Duration
  11. }
  12. type Server struct {
  13. router *gin.Engine
  14. logger *logrus.Logger
  15. config ServerConfig
  16. }
  17. func NewGinServer(logger *logrus.Logger, config *Config) (*Server, error) {
  18. if logger == nil {
  19. return nil, errors.NewConfigError("server", errors.ErrInvalidInput)
  20. }
  21. // Set Gin mode to release
  22. gin.SetMode(gin.ReleaseMode)
  23. // Initialize router
  24. router := gin.New()
  25. server := &Server{
  26. router: router,
  27. logger: logger,
  28. config: config.ToServerConfig(),
  29. }
  30. // Add middleware in specific order
  31. router.Use(server.recoveryMiddleware())
  32. router.Use(server.requestIDMiddleware())
  33. router.Use(server.loggerMiddleware())
  34. router.Use(server.corsMiddleware())
  35. router.Use(server.errorHandlerMiddleware())
  36. return server, nil
  37. }
  38. func (s *Server) Router() *gin.Engine {
  39. return s.router
  40. }
  41. // AddHealthCheck adds a basic health check endpoint
  42. func (s *Server) AddHealthCheck() {
  43. s.router.GET("/health", func(c *gin.Context) {
  44. c.JSON(200, gin.H{
  45. "status": "ok",
  46. "time": time.Now().UTC(),
  47. })
  48. })
  49. }