package server import ( "net/http" "DanceLessonsCoach/pkg/config" "DanceLessonsCoach/pkg/greet" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/rs/zerolog/log" ) type Server struct { router *chi.Mux } func NewServer(cfg *config.Config) *Server { s := &Server{ router: chi.NewRouter(), } s.setupRoutes() return s } func (s *Server) setupRoutes() { // Use Zerolog middleware instead of Chi's default logger s.router.Use(middleware.RequestLogger(&middleware.DefaultLogFormatter{ Logger: &log.Logger, NoColor: false, })) // Health endpoint at root level s.router.Get("/api/health", s.handleHealth) // API routes s.router.Route("/api/v1", func(r chi.Router) { r.Use(s.apiMiddlewares()...) s.registerApiV1Routes(r) }) } func (s *Server) registerApiV1Routes(r chi.Router) { greetService := greet.NewService() greetHandler := greet.NewApiV1GreetHandler(greetService) r.Route("/greet", func(r chi.Router) { greetHandler.RegisterRoutes(r) }) } func (s *Server) apiMiddlewares() []func(http.Handler) http.Handler { return []func(http.Handler) http.Handler{ middleware.StripSlashes, middleware.Recoverer, } } func (s *Server) handleHealth(w http.ResponseWriter, r *http.Request) { log.Info().Msg("Health check requested") w.Write([]byte(`{"status":"healthy"}`)) } func (s *Server) Router() http.Handler { return s.router }