package server import ( "time" "git.linuxforward.com/byom/byom-golang-lib/pkg/errors" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" ) type ServerConfig struct { AllowedOrigins []string RequestTimeout time.Duration } type Server struct { router *gin.Engine logger *logrus.Logger config ServerConfig } func NewGinServer(logger *logrus.Logger, config *Config) (*Server, error) { if logger == nil { return nil, errors.NewConfigError("server", errors.ErrInvalidInput) } // Set Gin mode to release gin.SetMode(gin.ReleaseMode) // Initialize router router := gin.New() server := &Server{ router: router, logger: logger, config: config.ToServerConfig(), } // Add middleware in specific order router.Use(server.recoveryMiddleware()) router.Use(server.requestIDMiddleware()) router.Use(server.loggerMiddleware()) router.Use(server.corsMiddleware()) router.Use(server.errorHandlerMiddleware()) return server, nil } func (s *Server) Router() *gin.Engine { return s.router } // AddHealthCheck adds a basic health check endpoint func (s *Server) AddHealthCheck() { s.router.GET("/health", func(c *gin.Context) { c.JSON(200, gin.H{ "status": "ok", "time": time.Now().UTC(), }) }) }