package httpserver import ( "context" "log/slog" "net/http" "time" "github.com/go-chi/chi/v5" chimw "github.com/go-chi/chi/v5/middleware" appmw "qctextbuilder/internal/httpserver/middleware" ) type Server struct { httpServer *http.Server } func New(addr string, logger *slog.Logger, registerRoutes func(r chi.Router)) *Server { r := chi.NewRouter() r.Use(chimw.RequestID) r.Use(chimw.Recoverer) r.Use(chimw.Timeout(30 * time.Second)) r.Use(appmw.RequestLogger(logger)) registerRoutes(r) return &Server{ httpServer: &http.Server{ Addr: addr, Handler: r, }, } } func (s *Server) Run() error { return s.httpServer.ListenAndServe() } func (s *Server) Shutdown(ctx context.Context) error { return s.httpServer.Shutdown(ctx) }